Skip to main content

muster/domain/value/
process_name.rs

1use nutype::nutype;
2
3/// A process's display name: trimmed and non-empty.
4#[nutype(
5    sanitize(trim),
6    validate(not_empty),
7    derive(
8        Debug,
9        Clone,
10        PartialEq,
11        Eq,
12        Hash,
13        AsRef,
14        Display,
15        Serialize,
16        Deserialize
17    )
18)]
19pub struct ProcessName(String);
20
21#[cfg(test)]
22mod tests {
23    use super::*;
24
25    #[test]
26    fn trims_surrounding_whitespace() {
27        let name = ProcessName::try_new("  Claude Code  ").unwrap();
28        assert_eq!(name.as_ref(), "Claude Code");
29    }
30
31    #[test]
32    fn rejects_empty_and_whitespace_only() {
33        assert!(ProcessName::try_new("").is_err());
34        assert!(ProcessName::try_new("   ").is_err());
35    }
36}