reactive_graph/client/types/components/
mod.rs

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