use backyard_nodes::{ cast_node, Node, NodeType, NodeWrapper };
use crate::generator::{ Builder, Generator };
use super::{
block::BlockGenerator,
consts::ConstGenerator,
identifier::IdentifierGenerator,
method::MethodGenerator,
property::PropertyGenerator,
traituse::TraitUseGenerator,
};
pub struct TraitGenerator;
impl TraitGenerator {
pub fn generate<'arena>(
generator: &mut Generator<'arena, '_>,
builder: &mut Builder,
node: &Node<'arena>
) {
let node = cast_node!(Trait, &node.wrapper);
builder.push("trait ");
IdentifierGenerator::generate(generator, builder, &node.name);
BlockGenerator::generate_specific(
generator,
builder,
&node.body,
None,
&[
(NodeType::TraitUse, TraitUseGenerator::generate),
(NodeType::ConstProperty, ConstGenerator::generate_property),
(NodeType::Property, PropertyGenerator::generate),
(NodeType::Method, MethodGenerator::generate),
]
);
}
}