use kevy_rt::NotifyClass;
pub(crate) fn is_write_verb(cmd: &[u8]) -> bool {
matches!(
cmd,
b"SET"
| b"SETNX"
| b"SETEX"
| b"PSETEX"
| b"GETSET"
| b"GETDEL"
| b"INCRBYFLOAT"
| b"COPY"
| b"BITOP"
| b"DEL"
| b"UNLINK"
| b"INCR"
| b"DECR"
| b"INCRBY"
| b"DECRBY"
| b"APPEND"
| b"SETBIT"
| b"SETRANGE"
| b"GETEX"
| b"EXPIRE"
| b"PEXPIRE"
| b"EXPIREAT"
| b"PEXPIREAT"
| b"HEXPIRE"
| b"HPEXPIRE"
| b"HPEXPIREAT"
| b"HPERSIST"
| b"PERSIST"
| b"FLUSHDB"
| b"FLUSHALL"
| b"HSET"
| b"HSETNX"
| b"HMSET"
| b"HDEL"
| b"HINCRBY"
| b"HINCRBYFLOAT"
| b"LINSERT"
| b"LPUSH"
| b"RPUSH"
| b"LPOP"
| b"RPOP"
| b"LSET"
| b"LREM"
| b"LTRIM"
| b"RPOPLPUSH"
| b"BRPOPLPUSH"
| b"LMOVE"
| b"SADD"
| b"SREM"
| b"SPOP"
| b"ZADD"
| b"ZREM"
| b"ZINCRBY"
| b"ZPOPMIN"
| b"ZPOPMIN.BELOW"
| b"BZPOPMIN"
| b"ZREMRANGEBYRANK"
| b"ZREMRANGEBYSCORE"
| b"ZINTERSTORE"
| b"ZUNIONSTORE"
| b"ZDIFFSTORE"
| b"SINTERSTORE"
| b"SUNIONSTORE"
| b"SDIFFSTORE"
| b"GEOADD"
| b"GEOSEARCHSTORE"
| b"GEORADIUS"
| b"GEORADIUSBYMEMBER"
| b"XADD"
| b"XDEL"
| b"XTRIM"
| b"XSETID"
| b"XGROUP"
| b"XREADGROUP"
| b"XACK"
| b"XCLAIM"
| b"XAUTOCLAIM"
| b"MSET"
| b"EVAL" | b"EVALSHA"
)
}
pub(crate) fn notify_class_for_verb(cmd: &[u8]) -> Option<NotifyClass> {
Some(match cmd {
b"SET" | b"SETNX" | b"SETEX" | b"PSETEX" | b"GETSET" | b"GETDEL" | b"APPEND" | b"INCR"
| b"DECR" | b"INCRBY" | b"DECRBY" | b"INCRBYFLOAT" | b"SETBIT" | b"SETRANGE" => {
NotifyClass::String
}
b"HSET" | b"HSETNX" | b"HMSET" | b"HDEL" | b"HINCRBY" | b"HINCRBYFLOAT" | b"HEXPIRE"
| b"HPEXPIRE" | b"HPEXPIREAT" | b"HPERSIST" => NotifyClass::Hash,
b"LPUSH" | b"RPUSH" | b"LPOP" | b"RPOP" | b"LSET" | b"LREM" | b"LTRIM" | b"LINSERT"
| b"RPOPLPUSH" | b"LMOVE" => NotifyClass::List,
b"SADD" | b"SREM" | b"SPOP" | b"SINTERSTORE" | b"SUNIONSTORE" | b"SDIFFSTORE" => {
NotifyClass::Set
}
b"ZADD" | b"ZREM" | b"ZINCRBY" | b"ZPOPMIN" | b"ZPOPMIN.BELOW" | b"ZREMRANGEBYRANK"
| b"ZREMRANGEBYSCORE" | b"ZINTERSTORE" | b"ZUNIONSTORE" | b"ZDIFFSTORE" | b"GEOADD" => {
NotifyClass::Zset
}
b"XADD" | b"XDEL" | b"XTRIM" | b"XSETID" | b"XGROUP" | b"XACK" | b"XCLAIM"
| b"XAUTOCLAIM" | b"XREADGROUP" => NotifyClass::Stream,
b"DEL" | b"UNLINK" | b"EXPIRE" | b"PEXPIRE" | b"PERSIST" => NotifyClass::Generic,
_ => return None,
})
}
pub(crate) fn is_growing_write_verb(cmd: &[u8]) -> bool {
matches!(
cmd,
b"SET"
| b"SETNX"
| b"SETEX"
| b"PSETEX"
| b"GETSET"
| b"INCRBYFLOAT"
| b"INCR"
| b"DECR"
| b"INCRBY"
| b"DECRBY"
| b"APPEND"
| b"SETBIT"
| b"SETRANGE"
| b"COPY"
| b"BITOP"
| b"HSET"
| b"HSETNX"
| b"HMSET"
| b"HINCRBY"
| b"HINCRBYFLOAT"
| b"LINSERT"
| b"LPUSH"
| b"RPUSH"
| b"RPOPLPUSH"
| b"BRPOPLPUSH"
| b"LMOVE"
| b"LSET"
| b"SADD"
| b"ZADD"
| b"ZINCRBY"
| b"ZINTERSTORE"
| b"ZUNIONSTORE"
| b"ZDIFFSTORE"
| b"SINTERSTORE"
| b"SUNIONSTORE"
| b"SDIFFSTORE"
| b"GEOADD"
| b"GEOSEARCHSTORE"
| b"GEORADIUS"
| b"GEORADIUSBYMEMBER"
| b"XADD"
| b"XGROUP"
| b"XREADGROUP"
| b"XCLAIM"
| b"XAUTOCLAIM"
| b"MSET"
)
}