use super::*;
mod display;
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum TraitKind {
Trait,
Interface,
}
#[derive(Clone, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct TraitDeclaration {
pub kind: TraitKind,
pub name: IdentifierNode,
pub generics: Option<ParametersList>,
pub implements: Option<ExpressionKind>,
pub body: Vec<TraitTerm>,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ExtendsStatement {
pub implements: Option<ExpressionKind>,
pub body: Vec<TraitTerm>,
}
#[derive(Clone, PartialEq, Eq, Hash, From)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum TraitTerm {
Macro(ProceduralNode),
Field(FieldDeclaration),
Method(MethodDeclaration),
}