Skip to main content

cartel_sqlite/dsl/
write.rs

1use 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}