ninja-files-data 0.1.0

Core data structures for ninja files
Documentation
use std::borrow::Cow;
mod as_ref;
mod try_from;

#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
pub struct RuleId(Cow<'static, str>);

#[derive(Clone, Debug)]
pub struct InvalidRuleId(Cow<'static, str>);

impl RuleId {
    pub const fn is_valid(_input: &str) -> bool {
        true
    }
    pub fn try_create<Id>(id: Id) -> Result<Self, InvalidRuleId>
    where
        Id: AsRef<str>,
    {
        let data = Cow::Owned(id.as_ref().into());
        if Self::is_valid(id.as_ref()) {
            Ok(RuleId(data))
        } else {
            Err(InvalidRuleId(data))
        }
    }

    pub const fn unsafe_create(id: &'static str) -> Self {
        if Self::is_valid(id) {
            RuleId(Cow::Borrowed(id))
        } else {
            panic!("Invalid rule id");
        }
    }
}

pub const DYNDEP: &RuleId = &RuleId::unsafe_create("dyndep");
pub const PHONY: &RuleId = &RuleId::unsafe_create("phony");