use super::{Block, Expr, GenericParam, Identifier, Param, Pattern, Span, Type};
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Field {
pub name: Identifier,
pub ty: Type,
pub default: Option<Expr>,
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 Attribute {
pub name: Identifier,
pub args: Vec<Expr>,
#[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 StringLiteral {
pub prefix: Option<Identifier>,
pub quote_count: u8,
pub segments: Vec<StringSegment>,
#[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 enum StringSegment {
Text {
content: String,
#[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
span: Span,
},
Interpolation {
expr: Box<Expr>,
is_fluent: bool,
#[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 Function {
pub name: Identifier,
pub generics: Vec<GenericParam>,
pub params: Vec<Param>,
pub return_type: Option<Type>,
pub body: Option<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 EnumVariant {
pub name: Identifier,
pub fields: Vec<Field>,
pub annotations: Vec<Attribute>,
#[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
pub span: Span,
pub value: Option<Expr>,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct VariantCase {
pub pattern: Pattern,
pub body: Expr,
#[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
pub span: Span,
}