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