1use serde::Serialize;
2
3use crate::Span;
4
5use super::{ArenaVec, Expr, Name, Stmt};
6
7#[derive(Debug, Clone, Copy, Serialize)]
9pub struct Comment<'src> {
10 pub kind: CommentKind,
11 pub text: &'src str,
13 pub span: Span,
14}
15
16#[derive(Debug, Serialize, Clone, Copy, PartialEq, Eq)]
18pub enum CommentKind {
19 Line,
21 Hash,
23 Block,
25 Doc,
27}
28
29#[derive(Debug, Serialize)]
31pub struct Program<'arena, 'src> {
32 pub stmts: ArenaVec<'arena, Stmt<'arena, 'src>>,
33 pub span: Span,
34}
35
36#[derive(Debug, Serialize)]
37pub struct Arg<'arena, 'src> {
38 pub name: Option<Name<'arena, 'src>>,
39 pub value: Option<Expr<'arena, 'src>>,
41 pub unpack: bool,
42 pub by_ref: bool,
43 pub span: Span,
44}
45
46#[derive(Debug, Serialize)]
47pub struct Attribute<'arena, 'src> {
48 pub name: Name<'arena, 'src>,
49 pub args: ArenaVec<'arena, Arg<'arena, 'src>>,
50 pub span: Span,
51}