kanidm_proto/internal/
raw.rs

1use serde::{Deserialize, Serialize};
2use utoipa::ToSchema;
3
4use crate::v1::Entry;
5
6#[derive(Debug, Serialize, Deserialize, Clone, Ord, PartialOrd, Eq, PartialEq, Hash, ToSchema)]
7#[serde(rename_all = "lowercase")]
8pub enum Filter {
9    // This is attr - value
10    #[serde(alias = "Eq")]
11    Eq(String, String),
12    #[serde(alias = "Cnt")]
13    Cnt(String, String),
14    #[serde(alias = "Pres")]
15    Pres(String),
16    #[serde(alias = "Or")]
17    #[schema(no_recursion)]
18    Or(Vec<Filter>),
19    #[serde(alias = "And")]
20    #[schema(no_recursion)]
21    And(Vec<Filter>),
22    #[serde(alias = "AndNot")]
23    #[schema(no_recursion)]
24    AndNot(Box<Filter>),
25    #[serde(rename = "self", alias = "Self")]
26    SelfUuid,
27}
28
29#[derive(Serialize, Deserialize, Debug, Clone, ToSchema)]
30#[serde(rename_all = "lowercase")]
31pub enum Modify {
32    Present(String, String),
33    Removed(String, String),
34    Purged(String),
35}
36
37#[derive(Serialize, Deserialize, Debug, Clone, ToSchema)]
38pub struct ModifyList {
39    pub mods: Vec<Modify>,
40}
41
42impl ModifyList {
43    pub fn new_list(mods: Vec<Modify>) -> Self {
44        ModifyList { mods }
45    }
46}
47
48#[derive(Debug, Serialize, Deserialize, ToSchema)]
49pub struct SearchRequest {
50    pub filter: Filter,
51}
52
53impl SearchRequest {
54    pub fn new(filter: Filter) -> Self {
55        SearchRequest { filter }
56    }
57}
58
59#[derive(Debug, Serialize, Deserialize, ToSchema)]
60pub struct SearchResponse {
61    pub entries: Vec<Entry>,
62}
63
64impl SearchResponse {
65    pub fn new(entries: Vec<Entry>) -> Self {
66        SearchResponse { entries }
67    }
68}
69
70#[derive(Debug, Serialize, Deserialize, ToSchema)]
71pub struct CreateRequest {
72    pub entries: Vec<Entry>,
73}
74
75impl CreateRequest {
76    pub fn new(entries: Vec<Entry>) -> Self {
77        CreateRequest { entries }
78    }
79}
80
81#[derive(Debug, Serialize, Deserialize, ToSchema)]
82pub struct DeleteRequest {
83    pub filter: Filter,
84}
85
86impl DeleteRequest {
87    pub fn new(filter: Filter) -> Self {
88        DeleteRequest { filter }
89    }
90}
91
92#[derive(Debug, Serialize, Deserialize, ToSchema)]
93pub struct ModifyRequest {
94    // Probably needs a modlist?
95    pub filter: Filter,
96    pub modlist: ModifyList,
97}
98
99impl ModifyRequest {
100    pub fn new(filter: Filter, modlist: ModifyList) -> Self {
101        ModifyRequest { filter, modlist }
102    }
103}
104
105#[cfg(test)]
106mod tests {
107    use super::Filter as ProtoFilter;
108    use crate::constants::ATTR_CLASS;
109
110    #[test]
111    fn test_protofilter_simple() {
112        let pf: ProtoFilter = ProtoFilter::Pres(ATTR_CLASS.to_string());
113
114        println!("{:?}", serde_json::to_string(&pf).expect("JSON failure"));
115    }
116}