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