use serde::Serialize; use super::*; #[derive(Debug, Clone, Serialize)] pub enum Visibility { Public, PublicTarget(Path), Private, } #[derive(Debug, Clone, Serialize)] pub enum Attribute { /// #[test] Path(Path), /// #[name = "value"] NameValue { path: Path, value: Literal }, /// #[derive(Clone, Copy)] List { path: Path, items: Vec }, } #[derive(Debug, Clone, Serialize)] pub struct TopLevel(pub Spanned, pub Vec); #[derive(Debug, Clone, Serialize)] pub enum TopLevelKind { ModAttribute, Import(Visibility, Path), IncludeGlobal(Path), IncludeUse(Visibility, Path), IncludeLocal(String), DeclareModule(Visibility, Identifier), ImplDecl(ImplDecl), StaticDecl(VarDeclStmt), ConstDecl(VarDeclStmt), TypeAlias { name: Identifier, generics: Option, ty: TypeExpr, }, TraitDecl { visibility: Visibility, name: Identifier, generics: GenericsDecl, requirements: Vec, items: Vec>, }, EnumDecl { visibility: Visibility, name: Identifier, generics: GenericsDecl, fields: Vec>, }, StructDecl { visibility: Visibility, name: Identifier, generics: GenericsDecl, fields: Vec>, }, StructDeclTupleUnit { visibility: Visibility, name: Identifier, generics: GenericsDecl, unit: Option>>, }, FunctionDecl(FunctionDecl), ClassDecl { visibility: Visibility, name: Identifier, generics: GenericsDecl, inherits: Option, fields: Vec>, constructor: Option>, items: Vec, }, } #[derive(Debug, Clone, Serialize)] pub enum ClassItem { Method(Spanned), ImplDecl(Spanned), } #[derive(Debug, Clone, Serialize, Default)] pub struct GenericsDecl(pub Vec); #[derive(Debug, Clone, Serialize)] pub enum GenericDecl { Lifetime(Identifier, Vec), Type(Identifier, Vec), } #[derive(Debug, Clone, Serialize)] pub enum EnumItem { Named(Identifier), Tuple(Identifier, Vec), Struct(Identifier, Vec), } #[derive(Debug, Clone, Serialize)] pub struct ClassConstructor { pub visibility: Visibility, pub generics: GenericsDecl, pub params: ParamList, pub body: Block, } #[derive(Debug, Clone, Serialize, PartialEq, Eq, Hash)] pub struct Override(pub Option); #[derive(Debug, Clone, Serialize)] pub struct FunctionDecl { pub visibility: Visibility, pub is_virtual: bool, pub return_type: Option, pub name: Identifier, pub generics: GenericsDecl, pub self_param: Option<(bool, Option, bool)>, pub params: ParamList, pub is_override: Option, pub body: Option, } #[derive(Debug, Clone, Serialize)] pub struct ImplDecl { pub generics: GenericsDecl, pub target: TypeExpr, pub trait_: Option, pub methods: Vec>, } #[derive(Debug, Clone, Serialize)] pub struct FieldDecl { pub visibility: Visibility, pub type_: TypeExpr, pub name: Identifier, } #[derive(Debug, Clone, Serialize)] pub struct FieldDeclStmt { pub decl: FieldDecl, pub init: Option, }