use super::{Attribute, Block, EnumVariant, EnumsKind, Expr, Function, GenericParam, Identifier, NamePath, Param, Span, Statement, StructureKind, Type, VariantCase};
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum Item {
Namespace(Namespace),
Class(Class),
Structure(Class),
Singleton(Singleton),
Flags(Flags),
Enums(Enums),
Trait(Trait),
Widget(Widget),
Using(Using),
Micro(MicroDefinition),
TypeFunction(TypeFunction),
Statement(Statement),
Variant(Variant),
Effect(Effect),
Property(Property),
TemplateText {
content: String,
#[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
span: Span,
},
TemplateControl {
items: Vec<Item>,
#[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
span: Span,
},
TemplateInterpolation {
expr: Expr,
#[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
span: Span,
},
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Namespace {
pub name: NamePath,
pub annotations: Vec<Attribute>,
pub items: Vec<Item>,
#[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
pub span: Span,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Parent {
pub alias: Option<Identifier>,
pub name: NamePath,
#[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
pub span: Span,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Class {
pub kind: StructureKind,
pub name: Identifier,
pub generics: Vec<GenericParam>,
pub parents: Vec<Parent>,
pub items: Vec<Item>,
pub annotations: Vec<Attribute>,
#[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
pub span: Span,
pub is_abstract: bool,
pub is_sealed: bool,
pub is_final: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Flags {
pub name: Identifier,
pub variants: Vec<EnumVariant>,
pub annotations: Vec<Attribute>,
#[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
pub span: Span,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Enums {
pub kind: EnumsKind,
pub name: Identifier,
pub generics: Vec<GenericParam>,
pub variants: Vec<EnumVariant>,
pub annotations: Vec<Attribute>,
#[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
pub span: Span,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Trait {
pub name: Identifier,
pub generics: Vec<GenericParam>,
pub methods: Vec<Function>,
pub associated_types: Vec<AssociatedType>,
pub annotations: Vec<Attribute>,
#[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
pub span: Span,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct AssociatedType {
pub name: Identifier,
pub bounds: Vec<Type>,
pub default: Option<Type>,
pub annotations: Vec<Attribute>,
#[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
pub span: Span,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Widget {
pub name: Identifier,
pub generics: Vec<GenericParam>,
pub items: Vec<Item>,
pub annotations: Vec<Attribute>,
#[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
pub span: Span,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Singleton {
pub name: Identifier,
pub generics: Vec<GenericParam>,
pub parents: Vec<Parent>,
pub items: Vec<Item>,
pub annotations: Vec<Attribute>,
#[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
pub span: Span,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Using {
pub path: NamePath,
pub alias: Option<Identifier>,
pub imports: Vec<Identifier>,
#[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
pub span: Span,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct MicroDefinition {
pub name: Identifier,
pub generics: Vec<GenericParam>,
pub params: Vec<Param>,
pub return_type: Option<Type>,
pub body: Block,
pub annotations: Vec<Attribute>,
#[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
pub span: Span,
pub is_abstract: bool,
pub is_final: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct TypeFunction {
pub name: Identifier,
pub generics: Vec<GenericParam>,
pub params: Vec<Param>,
pub return_type: Option<Type>,
pub body: Block,
pub annotations: Vec<Attribute>,
#[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
pub span: Span,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Variant {
pub name: Identifier,
pub generics: Vec<GenericParam>,
pub cases: Vec<VariantCase>,
pub annotations: Vec<Attribute>,
#[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
pub span: Span,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Effect {
pub name: Identifier,
pub operations: Vec<Function>,
pub annotations: Vec<Attribute>,
#[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
pub span: Span,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum PropertyKind {
Getter,
Setter,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Property {
pub name: Identifier,
pub kind: PropertyKind,
pub generics: Vec<GenericParam>,
pub annotations: Vec<Attribute>,
pub params: Vec<Param>,
pub return_type: Option<Type>,
pub body: Block,
#[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
pub span: Span,
pub is_abstract: bool,
pub is_final: bool,
pub is_static: bool,
pub is_virtual: bool,
pub is_override: bool,
pub is_lazy: bool,
}