use backend::errors::Result;
use listeners::{ClassAdded, EnumAdded, InterfaceAdded, ServiceAdded, TupleAdded};
use std::path::Path;
use std::rc::Rc;
pub trait Codegen {
fn generate(&self, out_path: &Path) -> Result<()>;
}
impl<T> Codegen for Rc<T>
where
T: Codegen,
{
fn generate(&self, out_path: &Path) -> Result<()> {
self.as_ref().generate(out_path)
}
}
pub trait ServiceCodegen {
fn generate(&self, e: ServiceAdded) -> Result<()>;
}
impl<T> ServiceCodegen for Rc<T>
where
T: ServiceCodegen,
{
fn generate(&self, e: ServiceAdded) -> Result<()> {
self.as_ref().generate(e)
}
}
pub trait ClassCodegen {
fn generate(&self, e: ClassAdded) -> Result<()>;
}
impl<T> ClassCodegen for Rc<T>
where
T: ClassCodegen,
{
fn generate(&self, e: ClassAdded) -> Result<()> {
self.as_ref().generate(e)
}
}
pub trait TupleCodegen {
fn generate(&self, e: TupleAdded) -> Result<()>;
}
impl<T> TupleCodegen for Rc<T>
where
T: TupleCodegen,
{
fn generate(&self, e: TupleAdded) -> Result<()> {
self.as_ref().generate(e)
}
}
pub trait InterfaceCodegen {
fn generate(&self, e: InterfaceAdded) -> Result<()>;
}
impl<T> InterfaceCodegen for Rc<T>
where
T: InterfaceCodegen,
{
fn generate(&self, e: InterfaceAdded) -> Result<()> {
self.as_ref().generate(e)
}
}
pub trait EnumCodegen {
fn generate(&self, e: EnumAdded) -> Result<()>;
}
impl<T> EnumCodegen for Rc<T>
where
T: EnumCodegen,
{
fn generate(&self, e: EnumAdded) -> Result<()> {
self.as_ref().generate(e)
}
}