datalogic_rs/builder/
type_builder.rs1use crate::arena::DataArena;
2use crate::logic::{Logic, OperatorType};
3use crate::value::DataValue;
4
5pub struct TypeBuilder<'a> {
10 arena: &'a DataArena,
12}
13
14impl<'a> TypeBuilder<'a> {
15 pub fn new(arena: &'a DataArena) -> Self {
17 Self { arena }
18 }
19
20 pub fn var(&self, path: &str) -> TypeOperationBuilder<'a> {
22 TypeOperationBuilder::new(self.arena).var(path)
23 }
24
25 pub fn int(&self, value: i64) -> TypeOperationBuilder<'a> {
27 TypeOperationBuilder::new(self.arena).int(value)
28 }
29
30 pub fn float(&self, value: f64) -> TypeOperationBuilder<'a> {
32 TypeOperationBuilder::new(self.arena).float(value)
33 }
34
35 pub fn string(&self, value: &str) -> TypeOperationBuilder<'a> {
37 TypeOperationBuilder::new(self.arena).string(value)
38 }
39
40 pub fn bool(&self, value: bool) -> TypeOperationBuilder<'a> {
42 TypeOperationBuilder::new(self.arena).bool(value)
43 }
44
45 pub fn null(&self) -> TypeOperationBuilder<'a> {
47 TypeOperationBuilder::new(self.arena).null()
48 }
49
50 pub fn array(&self) -> TypeOperationBuilder<'a> {
52 TypeOperationBuilder::new(self.arena).array()
53 }
54
55 pub fn object(&self) -> TypeOperationBuilder<'a> {
57 TypeOperationBuilder::new(self.arena).object()
58 }
59}
60
61pub struct TypeOperationBuilder<'a> {
63 arena: &'a DataArena,
65 arg: Option<Logic<'a>>,
67}
68
69impl<'a> TypeOperationBuilder<'a> {
70 pub fn new(arena: &'a DataArena) -> Self {
72 Self { arena, arg: None }
73 }
74
75 pub fn var(mut self, path: &str) -> Self {
77 self.arg = Some(Logic::variable(path, None, self.arena));
78 self
79 }
80
81 pub fn int(mut self, value: i64) -> Self {
83 self.arg = Some(Logic::literal(DataValue::integer(value), self.arena));
84 self
85 }
86
87 pub fn float(mut self, value: f64) -> Self {
89 self.arg = Some(Logic::literal(DataValue::float(value), self.arena));
90 self
91 }
92
93 pub fn string(mut self, value: &str) -> Self {
95 self.arg = Some(Logic::literal(
96 DataValue::string(self.arena, value),
97 self.arena,
98 ));
99 self
100 }
101
102 pub fn bool(mut self, value: bool) -> Self {
104 self.arg = Some(Logic::literal(DataValue::bool(value), self.arena));
105 self
106 }
107
108 pub fn null(mut self) -> Self {
110 self.arg = Some(Logic::literal(DataValue::null(), self.arena));
111 self
112 }
113
114 pub fn array(mut self) -> Self {
116 let empty_array = DataValue::Array(self.arena.vec_into_slice(Vec::new()));
117 self.arg = Some(Logic::literal(empty_array, self.arena));
118 self
119 }
120
121 pub fn object(mut self) -> Self {
123 let empty_object = DataValue::Object(self.arena.vec_into_slice(Vec::new()));
124 self.arg = Some(Logic::literal(empty_object, self.arena));
125 self
126 }
127
128 pub fn logic(mut self, logic: Logic<'a>) -> Self {
130 self.arg = Some(logic);
131 self
132 }
133
134 pub fn build(self) -> Logic<'a> {
136 let arg = self.arg.expect("Type operator requires an argument");
137 Logic::operator(OperatorType::Type, vec![arg], self.arena)
138 }
139}