cartel_sqlite/dsl/
write.rs1use crate::dsl::scope::never::Never;
2
3pub struct Insert<T>(Never<T>);
4pub struct Update<T>(Never<T>);
5pub struct Delete<T>(Never<T>);
6pub struct Conflict<T>(Never<T>);
7
8impl<T> Insert<T> {
9 pub fn return_one(self) -> T {
10 self.0.infer(())
11 }
12
13 pub fn return_first(self) -> Option<T> {
14 self.0.infer(())
15 }
16
17 pub fn return_all(self) -> Vec<T> {
18 self.0.infer(())
19 }
20
21 pub fn ignore(self) -> Self {
22 self.0.infer(())
23 }
24
25 pub fn on_conflict<F, U>(self, key: F) -> Conflict<T>
26 where
27 F: FnOnce(T) -> U,
28 {
29 self.0.infer(key)
30 }
31}
32
33impl<T> Conflict<T> {
34 pub fn ignore(self) -> Insert<T> {
35 self.0.infer(())
36 }
37
38 pub fn update<F>(self, change: F) -> Insert<T>
39 where
40 F: FnOnce(&mut T),
41 {
42 self.0.infer(change)
43 }
44}
45
46impl<T> Update<T> {
47 pub fn return_one(self) -> T {
48 self.0.infer(())
49 }
50}
51
52impl<T> Delete<T> {
53 pub fn return_first(self) -> Option<T> {
54 self.0.infer(())
55 }
56
57 pub fn return_all(self) -> Vec<T> {
58 self.0.infer(())
59 }
60}