codama-attributes 0.13.2

Codama attributes definitions and parsers
Documentation
use crate::utils::FromMeta;
use codama_nodes::DisplaySkip;
use codama_syn_helpers::{extensions::*, Meta};

impl FromMeta for DisplaySkip {
    fn from_meta(meta: &Meta) -> syn::Result<Self> {
        let path = meta.as_path()?;
        if path.is_strict("always") {
            Ok(Self::Always)
        } else if path.is_strict("never") {
            Ok(Self::Never)
        } else if path.is_strict("when_injected") {
            Ok(Self::WhenInjected)
        } else {
            Err(path.error("expected always, never, or when_injected"))
        }
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn parses_supported_values() {
        for (meta, expected) in [
            (syn::parse_quote! { always }, DisplaySkip::Always),
            (syn::parse_quote! { never }, DisplaySkip::Never),
            (
                syn::parse_quote! { when_injected },
                DisplaySkip::WhenInjected,
            ),
        ] {
            assert_eq!(DisplaySkip::from_meta(&meta).unwrap(), expected);
        }
    }

    #[test]
    fn rejects_unsupported_values() {
        let meta: Meta = syn::parse_quote! { sometimes };
        assert_eq!(
            DisplaySkip::from_meta(&meta).unwrap_err().to_string(),
            "expected always, never, or when_injected"
        );
    }
}