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::RawContainer;
use crate::model::attr::{parse_string, require_value, set_once};
use syn::{Lit, meta::ParseNestedMeta};

pub(super) fn long_about(meta: &ParseNestedMeta, raw: &mut RawContainer) -> syn::Result<()> {
    let literal = parse_string(
        meta,
        "long_about",
        "long_about = \"Does things.\\n\\nIn more detail.\"",
    )?;
    set_once(&mut raw.long_about, literal.value(), meta)
}

pub(super) fn before_help(meta: &ParseNestedMeta, raw: &mut RawContainer) -> syn::Result<()> {
    let literal = parse_string(meta, "before_help", "before_help = \"Read this first\"")?;
    set_once(&mut raw.before_help, literal.value(), meta)
}

pub(super) fn after_help(meta: &ParseNestedMeta, raw: &mut RawContainer) -> syn::Result<()> {
    let literal = parse_string(meta, "after_help", "after_help = \"See the manual\"")?;
    set_once(&mut raw.after_help, literal.value(), meta)
}

pub(super) fn max_term_width(meta: &ParseNestedMeta, raw: &mut RawContainer) -> syn::Result<()> {
    const MESSAGE: &str =
        "`max_term_width` expects a positive integer literal, e.g. `max_term_width = 80`";
    let width =
        match require_value(meta, "max_term_width", "max_term_width = 80")?.parse::<Lit>()? {
            Lit::Int(literal) => match literal.base10_parse::<usize>() {
                Ok(width) if width > 0 => width,
                _ => return Err(syn::Error::new(literal.span(), MESSAGE)),
            },
            other => return Err(syn::Error::new(other.span(), MESSAGE)),
        };
    set_once(&mut raw.max_term_width, width, meta)
}