diff --git a/Cargo.toml b/Cargo.toml index 1c87aead..235bd13f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -133,6 +133,7 @@ serde = { version = "1", features = ["derive"] } nix = { version = "0.26", default-features = false } cfg-if = "1" redis-module-macros-internals = { path = "./redismodule-rs-macros-internals" } +strum = {version = "0.27.2",features = ["derive"]} log = "0.4" [dev-dependencies] diff --git a/build.rs b/build.rs index 707d99ad..448ec4b3 100644 --- a/build.rs +++ b/build.rs @@ -12,19 +12,13 @@ impl ParseCallbacks for RedisModuleCallback { fn int_macro(&self, name: &str, _value: i64) -> Option { if name.starts_with("REDISMODULE_SUBEVENT_") || name.starts_with("REDISMODULE_EVENT_") { Some(IntKind::U64) - } else if name.starts_with("REDISMODULE_REPLY_") - || name.starts_with("REDISMODULE_KEYTYPE_") - || name.starts_with("REDISMODULE_AUX_") - || name == "REDISMODULE_OK" - || name == "REDISMODULE_ERR" - || name == "REDISMODULE_LIST_HEAD" - || name == "REDISMODULE_LIST_TAIL" - { - // These values are used as `enum` discriminants, and thus must be `isize`. - Some(IntKind::Custom { - name: "isize", - is_signed: true, - }) + } else if name == "REPLY_TYPE" + || name.starts_with("REDISMODULE_REPLY_") { + // These values are used as `enum` discriminants, and thus must be `isize`. + Some(IntKind::Custom { + name: "i32", + is_signed: true, + }) } else if name.starts_with("REDISMODULE_NOTIFY_") { Some(IntKind::Int) } else { diff --git a/src/raw.rs b/src/raw.rs index 71622f3f..f79ec786 100644 --- a/src/raw.rs +++ b/src/raw.rs @@ -40,7 +40,8 @@ bitflags! { } } -#[derive(Primitive, Debug, PartialEq, Eq)] +#[repr(u32)] +#[derive(Primitive, Debug, PartialEq, Eq, strum::FromRepr)] pub enum KeyType { Empty = REDISMODULE_KEYTYPE_EMPTY, String = REDISMODULE_KEYTYPE_STRING, @@ -58,13 +59,15 @@ impl From for KeyType { } } -#[derive(Primitive, Debug, PartialEq, Eq)] +#[repr(u32)] +#[derive(Primitive, Debug, PartialEq, Eq, strum::FromRepr)] pub enum Where { ListHead = REDISMODULE_LIST_HEAD, ListTail = REDISMODULE_LIST_TAIL, } -#[derive(Primitive, Debug, PartialEq, Eq)] +#[repr(i32)] +#[derive(Primitive, Debug, PartialEq, Eq, strum::FromRepr)] pub enum ReplyType { Unknown = REDISMODULE_REPLY_UNKNOWN, String = REDISMODULE_REPLY_STRING, @@ -86,13 +89,15 @@ impl From for ReplyType { } } -#[derive(Primitive, Debug, PartialEq, Eq)] +#[repr(u32)] +#[derive(Primitive, Debug, PartialEq, Eq, strum::FromRepr)] pub enum Aux { Before = REDISMODULE_AUX_BEFORE_RDB, After = REDISMODULE_AUX_AFTER_RDB, } -#[derive(Primitive, Debug, PartialEq, Eq)] +#[repr(u32)] +#[derive(Primitive, Debug, PartialEq, Eq, strum::FromRepr)] pub enum Status { Ok = REDISMODULE_OK, Err = REDISMODULE_ERR,