sark-gen 0.28.4

Sark proc-macro generators
Documentation
use syn::parse;

use crate::runtime::paths::Paths;

pub(crate) struct Body {
    driver: syn::Lifetime,
    body: syn::ExprAsync,
}

impl parse::Parse for Body {
    fn parse(input: parse::ParseStream<'_>) -> syn::Result<Self> {
        let driver = input.parse()?;
        input.parse::<syn::Token![=>]>()?;
        let body = input.parse()?;
        Ok(Self { driver, body })
    }
}

impl Body {
    pub(crate) fn expand(self, paths: &Paths) -> proc_macro2::TokenStream {
        let ns_fiber = &paths.fiber;
        let Self { driver, body } = self;
        quote::quote! {
            #ns_fiber::dope_gen::fiber!(#driver, crate = #ns_fiber => #body)
        }
    }
}