kanidm_cli/schema/
attr.rs
1use crate::{handle_client_error, OpType, SchemaAttrOpt};
2use kanidm_proto::scim_v1::{ScimEntryGetQuery, ScimFilter};
3use std::str::FromStr;
4
5impl SchemaAttrOpt {
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 attrs = match client.scim_schema_attribute_list(None).await {
18 Ok(attrs) => attrs,
19 Err(e) => {
20 handle_client_error(e, copt.output_mode);
21 return;
22 }
23 };
24
25 for attr in attrs.resources {
26 println!("---");
27 println!("uuid: {}", attr.header.id);
28 println!("attribute_name: {}", attr.attributename);
29 println!("description: {}", attr.description);
30 println!("multivalue: {}", attr.multivalue);
31 println!("unique: {}", attr.unique);
32 println!("syntax: {}", attr.syntax);
33 }
34 }
35 Self::Search { copt, query } => {
36 let query = match ScimFilter::from_str(query) {
37 Ok(query) => query,
38 Err(err) => {
39 error!("Invalid search query");
40 error!(?err);
41 return;
42 }
43 };
44
45 let get_query = ScimEntryGetQuery {
46 filter: Some(query),
47 ..Default::default()
48 };
49
50 let client = copt.to_client(OpType::Read).await;
51
52 let attrs = match client.scim_schema_attribute_list(Some(get_query)).await {
53 Ok(attrs) => attrs,
54 Err(e) => {
55 handle_client_error(e, copt.output_mode);
56 return;
57 }
58 };
59
60 for attr in attrs.resources {
61 println!("---");
62 println!("uuid: {}", attr.header.id);
63 println!("attribute_name: {}", attr.attributename);
64 println!("description: {}", attr.description);
65 println!("multivalue: {}", attr.multivalue);
66 println!("unique: {}", attr.unique);
67 println!("syntax: {}", attr.syntax);
68 }
69 }
70 }
71 }
72}