willdo 0.0.1

Task manager with DAG
Documentation
use core::fmt::{Display, Formatter, Result};

use super::{Code, JobId};

impl Display for JobId {
    fn fmt(&self, f: &mut Formatter<'_>) -> Result {
        f.write_str(self.name.as_ref())?;
        for deeper in self.namespace.iter().rev() {
            f.write_str("@")?;
            f.write_str(deeper.as_ref())?;
        }
        Ok(())
    }
}

impl Display for Code {
    fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result {
        match self {
            Code::Explicit(code) => write!(f, "code = {code}"),
            Code::Range { min, max, mask } => {
                let mut unconditional = false;
                if (*min..*max) == (0usize..usize::MAX) {
                    unconditional = true;
                    write!(f, "code")?;
                } else if min <= max {
                    if *max == usize::MAX {
                        write!(f, "code >= {min}")?;
                    } else {
                        write!(f, "code in [{min},{max}]")?;
                    }
                } else {
                    write!(f, "code not in ({max},{min})")?;
                }
                if *mask != 0 {
                    write!(f, " & {mask:b}")?;
                } else if unconditional {
                    write!(f, " any")?;
                }
                Ok(())
            }
        }
    }
}