assemblist 1.3.0

Define your builder patterns as you use them.
Documentation
use assemblist::assemblist_text;

#[test]
fn verify_preludes() {
    let text = assemblist_text! {
        #[warn(dead_code)]
        pub(crate) async fn who().are().you() {}
        #[allow(dead_code)]
        pub(crate) async fn single() {}
        #[cfg(test)]
        impl Foo {
            #[error(dead_code)]
            pub(self) async fn we().cannot().talk() {}
            async fn nothing() {}
        }
    };

    asserts::equivalent!(
        text,
        "#[inline]
        #[warn(dead_code)]
        pub(crate) fn who() -> who :: Output { who :: Output {} }
        #[doc = \"Intermediary module for partial method chain [`who`](fn@who)`(…).…`\"]
        #[doc = \"\"]
        #[doc = \"Following method chains are supported:\"]
        #[doc = \"- [`who`](fn@who)`(…).`[`are`](method@who::Output::are)`(…).`[`you`](method@who::are::Output::you)`(…)`\"]
        #[warn(dead_code)]
        pub(crate) mod who {
            # ! [allow(unused_imports)]
            use super :: * ;
            #[doc = \"Intermediary type returned by partial method chain [`who`](fn@super::who)`(…).…`\"] 
            pub struct Output {}
            impl Output {
                #[inline]
                pub fn are(self,) -> are :: Output { are :: Output {} }
            }
            #[doc = \"Intermediary module for partial method chain [`who`](fn@super::who)`(…).`[`are`](method@Output::are)`(…).…`\"]
            #[doc = \"\"]
            #[doc = \"Following method chains are supported:\"]
            #[doc = \"- [`who`](fn@super::who)`(…).`[`are`](method@Output::are)`(…).`[`you`](method@are::Output::you)`(…)`\"]
            pub mod are {
                # ! [allow(unused_imports)]
                use super :: * ;
                #[doc = \"Intermediary type returned by partial method chain [`who`](fn@super::super::who)`(…).`[`are`](method@super::Output::are)`(…).…`\"] 
                pub struct Output {}
                impl Output {
                    pub async fn you(self,) {}
                }
            }
        }
        #[allow(dead_code)]
        pub(crate) async fn single() {}
        #[doc = \"Intermediary module for partial method chain [`Foo`]`::`[`we`](method@Foo::we)`(…).…`\"]
        #[doc = \"\"]
        #[doc = \"Following method chains are supported:\"]
        #[doc = \"- [`Foo`]`::`[`we`](method@Foo::we)`(…).`[`cannot`](method@we::Output::cannot)`(…).`[`talk`](method@we::cannot::Output::talk)`(…)`\"]
        #[error(dead_code)]
        pub(self) mod we {
            # ! [allow(unused_imports)]
            use super :: * ;
            #[doc = \"Intermediary type returned by partial method chain [`Foo`]`::`[`we`](method@super::Foo::we)`(…).…`\"]
            pub struct Output {}
            impl Output {
                #[inline]
                pub fn cannot(self,) -> cannot :: Output { cannot :: Output {} }
            }
            #[doc = \"Intermediary module for partial method chain [`Foo`]`::`[`we`](method@super::Foo::we)`(…).`[`cannot`](method@Output::cannot)`(…).…`\"]
            #[doc = \"\"]
            #[doc = \"Following method chains are supported:\"]
            #[doc = \"- [`Foo`]`::`[`we`](method@super::Foo::we)`(…).`[`cannot`](method@Output::cannot)`(…).`[`talk`](method@cannot::Output::talk)`(…)`\"]
            pub mod cannot {
                # ! [allow(unused_imports)]
                use super :: * ;
                #[doc = \"Intermediary type returned by partial method chain [`Foo`]`::`[`we`](method@super::super::Foo::we)`(…).`[`cannot`](method@super::Output::cannot)`(…).…`\"]
                pub struct Output {}
                impl Output {
                    pub async fn talk(self,) {}
                }
            }
        }
        #[cfg(test)]
        impl Foo {
            #[inline]
            #[error(dead_code)]
            pub(self) fn we() -> we :: Output { we :: Output {} }
            async fn nothing() {}
        }"
    )
}