1#![warn(missing_docs)]
4#![deny(unsafe_code)]
5
6#[cfg(feature = "parser")]
7mod parser;
8#[cfg(feature = "parser")]
9pub use parser::*;
10
11#[doc(no_inline)]
12pub use ayaka_primitive::{RawValue, ValueType};
13
14use serde::{Deserialize, Serialize};
15
16#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
20pub struct Program(pub Vec<Expr>);
21
22#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
26pub enum Expr {
27 Ref(Ref),
29 Const(RawValue),
31 Unary(UnaryOp, Box<Expr>),
33 Binary(Box<Expr>, BinaryOp, Box<Expr>),
35 Call(String, String, Vec<Expr>),
37}
38
39#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
41pub enum UnaryOp {
42 Positive,
44 Negative,
46 Not,
48}
49
50#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
52pub enum BinaryOp {
53 Val(ValBinaryOp),
55 Logic(LogicBinaryOp),
57 Assign,
59 Inplace(ValBinaryOp),
61}
62
63#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
65pub enum ValBinaryOp {
66 Add,
68 Minus,
70 Mul,
72 Div,
74 Mod,
76 And,
78 Or,
80 Xor,
82}
83
84#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
86pub enum LogicBinaryOp {
87 And,
89 Or,
91 Eq,
93 Neq,
95 Lt,
97 Le,
99 Gt,
101 Ge,
103}
104
105#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
107pub enum Ref {
108 Var(String),
111 Ctx(String),
115}