From 90411d6e9006f50e5cb0805f3995b161ce8cc88e Mon Sep 17 00:00:00 2001 From: kevin zhao Date: Mon, 10 Nov 2025 18:50:31 -0800 Subject: [PATCH] [parser.rs] match token vector on length --- codex-rs/execpolicy2/src/parser.rs | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/codex-rs/execpolicy2/src/parser.rs b/codex-rs/execpolicy2/src/parser.rs index c8c5ba4eff..c21321b88a 100644 --- a/codex-rs/execpolicy2/src/parser.rs +++ b/codex-rs/execpolicy2/src/parser.rs @@ -107,22 +107,18 @@ fn parse_pattern_token<'v>(value: Value<'v>) -> Result { })?; tokens.push(s.to_string()); } - if tokens.is_empty() { - return Err(Error::InvalidPattern( + match tokens.as_slice() { + [] => Err(Error::InvalidPattern( "pattern alternatives cannot be empty".to_string(), - )); + )), + [single] => Ok(PatternToken::Single(single.clone())), + _ => Ok(PatternToken::Alts(tokens)), } - if tokens.is_empty() { - Err(Error::InvalidPattern(...)) - } else if tokens.len() == 1 { - Ok(PatternToken::Single(tokens.into_iter().next().unwrap())) - } else { - Ok(PatternToken::Alts(tokens)) - }) + } else { + Err(Error::InvalidPattern( + "pattern element must be a string or list of strings".to_string(), + )) } - Err(Error::InvalidPattern( - "pattern element must be a string or list of strings".to_string(), - )) } fn parse_examples<'v>(examples: UnpackList>) -> Result>> { @@ -185,7 +181,7 @@ fn policy_builtins(builder: &mut GlobalsBuilder) { let (first_token, remaining_tokens) = pattern_tokens .split_first() - .expect("pattern validated as non-empty"); + .ok_or_else(|| Error::InvalidPattern("pattern cannot be empty".to_string()))?; #[expect(clippy::unwrap_used)] let builder = eval