mod.rs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. //! # All commands handlers
  2. pub mod client;
  3. pub mod hash;
  4. pub mod key;
  5. pub mod list;
  6. pub mod metrics;
  7. pub mod pubsub;
  8. pub mod set;
  9. pub mod string;
  10. pub mod transaction;
  11. #[cfg(test)]
  12. mod test {
  13. use crate::{
  14. connection::{connections::Connections, Connection},
  15. db::Db,
  16. dispatcher::Dispatcher,
  17. error::Error,
  18. value::Value,
  19. };
  20. use bytes::Bytes;
  21. use std::{
  22. net::{IpAddr, Ipv4Addr, SocketAddr},
  23. sync::Arc,
  24. };
  25. use tokio::sync::mpsc::UnboundedReceiver;
  26. pub fn create_connection() -> Arc<Connection> {
  27. let db = Arc::new(Db::new(1000));
  28. let all_connections = Arc::new(Connections::new(db.clone()));
  29. let client = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 8080);
  30. all_connections.new_connection(db.clone(), client).1
  31. }
  32. pub fn create_connection_and_pubsub() -> (UnboundedReceiver<Value>, Arc<Connection>) {
  33. let db = Arc::new(Db::new(1000));
  34. let all_connections = Arc::new(Connections::new(db.clone()));
  35. let client = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 8080);
  36. all_connections.new_connection(db.clone(), client)
  37. }
  38. pub fn create_new_connection_from_connection(
  39. conn: &Connection,
  40. ) -> (UnboundedReceiver<Value>, Arc<Connection>) {
  41. let all_connections = conn.all_connections();
  42. let client = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 8080);
  43. all_connections.new_connection(all_connections.db(), client)
  44. }
  45. pub async fn run_command(conn: &Connection, cmd: &[&str]) -> Result<Value, Error> {
  46. let args: Vec<Bytes> = cmd.iter().map(|s| Bytes::from(s.to_string())).collect();
  47. let dispatcher = Dispatcher::new();
  48. let handler = dispatcher.get_handler(&args)?;
  49. handler.execute(conn, &args).await
  50. }
  51. }