1#![doc = include_str!("readme.md")]
2use core::range::Range;
3
4#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6#[derive(Clone, Debug, PartialEq, Eq, Hash)]
7pub struct Identifier {
8 pub name: String,
10 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
12 pub span: Range<usize>,
13}
14
15#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
17#[derive(Clone, Debug, PartialEq, Eq, Hash)]
18pub struct HlslRoot {
19 pub declarations: Vec<Declaration>,
21}
22
23#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
25#[derive(Clone, Debug, PartialEq, Eq, Hash)]
26pub enum Declaration {
27 Function(Function),
29 Variable(Variable),
31 Struct(Struct),
33}
34
35#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
37#[derive(Clone, Debug, PartialEq, Eq, Hash)]
38pub struct Function {
39 pub name: Identifier,
41 pub return_type: String,
43 pub parameters: Vec<Parameter>,
45 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
47 pub span: Range<usize>,
48}
49
50#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
52#[derive(Clone, Debug, PartialEq, Eq, Hash)]
53pub struct Parameter {
54 pub name: Identifier,
56 pub type_name: String,
58 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
60 pub span: Range<usize>,
61}
62
63#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
65#[derive(Clone, Debug, PartialEq, Eq, Hash)]
66pub struct Variable {
67 pub name: Identifier,
69 pub type_name: String,
71 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
73 pub span: Range<usize>,
74}
75
76#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
78#[derive(Clone, Debug, PartialEq, Eq, Hash)]
79pub struct Struct {
80 pub name: Identifier,
82 pub members: Vec<Variable>,
84 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
86 pub span: Range<usize>,
87}