libskyfall_macros 0.1.0

Quantum-Safe P2P Communication System
Documentation
use std::fmt::Display;

use darling::{ast::NestedMeta, FromMeta};
use proc_macro::Span;
use proc_macro2::TokenStream;

pub fn parse_meta<T: FromMeta>(args: impl Into<TokenStream>) -> manyhow::Result<T> {
    let args: TokenStream = args.into();
    let args_list = NestedMeta::parse_meta_list(args)?;
    Ok(T::from_list(&args_list)?)
}

pub fn error(data: impl Display) -> manyhow::Error {
    manyhow::Error::from(manyhow::ErrorMessage::new(Span::call_site(), data))
}

pub fn as_valid(value: String) -> manyhow::Result<String> {
    let re = regex::Regex::new(r"^[a-zA-Z0-9.\-_]*$").or_else(|e| Err(manyhow::ErrorMessage::new(Span::call_site(), e)))?;
    if re.is_match(&value) {
        Ok(value)
    } else {
        Err(crate::error("Only alphanumeric characters and ._- are allowed."))
    }
}