aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoromagdy <omar.professional8777@gmail.com>2025-07-17 03:44:03 +0300
committeromagdy <omar.professional8777@gmail.com>2025-07-17 03:44:03 +0300
commitc880c7ad3eba9546ce95bc268218c66a128d319f (patch)
tree95bfaf60d0123ee542b15b588b4b6c322cd32b28
parent6bdbdf8f86cfe3f2301ac7c1ff029f2b8e2a353c (diff)
downloadredis-rust-c880c7ad3eba9546ce95bc268218c66a128d319f.tar.xz
redis-rust-c880c7ad3eba9546ce95bc268218c66a128d319f.zip
refactor: moved macros to their own file
-rw-r--r--src/macros.rs89
-rw-r--r--src/main.rs2
-rw-r--r--src/resp_commands.rs92
3 files changed, 92 insertions, 91 deletions
diff --git a/src/macros.rs b/src/macros.rs
new file mode 100644
index 0000000..bc4f572
--- /dev/null
+++ b/src/macros.rs
@@ -0,0 +1,89 @@
+#[macro_use]
+#[macro_export]
+macro_rules! resp {
+ // Null: resp!(null)
+ (null) => {
+ $crate::RespType::Null().to_resp_bytes()
+ };
+
+ // Simple String: resp!("PONG") or resp!(simple "PONG")
+ (simple $s:expr) => {
+ $crate::RespType::SimpleString($s.to_string()).to_resp_bytes()
+ };
+ ($s:expr) => {
+ $crate::RespType::SimpleString($s.to_string()).to_resp_bytes()
+ };
+
+ // Simple Error: resp!(error "ERR message")
+ (error $s:expr) => {
+ $crate::RespType::SimpleError($s.to_string()).to_resp_bytes()
+ };
+
+ // Integer: resp!(int 123)
+ (int $i:expr) => {
+ $crate::RespType::Integer($i).to_resp_bytes()
+ };
+
+ // Bulk String: resp!(bulk "hello") or resp!(bulk vec![104, 101, 108, 108, 111])
+ (bulk $s:expr) => {
+ $crate::RespType::BulkString($s.into()).to_resp_bytes()
+ };
+
+ // Array: resp!(array [resp!("one"), resp!(int 2)])
+ (array [$($elem:expr),*]) => {
+ $crate::RespType::Array(vec![$($elem),*]).to_resp_bytes()
+ };
+
+ // Boolean: resp!(bool true)
+ (bool $b:expr) => {
+ $crate::RespType::Boolean($b).to_resp_bytes()
+ };
+
+ // Double: resp!(double 3.14)
+ (double $d:expr) => {
+ $crate::RespType::Doubles($d).to_resp_bytes()
+ };
+
+ // Big Number: resp!(bignumber "123456789")
+ (bignumber $n:expr) => {
+ $crate::RespType::BigNumbers($n.to_string()).to_resp_bytes()
+ };
+
+ // Bulk Error: resp!(bulkerror [resp!("err1"), resp!("err2")])
+ (bulkerror [$($elem:expr),*]) => {
+ $crate::RespType::BulkErrors(vec![$($elem),*]).to_resp_bytes()
+ };
+
+ // Verbatim String: resp!(verbatim [resp!("txt"), resp!("example")])
+ (verbatim [$($elem:expr),*]) => {
+ $crate::RespType::VerbatimStrings(vec![$($elem),*]).to_resp_bytes()
+ };
+
+ // Map: resp!(map {resp!("key") => resp!("value")})
+ (map {$($key:expr => $value:expr),*}) => {
+ $crate::RespType::Maps({
+ let mut map = HashMap::new();
+ $(map.insert($key, $value);)*
+ map
+ }).to_resp_bytes()
+ };
+
+ // Attributes: resp!(attributes [resp!("key"), resp!("value")])
+ (attributes [$($elem:expr),*]) => {
+ $crate::RespType::Attributes(vec![$($elem),*]).to_resp_bytes()
+ };
+
+ // Set: resp!(set [resp!("one"), resp!("two")])
+ (set [$($elem:expr),*]) => {
+ $crate::RespType::Sets({
+ let mut set = HashSet::new();
+ $(set.insert($elem);)*
+ set
+ }).to_resp_bytes()
+ };
+
+ // Push: resp!(push [resp!("event"), resp!("data")])
+ (push [$($elem:expr),*]) => {
+ $crate::RespType::Pushes(vec![$($elem),*]).to_resp_bytes()
+ };
+}
diff --git a/src/main.rs b/src/main.rs
index 6905f11..c6c8720 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -8,6 +8,8 @@ use std::{
time::{Duration, SystemTime, UNIX_EPOCH},
};
+#[macro_use]
+mod macros;
mod resp_commands;
mod resp_parser;
diff --git a/src/resp_commands.rs b/src/resp_commands.rs
index 52167cc..2663cc5 100644
--- a/src/resp_commands.rs
+++ b/src/resp_commands.rs
@@ -1,97 +1,7 @@
-use crate::CacheEntry;
-use crate::{resp_parser::*, SharedCache};
+use crate::{macros::*, resp_parser::*, CacheEntry, SharedCache};
use std::collections::{HashMap, HashSet};
use std::time::{Duration, SystemTime, UNIX_EPOCH};
-#[macro_export]
-macro_rules! resp {
- // Null: resp!(null)
- (null) => {
- $crate::RespType::Null().to_resp_bytes()
- };
-
- // Simple String: resp!("PONG") or resp!(simple "PONG")
- (simple $s:expr) => {
- $crate::RespType::SimpleString($s.to_string()).to_resp_bytes()
- };
- ($s:expr) => {
- $crate::RespType::SimpleString($s.to_string()).to_resp_bytes()
- };
-
- // Simple Error: resp!(error "ERR message")
- (error $s:expr) => {
- $crate::RespType::SimpleError($s.to_string()).to_resp_bytes()
- };
-
- // Integer: resp!(int 123)
- (int $i:expr) => {
- $crate::RespType::Integer($i).to_resp_bytes()
- };
-
- // Bulk String: resp!(bulk "hello") or resp!(bulk vec![104, 101, 108, 108, 111])
- (bulk $s:expr) => {
- $crate::RespType::BulkString($s.into()).to_resp_bytes()
- };
-
- // Array: resp!(array [resp!("one"), resp!(int 2)])
- (array [$($elem:expr),*]) => {
- $crate::RespType::Array(vec![$($elem),*]).to_resp_bytes()
- };
-
- // Boolean: resp!(bool true)
- (bool $b:expr) => {
- $crate::RespType::Boolean($b).to_resp_bytes()
- };
-
- // Double: resp!(double 3.14)
- (double $d:expr) => {
- $crate::RespType::Doubles($d).to_resp_bytes()
- };
-
- // Big Number: resp!(bignumber "123456789")
- (bignumber $n:expr) => {
- $crate::RespType::BigNumbers($n.to_string()).to_resp_bytes()
- };
-
- // Bulk Error: resp!(bulkerror [resp!("err1"), resp!("err2")])
- (bulkerror [$($elem:expr),*]) => {
- $crate::RespType::BulkErrors(vec![$($elem),*]).to_resp_bytes()
- };
-
- // Verbatim String: resp!(verbatim [resp!("txt"), resp!("example")])
- (verbatim [$($elem:expr),*]) => {
- $crate::RespType::VerbatimStrings(vec![$($elem),*]).to_resp_bytes()
- };
-
- // Map: resp!(map {resp!("key") => resp!("value")})
- (map {$($key:expr => $value:expr),*}) => {
- $crate::RespType::Maps({
- let mut map = HashMap::new();
- $(map.insert($key, $value);)*
- map
- }).to_resp_bytes()
- };
-
- // Attributes: resp!(attributes [resp!("key"), resp!("value")])
- (attributes [$($elem:expr),*]) => {
- $crate::RespType::Attributes(vec![$($elem),*]).to_resp_bytes()
- };
-
- // Set: resp!(set [resp!("one"), resp!("two")])
- (set [$($elem:expr),*]) => {
- $crate::RespType::Sets({
- let mut set = HashSet::new();
- $(set.insert($elem);)*
- set
- }).to_resp_bytes()
- };
-
- // Push: resp!(push [resp!("event"), resp!("data")])
- (push [$($elem:expr),*]) => {
- $crate::RespType::Pushes(vec![$($elem),*]).to_resp_bytes()
- };
-}
-
#[derive(Debug, Clone)]
pub enum SetCondition {
/// NX - only set if key doesn't exists