atruct 0.3.2

macros for anonymous structs in Rust
Documentation
use syn::{parse::Parse, Attribute, parenthesized, FnArg, braced};
use super::{ReturnFields, ReturnField, TargetFn, WithReturn};


impl Parse for WithReturn {
    fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> {
        Ok(Self(input.parse()?))
    }
}


impl Parse for ReturnFields {
    fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> {
        Ok(Self(input.parse_terminated(ReturnField::parse)?))
    }
}
impl Parse for ReturnField {
    fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> {
        Ok(Self {
            name:   input.parse()?,
            _colon: input.parse()?,
            typexp: input.parse()?
        })
    }
}

impl Parse for TargetFn {
    fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> {
        let (args_buf, body_buf);
        Ok(Self {
            attrs:    input.call(Attribute::parse_inner)?,
            vis:      input.parse()?,
            _async:   input.parse()?,
            _unsafe:  input.parse()?,
            _fn:      input.parse()?,
            name:     input.parse()?,
            generics: input.parse()?,
            _paren:   parenthesized!(args_buf in input),
            args:     args_buf.parse_terminated(FnArg::parse)?,
            _brace:   braced!(body_buf in input),
            body:     body_buf.parse()?,
        })
    }
}