diff --git a/members/lexers/src/assignments/primitive.rs b/members/lexers/src/assignments/primitive.rs index 37cdcaf2ce8eff22405d4a21b1718bb167c87316..39dc7b0d92771ed805d42cf5880adebd6952d440 100644 --- a/members/lexers/src/assignments/primitive.rs +++ b/members/lexers/src/assignments/primitive.rs @@ -27,17 +27,16 @@ impl Primitive { "[int]" => Some(Primitive::IntegerArray), "float" => Some(Primitive::Float), "[float]" => Some(Primitive::FloatArray), - kind => { - let mut parts = kind.splitn(2, '['); - let collection = parts.next()?; - let inner = parts.next()?; - if let (inner, "]") = inner.split_at(inner.len() - 1) { - let inner = Box::new(Primitive::parse(inner)?); - match collection { - "hmap" => Some(Primitive::HashMap(inner)), - "bmap" => Some(Primitive::BTreeMap(inner)), - _ => None, - } + _ => { + let open_bracket = data.find('[')?; + let close_bracket = data.rfind(']')?; + let kind = &data[..open_bracket].trim_start(); + let inner = &data[open_bracket + 1..close_bracket]; + + if *kind == "hmap" { + Some(Primitive::HashMap(Box::new(Primitive::parse(inner)?))) + } else if *kind == "bmap" { + Some(Primitive::BTreeMap(Box::new(Primitive::parse(inner)?))) } else { None }