getargs-derive-macros 0.1.0

Internal implementation detail of getargs-derive. Not meant for direct use; depend on getargs-derive instead.
Documentation
use super::RawField;
use crate::model::attr::{parse_string, reject_value, require_value, set_once};
use syn::{Lit, meta::ParseNestedMeta};

pub(super) fn hide(meta: &ParseNestedMeta, raw: &mut RawField) -> syn::Result<()> {
    reject_value(meta, "hide")?;
    set_once(&mut raw.hide, (), meta)
}

pub(super) fn help_heading(meta: &ParseNestedMeta, raw: &mut RawField) -> syn::Result<()> {
    let literal = parse_string(meta, "help_heading", "help_heading = \"Network\"")?;
    let value = literal.value();
    if value.trim().is_empty() {
        return Err(syn::Error::new(
            literal.span(),
            "`help_heading` cannot be empty",
        ));
    }
    set_once(&mut raw.help_heading, value, meta)
}

pub(super) fn display_order(meta: &ParseNestedMeta, raw: &mut RawField) -> syn::Result<()> {
    const MESSAGE: &str =
        "`display_order` expects a non-negative integer literal, e.g. `display_order = 1`";
    let value = match require_value(meta, "display_order", "display_order = 1")?.parse::<Lit>()? {
        Lit::Int(literal) => match literal.base10_parse::<usize>() {
            Ok(value) => (value, literal.span()),
            Err(_) => return Err(syn::Error::new(literal.span(), MESSAGE)),
        },
        other => return Err(syn::Error::new(other.span(), MESSAGE)),
    };
    set_once(&mut raw.display_order, value, meta)
}

pub(super) fn long_help(meta: &ParseNestedMeta, raw: &mut RawField) -> syn::Result<()> {
    let literal = parse_string(
        meta,
        "long_help",
        "long_help = \"Print more output.\\n\\nRepeat for even more.\"",
    )?;
    set_once(&mut raw.long_help, literal.value(), meta)
}