operon 0.7.0

A workflow engine for parallel, incremental scheduling of DAG-defined multiplex tasks.
Documentation
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct OptionCoordinate(pub Option<usize>);

impl OptionCoordinate {
    pub const fn new(dim: Option<usize>) -> Self {
        Self(dim)
    }

    pub const fn some(dim: usize) -> Self {
        Self(Some(dim))
    }

    pub const fn none() -> Self {
        Self(None)
    }

    pub const fn is_some(&self) -> bool {
        self.0.is_some()
    }

    pub const fn is_none(&self) -> bool {
        self.0.is_none()
    }

    pub fn unwrap(self) -> usize {
        self.0.unwrap()
    }

    pub fn unwrap_or(self, default: usize) -> usize {
        self.0.unwrap_or(default)
    }

    pub fn as_sql_param(&self) -> Result<i64, std::num::TryFromIntError> {
        match self.0 {
            Some(n) => i64::try_from(n),
            None => Ok(-1),
        }
    }

    pub fn from_sql_value(value: i64) -> Result<Self, std::num::TryFromIntError> {
        match value {
            -1 => Ok(Self(None)),
            n => Ok(Self(Some(usize::try_from(n)?))),
        }
    }
}

impl From<usize> for OptionCoordinate {
    fn from(dim: usize) -> Self {
        Self(Some(dim))
    }
}