fn from_str()

in reverie-examples/strace/filter.rs [26:49]


    fn from_str(s: &str) -> Result<Self, Self::Err> {
        let (inverse, s) = match s.strip_prefix('!') {
            Some(s) => (true, s),
            None => (false, s),
        };

        let mut syscalls = Vec::new();

        for value in s.split(',') {
            // FIXME: Handle syscall sets, so we can use '%stat` to trace all
            // stat calls, for example.
            if value.strip_prefix('%').is_some() {
                return Err("filtering sets of syscall is not yet supported".into());
            }

            let syscall: Sysno = value
                .parse()
                .map_err(|()| format!("invalid syscall name '{}'", value))?;

            syscalls.push(syscall);
        }

        Ok(Self { inverse, syscalls })
    }