Skip to main content

dada_ir_ast/ast/
member.rs

1use 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}