dada_ir_ast/ast/
member.rs1use dada_util::{FromImpls, SalsaSerialize};
2use salsa::Update;
3use serde::Serialize;
4
5use crate::{
6 ast::AstVisibility,
7 span::{Span, Spanned},
8};
9
10use super::{AstFunction, VariableDecl};
11
12#[derive(
13 Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Update, Debug, FromImpls, Serialize,
14)]
15pub enum AstMember<'db> {
16 Field(AstFieldDecl<'db>),
17 Function(AstFunction<'db>),
18}
19
20impl<'db> Spanned<'db> for AstMember<'db> {
21 fn span(&self, db: &'db dyn crate::Db) -> Span<'db> {
22 match self {
23 AstMember::Field(field) => field.span(db),
24 AstMember::Function(function) => function.span(db),
25 }
26 }
27}
28
29#[derive(SalsaSerialize)]
30#[salsa::tracked(debug)]
31pub struct AstFieldDecl<'db> {
32 pub span: Span<'db>,
33 pub visibility: Option<AstVisibility<'db>>,
34 pub variable: VariableDecl<'db>,
35}
36
37impl<'db> Spanned<'db> for AstFieldDecl<'db> {
38 fn span(&self, db: &'db dyn crate::Db) -> Span<'db> {
39 AstFieldDecl::span(*self, db)
40 }
41}