kanidm_cli/schema/
class.rs1use crate::{handle_client_error, KanidmClientParser, OpType, SchemaClassOpt};
2use kanidm_proto::scim_v1::{ScimEntryGetQuery, ScimFilter};
3use std::str::FromStr;
4
5impl SchemaClassOpt {
6 pub async fn exec(&self, opt: KanidmClientParser) {
7 match self {
8 Self::List => {
9 let client = opt.to_client(OpType::Read).await;
10
11 let classes = match client.scim_schema_class_list(None).await {
12 Ok(classes) => classes,
13 Err(e) => {
14 handle_client_error(e, opt.output_mode);
15 return;
16 }
17 };
18
19 for class in classes.resources {
20 println!("{class:?}");
21 }
22 }
23 Self::Search { query } => {
24 let query = match ScimFilter::from_str(query) {
25 Ok(query) => query,
26 Err(err) => {
27 error!("Invalid search query");
28 error!(?err);
29 return;
30 }
31 };
32
33 let get_query = ScimEntryGetQuery {
34 filter: Some(query),
35 ..Default::default()
36 };
37
38 let client = opt.to_client(OpType::Read).await;
39
40 let classes = match client.scim_schema_class_list(Some(get_query)).await {
41 Ok(classes) => classes,
42 Err(e) => {
43 handle_client_error(e, opt.output_mode);
44 return;
45 }
46 };
47 for class in classes.resources {
48 println!("{class:?}");
49 }
50 }
51 }
52 }
53}