zkevm-assembly 0.151.7

The zkEVM common utilities
Documentation
use super::*;

pub fn pick_condition(
    modifiers: &mut HashSet<&str>,
) -> Result<ConditionCase, InstructionReadError> {
    let mut result = None;
    for modifier in ConditionCase::ALL_CANONICAL_MODIFIERS.iter() {
        if modifiers.contains(modifier) {
            if result.is_some() {
                return Err(InstructionReadError::UnknownArgument(format!(
                    "duplicate condition case in modifiers: already have {:?}, got {}",
                    result.unwrap(),
                    modifier
                )));
            } else {
                modifiers.remove(modifier);
                result = Some(ConditionCase::from_modifier(modifier)?);
            }
        }
    }

    Ok(result.unwrap_or_default())
}

pub fn pick_setting_flags(modifiers: &mut HashSet<&str>) -> Result<SetFlags, InstructionReadError> {
    let mut result = None;
    for modifier in SetFlags::ALL_CANONICAL_MODIFIERS.iter() {
        if modifiers.contains(modifier) {
            if result.is_some() {
                return Err(InstructionReadError::UnknownArgument(format!(
                    "duplicate condition case in set flags modifiers: already have {:?}, got {}",
                    result.unwrap(),
                    modifier
                )));
            } else {
                modifiers.remove(modifier);
                result = Some(SetFlags::from_modifier(modifier)?);
            }
        }
    }

    Ok(result.unwrap_or_default())
}