reactive_graph/client/types/components/
mod.rs1use std::sync::Arc;
2
3use crate::client::error::CommandError;
4use crate::client::error::CommandError::NoContent;
5use crate::client::error::CommandError::NotCreated;
6use crate::client::error::CommandError::NotFound;
7use crate::client::result::CommandResult;
8use crate::client::types::components::args::ComponentsArgs;
9use crate::client::types::components::commands::ComponentsCommands;
10use crate::client::types::components::output_format::ComponentsOutputFormatWrapper;
11use crate::client::types::extension::output_format::ExtensionsOutputFormatWrapper;
12use crate::client::types::property_type::output_format::PropertyTypesOutputFormatWrapper;
13use reactive_graph_client::ReactiveGraphClient;
14use reactive_graph_graph::NamespacedTypeContainer;
15use reactive_graph_graph::TYPE_ID_TYPE_SEPARATOR;
16
17pub(crate) mod args;
18pub(crate) mod commands;
19pub(crate) mod output_format;
20
21pub(crate) async fn components(client: &Arc<ReactiveGraphClient>, component_args: ComponentsArgs) -> CommandResult {
22 let output_format_wrapper: ComponentsOutputFormatWrapper = component_args.output_format.clone().into();
23 let Some(command) = component_args.commands else {
24 return Err(CommandError::MissingSubCommand);
25 };
26 match command {
27 ComponentsCommands::List => match client.types().components().get_all_components().await {
28 Ok(Some(components)) => output_format_wrapper.collection(components),
29 Ok(None) => Err(NoContent("No components found".to_string())),
30 Err(e) => Err(e.into()),
31 },
32 ComponentsCommands::Get(args) => match client.types().components().get_component_by_type(args.clone()).await {
33 Ok(Some(component)) => output_format_wrapper.single(component),
34 Ok(None) => Err(args.not_found()),
35 Err(e) => Err(e.into()),
36 },
37 ComponentsCommands::ListProperties(args) => match client.types().components().get_component_by_type(args.clone()).await {
38 Ok(Some(component)) => {
39 let output_format_wrapper: PropertyTypesOutputFormatWrapper = component_args.output_format.into();
40 output_format_wrapper.collection(component.properties.to_vec())
41 }
42 Ok(None) => Err(args.not_found()),
43 Err(e) => Err(e.into()),
44 },
45 ComponentsCommands::ListExtensions(args) => match client.types().components().get_component_by_type(args.clone()).await {
46 Ok(Some(component)) => {
47 let output_format_wrapper: ExtensionsOutputFormatWrapper = component_args.output_format.into();
48 output_format_wrapper.collection(component.extensions.to_vec())
49 }
50 Ok(None) => Err(args.not_found()),
51 Err(e) => Err(e.into()),
52 },
53 ComponentsCommands::Create(args) => match client.types().components().create_component_with_variables((&args).into()).await {
54 Ok(Some(component)) => output_format_wrapper.single(component),
55 Ok(None) => Err(NotCreated("Component wasn't created".to_string())),
56 Err(e) => Err(e.into()),
57 },
58 ComponentsCommands::Delete(args) => match client.types().components().delete_component(args.clone()).await {
59 Ok(Some(true)) => Ok(format!("Component {}{}{} deleted", args.namespace, TYPE_ID_TYPE_SEPARATOR, args.name).into()),
60 Ok(Some(false)) => Ok(format!("Component {}{}{} not deleted", args.namespace, TYPE_ID_TYPE_SEPARATOR, args.name).into()),
61 Ok(None) => Err(args.not_found()),
62 Err(e) => Err(e.into()),
63 },
64 ComponentsCommands::AddProperty(args) => match client.types().components().add_property_with_variables((&args).into()).await {
65 Ok(Some(component)) => output_format_wrapper.single(component),
66 Ok(None) => Err(NotCreated("Property wasn't created".to_string())),
67 Err(e) => Err(e.into()),
68 },
69 ComponentsCommands::RemoveProperty(args) => match client.types().components().remove_property_with_variables((&args).into()).await {
70 Ok(Some(component)) => output_format_wrapper.single(component),
71 Ok(None) => Err(NotFound(format!("Component {}__{} not found", args.ty.namespace, args.ty.name))),
72 Err(e) => Err(e.into()),
73 },
74 ComponentsCommands::AddExtension(args) => match client.types().components().add_extension_with_variables((&args).into()).await {
75 Ok(Some(component)) => output_format_wrapper.single(component),
76 Ok(None) => Err(NotCreated("Extension wasn't created".to_string())),
77 Err(e) => Err(e.into()),
78 },
79 ComponentsCommands::RemoveExtension(args) => match client.types().components().remove_extension_with_variables((&args).into()).await {
80 Ok(Some(component)) => output_format_wrapper.single(component),
81 Ok(None) => Err(args.component_ty.not_found()),
82 Err(e) => Err(e.into()),
83 },
84 ComponentsCommands::UpdateDescription(args) => match client.types().components().update_description_with_variables((&args).into()).await {
85 Ok(Some(component)) => output_format_wrapper.single(component),
86 Ok(None) => Err(args.ty.not_found()),
87 Err(e) => Err(e.into()),
88 },
89 ComponentsCommands::JsonSchema => match client.json_schema().types().components().await {
90 Ok(Some(json_schema)) => Ok(json_schema.into()),
91 Ok(None) => Err(NotFound("JSON Schema not available".to_string())),
92 Err(e) => Err(e.into()),
93 },
94 }
95}