use super::*;
pub struct ClassAdded<'a> {
pub backend: &'a JavaBackend,
pub type_id: &'a RpTypeId,
pub fields: &'a Vec<JavaField<'a>>,
pub class_type: &'a ClassType,
pub match_decl: &'a RpMatchDecl,
pub spec: &'a mut ClassSpec,
}
pub struct TupleAdded<'a> {
pub fields: &'a Vec<JavaField<'a>>,
pub class_type: &'a ClassType,
pub spec: &'a mut ClassSpec,
}
pub struct EnumAdded<'a> {
pub body: &'a RpEnumBody,
pub fields: &'a Vec<JavaField<'a>>,
pub class_type: &'a ClassType,
pub from_value: &'a mut Option<MethodSpec>,
pub to_value: &'a mut Option<MethodSpec>,
pub spec: &'a mut EnumSpec,
}
pub struct InterfaceAdded<'a> {
pub interface: &'a RpInterfaceBody,
pub spec: &'a mut InterfaceSpec,
}
pub struct SubTypeAdded<'a> {
pub fields: &'a Vec<JavaField<'a>>,
pub interface: &'a RpInterfaceBody,
pub sub_type: &'a RpSubType,
pub spec: &'a mut ClassSpec,
}
pub trait Listeners {
fn configure(&self, _: &mut JavaOptions) -> Result<()> {
Ok(())
}
fn class_added(&self, _: &mut ClassAdded) -> Result<()> {
Ok(())
}
fn tuple_added(&self, _: &mut TupleAdded) -> Result<()> {
Ok(())
}
fn enum_added(&self, _: &mut EnumAdded) -> Result<()> {
Ok(())
}
fn interface_added(&self, _: &mut InterfaceAdded) -> Result<()> {
Ok(())
}
fn sub_type_added(&self, _: &mut SubTypeAdded) -> Result<()> {
Ok(())
}
}
impl Listeners for Vec<Box<Listeners>> {
fn configure(&self, options: &mut JavaOptions) -> Result<()> {
for l in self {
l.configure(options)?;
}
Ok(())
}
fn class_added(&self, event: &mut ClassAdded) -> Result<()> {
for l in self {
l.class_added(event)?;
}
Ok(())
}
fn tuple_added(&self, event: &mut TupleAdded) -> Result<()> {
for l in self {
l.tuple_added(event)?;
}
Ok(())
}
fn enum_added(&self, event: &mut EnumAdded) -> Result<()> {
for l in self {
l.enum_added(event)?;
}
Ok(())
}
fn interface_added(&self, event: &mut InterfaceAdded) -> Result<()> {
for l in self {
l.interface_added(event)?;
}
Ok(())
}
fn sub_type_added(&self, event: &mut SubTypeAdded) -> Result<()> {
for l in self {
l.sub_type_added(event)?;
}
Ok(())
}
}