named_item/
unique_name_enforcer.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
crate::ix!();

/// Trait for ensuring unique names across a collection or context.
pub struct UniqueNameEnforcer {
    names: HashSet<String>,
}

impl UniqueNameEnforcer {
    pub fn new() -> Self {
        Self {
            names: HashSet::new(),
        }
    }

    /// Adds a name to the unique set. Returns an error if the name already exists.
    pub fn add_unique_name(&mut self, name: &str) -> Result<(), NameError> {
        if self.names.contains(name) {
            Err(NameError::DuplicateName(name.to_string()))
        } else {
            self.names.insert(name.to_string());
            Ok(())
        }
    }
}