use serde::Serialize;
use crate::Span;
use super::{ArenaVec, Expr, Name, Stmt};
#[derive(Debug, Serialize)]
pub struct Comment<'src> {
pub kind: CommentKind,
pub text: &'src str,
pub span: Span,
}
#[derive(Debug, Serialize, Clone, Copy, PartialEq, Eq)]
pub enum CommentKind {
Line,
Hash,
Block,
Doc,
}
#[derive(Debug, Serialize)]
pub struct Program<'arena, 'src> {
pub stmts: ArenaVec<'arena, Stmt<'arena, 'src>>,
pub span: Span,
}
#[derive(Debug, Serialize)]
pub struct Arg<'arena, 'src> {
pub name: Option<Name<'arena, 'src>>,
pub value: Expr<'arena, 'src>,
pub unpack: bool,
pub by_ref: bool,
pub span: Span,
}
#[derive(Debug, Serialize)]
pub struct Attribute<'arena, 'src> {
pub name: Name<'arena, 'src>,
pub args: ArenaVec<'arena, Arg<'arena, 'src>>,
pub span: Span,
}