1use super::{Block, Expr, GenericParam, Identifier, Param, Pattern, Span, Type};
2
3#[derive(Debug, Clone, PartialEq, Eq, Hash)]
5#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6pub struct Field {
7 pub name: Identifier,
9 pub ty: Type,
11 pub default: Option<Expr>,
13 pub annotations: Vec<Attribute>,
15 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
17 pub span: Span,
18}
19
20#[derive(Debug, Clone, PartialEq, Eq, Hash)]
22#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
23pub struct Attribute {
24 pub name: Identifier,
26 pub args: Vec<Expr>,
28 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
30 pub span: Span,
31}
32
33#[derive(Debug, Clone, PartialEq, Eq, Hash)]
35#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
36pub struct StringLiteral {
37 pub prefix: Option<Identifier>,
39 pub quote_count: u8,
41 pub segments: Vec<StringSegment>,
43 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
45 pub span: Span,
46}
47
48#[derive(Debug, Clone, PartialEq, Eq, Hash)]
50#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
51pub enum StringSegment {
52 Text {
54 content: String,
56 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
58 span: Span,
59 },
60 Interpolation {
62 expr: Box<Expr>,
64 is_fluent: bool,
66 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
68 span: Span,
69 },
70}
71
72#[derive(Debug, Clone, PartialEq, Eq, Hash)]
74#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
75pub struct Function {
76 pub name: Identifier,
78 pub generics: Vec<GenericParam>,
80 pub params: Vec<Param>,
82 pub return_type: Option<Type>,
84 pub body: Option<Block>,
86 pub annotations: Vec<Attribute>,
88 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
90 pub span: Span,
91 pub is_abstract: bool,
93 pub is_final: bool,
95}
96
97#[derive(Debug, Clone, PartialEq, Eq, Hash)]
99#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
100pub struct EnumVariant {
101 pub name: Identifier,
103 pub fields: Vec<Field>,
105 pub annotations: Vec<Attribute>,
107 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
109 pub span: Span,
110 pub value: Option<Expr>,
112}
113
114#[derive(Debug, Clone, PartialEq, Eq, Hash)]
116#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
117pub struct VariantCase {
118 pub pattern: Pattern,
120 pub body: Expr,
122 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
124 pub span: Span,
125}