cote-derive 0.12.2

Quickly build your command line utils
Documentation
use syn::Ident;

use super::Kind;
use super::Style;
use crate::error;

#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
pub enum InferKind {
    Val,

    Action,

    Force,

    Ctor,

    Index,

    Style,

    IgName,

    IgAlias,

    IgIndex,

    Valid,

    Init,

    Type,

    Map,

    Mutable,

    Tweak,

    Fill,

    Override,
}

impl Kind for InferKind {
    fn parse(input: &mut syn::parse::ParseStream) -> syn::Result<(Self, Style)> {
        let ident: Ident = input.parse()?;
        let option = ident.to_string();

        match option.as_str() {
            "val" => Ok((Self::Val, Style::Value)),
            "action" => Ok((Self::Action, Style::Value)),
            "force" => Ok((Self::Force, Style::Value)),
            "ctor" => Ok((Self::Ctor, Style::Value)),
            "index" => Ok((Self::Index, Style::Value)),
            "style" => Ok((Self::Style, Style::Value)),
            "igname" => Ok((Self::IgName, Style::Value)),
            "igalias" => Ok((Self::IgAlias, Style::Value)),
            "igindex" => Ok((Self::IgIndex, Style::Value)),
            "valid" => Ok((Self::Valid, Style::Value)),
            "init" => Ok((Self::Init, Style::Value)),
            "ty" => Ok((Self::Type, Style::Value)),
            "map" => Ok((Self::Map, Style::Value)),
            "mutable" => Ok((Self::Mutable, Style::Value)),
            "tweak" => Ok((Self::Tweak, Style::Value)),
            "fill" => Ok((Self::Fill, Style::Value)),
            "override" => Ok((Self::Override, Style::Flag)),
            _ => Err(error(
                input.span(),
                format!(
                    "unknown configuration name `{}` in attribute infer",
                    option.as_str()
                ),
            )),
        }
    }
}