diff --git a/rust/derive/src/stringenum.rs b/rust/derive/src/stringenum.rs index 55599761c9..78f986faac 100644 --- a/rust/derive/src/stringenum.rs +++ b/rust/derive/src/stringenum.rs @@ -89,6 +89,7 @@ where let mut values = Vec::new(); let mut names = Vec::new(); let mut names_upper = Vec::new(); + let mut names_lower = Vec::new(); let mut fields = Vec::new(); let mut enum_string_style = String::from(""); @@ -105,11 +106,13 @@ where "UPPERCASE" => { names.push(v.ident.to_string().to_ascii_uppercase()); names_upper.push(v.ident.to_string().to_ascii_uppercase()); + names_lower.push(v.ident.to_string().to_ascii_lowercase()); } "LOG_UPPERCASE" => { names.push(v.ident.to_string().to_ascii_uppercase()); let fname = transform_name(&v.ident.to_string()); let fnameu = fname.to_ascii_uppercase(); + names_lower.push(fnameu.to_ascii_lowercase()); names_upper.push(fnameu); } "" => { @@ -117,6 +120,7 @@ where let fname = transform_name(&v.ident.to_string()); let fnameu = fname.to_ascii_uppercase(); names.push(fname); + names_lower.push(fnameu.to_ascii_lowercase()); names_upper.push(fnameu); } _ => { @@ -180,6 +184,12 @@ where _ => None } } + fn list_values(jsb: &mut #crate_id::jsonbuilder::JsonBuilder) -> Result<(), #crate_id::jsonbuilder::JsonError> { + jsb.open_object("enum_values")?; + #( jsb.set_uint(#names_lower, #values as u64)?;)* + jsb.close()?; + Ok(()) + } } }; diff --git a/rust/src/detect/mod.rs b/rust/src/detect/mod.rs index ef90ca3482..0c57481f0f 100644 --- a/rust/src/detect/mod.rs +++ b/rust/src/detect/mod.rs @@ -56,6 +56,13 @@ pub trait EnumString { fn from_str(s: &str) -> Option where Self: Sized; + + /// Get an enum variant from parsing a string. + fn list_values( + jsb: &mut crate::jsonbuilder::JsonBuilder, + ) -> Result<(), crate::jsonbuilder::JsonError> + where + Self: Sized; } pub use suricata_ffi::detect::{