kanidm_cli/schema/
class.rs

1use 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}