use proc_macro2::TokenStream as TokenStream2;
pub trait GenerateCode {
fn generate_code(&self) -> TokenStream2;
}
pub trait GenerateCodeUsing: AsRef<ir::Contract> {
fn generate_code_using<'a, G>(&'a self) -> TokenStream2
where
G: GenerateCode + From<&'a ir::Contract>;
}
impl<T> GenerateCodeUsing for T
where
T: AsRef<ir::Contract>,
{
fn generate_code_using<'a, G>(&'a self) -> TokenStream2
where
G: GenerateCode + From<&'a ir::Contract>,
{
<G as GenerateCode>::generate_code(&G::from(
<Self as AsRef<ir::Contract>>::as_ref(self),
))
}
}