1#![doc = include_str!("readme.md")]
2use core::range::Range;
3use std::sync::Arc;
4
5#[derive(Debug, Clone, PartialEq)]
7#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
8pub struct ZigRoot {
9 pub items: Vec<Item>,
11}
12
13#[derive(Debug, Clone, PartialEq)]
15#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
16pub enum Item {
17 Declaration(Arc<Declaration>),
19 ContainerField(Arc<ContainerField>),
21 Comptime(Arc<Block>),
23}
24
25#[derive(Debug, Clone, PartialEq)]
27#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
28pub struct Declaration {
29 pub name: String,
31 pub is_comptime: bool,
33 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
35 pub span: Range<usize>,
36}
37
38#[derive(Debug, Clone, PartialEq)]
40#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
41pub struct ContainerField {
42 pub name: String,
44 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
46 pub span: Range<usize>,
47}
48
49#[derive(Debug, Clone, PartialEq)]
51#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
52pub enum Expression {
53 Literal(String),
55 Identifier(String),
57 Comptime(Box<Expression>),
59 Block(Arc<Block>),
61 }
63
64#[derive(Debug, Clone, PartialEq)]
66#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
67pub struct Block {
68 pub statements: Vec<Statement>,
70 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
72 pub span: Range<usize>,
73}
74
75#[derive(Debug, Clone, PartialEq)]
77#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
78pub enum Statement {
79 Expression(Expression),
81 Comptime(Arc<Block>),
83 Declaration(Arc<Declaration>),
85 Block(Arc<Block>),
87}