kanidm_proto/internal/
raw.rs1use 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 #[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 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}