codama-attributes 0.13.1

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

impl FromMeta for FixedCountNode {
    fn from_meta(meta: &Meta) -> syn::Result<Self> {
        let pl = meta.assert_directive("fixed_count")?.as_path_list()?;
        let mut value: SetOnce<u64> = SetOnce::new("value");

        pl.each(|ref meta| match meta.path_str().as_str() {
            "value" => value.set(meta.as_value()?.as_expr()?.as_unsigned_integer()?, meta),
            _ => {
                if let Ok(expr) = meta.as_expr() {
                    return value.set(expr.as_unsigned_integer()?, meta);
                }
                Err(meta.error("unrecognized attribute"))
            }
        })?;

        Ok(FixedCountNode::new(value.take(meta)?))
    }
}