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}