assemblist 1.3.0

Define your builder patterns as you use them.
Documentation
use super::trunk::Trunk;
use proc_macro2::TokenStream;
use quote::ToTokens;
use syn::parse::{Parse, ParseStream};
use syn::Result;

pub struct Tree {
    pub roots: Vec<Trunk>,
}

impl Parse for Tree {
    fn parse(input: ParseStream) -> Result<Self> {
        let mut roots = Vec::new();
        while !input.is_empty() {
            let trunk: Trunk = input.parse()?;
            roots.push(trunk);
        }
        Ok(Tree { roots })
    }
}

impl ToTokens for Tree {
    fn to_tokens(&self, tokens: &mut TokenStream) {
        for trunk in &self.roots {
            trunk.to_tokens(tokens);
        }
    }
}
#[cfg(test)]
mod tests {
    use super::Tree;
    use quote::quote;

    #[test]
    fn parse_tree() {
        let tokens = quote!(
            fn first().second() { }
            fn third().fourth() { }
        );

        asserts::tokens_are_matching!(
            Tree,
            tokens,
            "fn first () . second () { } fn third () . fourth () { }"
        );
    }
}