Skip to main content

prax_query/inputs/
scalar_update.rs

1//! Scalar field update wrappers.
2//!
3//! Each `*FieldUpdate` struct carries the atomic operators expressible
4//! against one scalar type. Phase 5 (write macros) consumes these;
5//! phase 1 only defines them so the codegen scaffolding in phase 2
6//! can refer to them.
7
8use serde::{Deserialize, Serialize};
9
10/// Update operators for a non-nullable `Int` (`i32`) column.
11#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
12#[serde(rename_all = "snake_case")]
13pub struct IntFieldUpdate {
14    /// `SET column = value`
15    pub set: Option<i64>,
16    /// `SET column = column + value`
17    pub increment: Option<i64>,
18    /// `SET column = column - value`
19    pub decrement: Option<i64>,
20    /// `SET column = column * value`
21    pub multiply: Option<i64>,
22    /// `SET column = column / value`
23    pub divide: Option<i64>,
24}
25
26impl From<i32> for IntFieldUpdate {
27    fn from(v: i32) -> Self {
28        Self {
29            set: Some(v as i64),
30            ..Default::default()
31        }
32    }
33}
34impl From<i64> for IntFieldUpdate {
35    fn from(v: i64) -> Self {
36        Self {
37            set: Some(v),
38            ..Default::default()
39        }
40    }
41}
42
43/// Update operators for a nullable `Int` column.
44#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
45#[serde(rename_all = "snake_case")]
46pub struct IntNullableFieldUpdate {
47    /// `SET column = value`
48    pub set: Option<i64>,
49    /// `SET column = column + value`
50    pub increment: Option<i64>,
51    /// `SET column = column - value`
52    pub decrement: Option<i64>,
53    /// `SET column = column * value`
54    pub multiply: Option<i64>,
55    /// `SET column = column / value`
56    pub divide: Option<i64>,
57    /// `SET column = NULL`
58    pub unset: Option<bool>,
59}
60
61/// Update operators for a non-nullable `BigInt` (`i64`) column.
62#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
63#[serde(rename_all = "snake_case")]
64pub struct BigIntFieldUpdate {
65    /// `SET column = value`
66    pub set: Option<i64>,
67    /// `SET column = column + value`
68    pub increment: Option<i64>,
69    /// `SET column = column - value`
70    pub decrement: Option<i64>,
71    /// `SET column = column * value`
72    pub multiply: Option<i64>,
73    /// `SET column = column / value`
74    pub divide: Option<i64>,
75}
76
77impl From<i64> for BigIntFieldUpdate {
78    fn from(v: i64) -> Self {
79        Self {
80            set: Some(v),
81            ..Default::default()
82        }
83    }
84}
85
86/// Update operators for a nullable `BigInt` column.
87#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
88#[serde(rename_all = "snake_case")]
89pub struct BigIntNullableFieldUpdate {
90    /// `SET column = value`
91    pub set: Option<i64>,
92    /// `SET column = column + value`
93    pub increment: Option<i64>,
94    /// `SET column = column - value`
95    pub decrement: Option<i64>,
96    /// `SET column = column * value`
97    pub multiply: Option<i64>,
98    /// `SET column = column / value`
99    pub divide: Option<i64>,
100    /// `SET column = NULL`
101    pub unset: Option<bool>,
102}
103
104/// Update operators for a non-nullable `Float` column.
105#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
106#[serde(rename_all = "snake_case")]
107pub struct FloatFieldUpdate {
108    /// `SET column = value`
109    pub set: Option<f64>,
110    /// `SET column = column + value`
111    pub increment: Option<f64>,
112    /// `SET column = column - value`
113    pub decrement: Option<f64>,
114    /// `SET column = column * value`
115    pub multiply: Option<f64>,
116    /// `SET column = column / value`
117    pub divide: Option<f64>,
118}
119
120impl From<f64> for FloatFieldUpdate {
121    fn from(v: f64) -> Self {
122        Self {
123            set: Some(v),
124            ..Default::default()
125        }
126    }
127}
128
129/// Update operators for a nullable `Float` column.
130#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
131#[serde(rename_all = "snake_case")]
132pub struct FloatNullableFieldUpdate {
133    /// `SET column = value`
134    pub set: Option<f64>,
135    /// `SET column = column + value`
136    pub increment: Option<f64>,
137    /// `SET column = column - value`
138    pub decrement: Option<f64>,
139    /// `SET column = column * value`
140    pub multiply: Option<f64>,
141    /// `SET column = column / value`
142    pub divide: Option<f64>,
143    /// `SET column = NULL`
144    pub unset: Option<bool>,
145}
146
147/// Update operators for a non-nullable `Decimal` column (transmitted as string).
148#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
149#[serde(rename_all = "snake_case")]
150pub struct DecimalFieldUpdate {
151    /// `SET column = value`
152    pub set: Option<String>,
153    /// `SET column = column + value`
154    pub increment: Option<String>,
155    /// `SET column = column - value`
156    pub decrement: Option<String>,
157    /// `SET column = column * value`
158    pub multiply: Option<String>,
159    /// `SET column = column / value`
160    pub divide: Option<String>,
161}
162
163/// Update operators for a nullable `Decimal` column.
164#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
165#[serde(rename_all = "snake_case")]
166pub struct DecimalNullableFieldUpdate {
167    /// `SET column = value`
168    pub set: Option<String>,
169    /// `SET column = column + value`
170    pub increment: Option<String>,
171    /// `SET column = column - value`
172    pub decrement: Option<String>,
173    /// `SET column = column * value`
174    pub multiply: Option<String>,
175    /// `SET column = column / value`
176    pub divide: Option<String>,
177    /// `SET column = NULL`
178    pub unset: Option<bool>,
179}
180
181/// Update operators for a non-nullable `String` column.
182#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
183#[serde(rename_all = "snake_case")]
184pub struct StringFieldUpdate {
185    /// `SET column = value`
186    pub set: Option<String>,
187}
188
189impl From<&str> for StringFieldUpdate {
190    fn from(v: &str) -> Self {
191        Self {
192            set: Some(v.into()),
193        }
194    }
195}
196impl From<String> for StringFieldUpdate {
197    fn from(v: String) -> Self {
198        Self { set: Some(v) }
199    }
200}
201
202/// Update operators for a nullable `String` column.
203#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
204#[serde(rename_all = "snake_case")]
205pub struct StringNullableFieldUpdate {
206    /// `SET column = value`
207    pub set: Option<String>,
208    /// `SET column = NULL`
209    pub unset: Option<bool>,
210}
211
212impl From<&str> for StringNullableFieldUpdate {
213    fn from(v: &str) -> Self {
214        Self {
215            set: Some(v.into()),
216            unset: None,
217        }
218    }
219}
220impl From<String> for StringNullableFieldUpdate {
221    fn from(v: String) -> Self {
222        Self {
223            set: Some(v),
224            unset: None,
225        }
226    }
227}
228
229/// Update operators for a non-nullable `Boolean` column.
230#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
231#[serde(rename_all = "snake_case")]
232pub struct BoolFieldUpdate {
233    /// `SET column = value`
234    pub set: Option<bool>,
235}
236
237impl From<bool> for BoolFieldUpdate {
238    fn from(v: bool) -> Self {
239        Self { set: Some(v) }
240    }
241}
242
243/// Update operators for a nullable `Boolean` column.
244#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
245#[serde(rename_all = "snake_case")]
246pub struct BoolNullableFieldUpdate {
247    /// `SET column = value`
248    pub set: Option<bool>,
249    /// `SET column = NULL`
250    pub unset: Option<bool>,
251}
252
253/// Update operators for an enum-typed column.
254#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
255#[serde(
256    rename_all = "snake_case",
257    bound = "E: Serialize + for<'de2> Deserialize<'de2>"
258)]
259pub struct EnumFieldUpdate<E> {
260    /// `SET column = value`
261    pub set: Option<E>,
262}
263
264/// Update operators for a nullable enum-typed column.
265#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
266#[serde(
267    rename_all = "snake_case",
268    bound = "E: Serialize + for<'de2> Deserialize<'de2>"
269)]
270pub struct EnumNullableFieldUpdate<E> {
271    /// `SET column = value`
272    pub set: Option<E>,
273    /// `SET column = NULL`
274    pub unset: Option<bool>,
275}
276
277/// Update operators for a non-nullable `DateTime` column.
278#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
279#[serde(rename_all = "snake_case")]
280pub struct DateTimeFieldUpdate {
281    /// `SET column = value` (RFC3339-encoded).
282    pub set: Option<String>,
283}
284
285/// Update operators for a nullable `DateTime` column.
286#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
287#[serde(rename_all = "snake_case")]
288pub struct DateTimeNullableFieldUpdate {
289    /// `SET column = value` (RFC3339-encoded).
290    pub set: Option<String>,
291    /// `SET column = NULL`
292    pub unset: Option<bool>,
293}
294
295/// Update operators for a non-nullable `Bytes` column (base64-encoded).
296#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
297#[serde(rename_all = "snake_case")]
298pub struct BytesFieldUpdate {
299    /// `SET column = value`
300    pub set: Option<String>,
301}
302
303/// Update operators for a nullable `Bytes` column.
304#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
305#[serde(rename_all = "snake_case")]
306pub struct BytesNullableFieldUpdate {
307    /// `SET column = value`
308    pub set: Option<String>,
309    /// `SET column = NULL`
310    pub unset: Option<bool>,
311}
312
313/// Update operators for a non-nullable `Uuid` column.
314#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
315#[serde(rename_all = "snake_case")]
316pub struct UuidFieldUpdate {
317    /// `SET column = value`
318    pub set: Option<String>,
319}
320
321/// Update operators for a nullable `Uuid` column.
322#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
323#[serde(rename_all = "snake_case")]
324pub struct UuidNullableFieldUpdate {
325    /// `SET column = value`
326    pub set: Option<String>,
327    /// `SET column = NULL`
328    pub unset: Option<bool>,
329}
330
331/// Update operators for a non-nullable `Json` column.
332#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
333#[serde(rename_all = "snake_case")]
334pub struct JsonFieldUpdate {
335    /// `SET column = value`
336    pub set: Option<serde_json::Value>,
337}
338
339/// Update operators for a nullable `Json` column.
340#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
341#[serde(rename_all = "snake_case")]
342pub struct JsonNullableFieldUpdate {
343    /// `SET column = value`
344    pub set: Option<serde_json::Value>,
345    /// `SET column = NULL`
346    pub unset: Option<bool>,
347}