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 #[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 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}