]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
rust/derive: string enumeration become case insensitive
authorPhilippe Antoine <pantoine@oisf.net>
Mon, 17 Jun 2024 21:50:51 +0000 (23:50 +0200)
committerVictor Julien <victor@inliniac.net>
Tue, 16 Jul 2024 04:43:03 +0000 (06:43 +0200)
As needed for MQTTTypeCode which accepts both CONNECT uppercase
and unassigned lowercase

rust/derive/src/stringenum.rs

index 5344b934cde6bb6cf3880c67b470e7b4b0364e2f..8eb33e43e6b1bb67d3224a1350e9e482f3309004 100644 (file)
@@ -27,13 +27,16 @@ pub fn derive_enum_string<T: std::str::FromStr + quote::ToTokens>(input: TokenSt
     let name = input.ident;
     let mut values = Vec::new();
     let mut names = Vec::new();
+    let mut names_upper = Vec::new();
     let mut fields = Vec::new();
 
     if let syn::Data::Enum(ref data) = input.data {
         for v in (&data.variants).into_iter() {
             if let Some((_, val)) = &v.discriminant {
                 let fname = transform_name(&v.ident.to_string());
+                let fnameu = fname.to_ascii_uppercase();
                 names.push(fname);
+                names_upper.push(fnameu);
                 fields.push(v.ident.clone());
                 if let syn::Expr::Lit(l) = val {
                     if let syn::Lit::Int(li) = &l.lit {
@@ -84,8 +87,8 @@ pub fn derive_enum_string<T: std::str::FromStr + quote::ToTokens>(input: TokenSt
                 }
             }
             fn from_str(s: &str) -> Option<Self> {
-                match s {
-                    #( #names => Some(#name::#fields) ,)*
+                match s.to_ascii_uppercase().as_str() {
+                    #( #names_upper => Some(#name::#fields) ,)*
                     _ => None
                 }
             }