reactive_graph_client/client/instances/relations/args/
search.rs1use crate::client::instances::properties::args::parse_property;
2use crate::client::types::components::args::parse_component_ty;
3use crate::client::types::relations::args::type_id::RelationTypeIdOptions;
4use clap::Args;
5use reactive_graph_client::ComponentTypeIds;
6use reactive_graph_client::PropertyInstanceDefinitions;
7use reactive_graph_client::client::instances::relations::variables::search::variables::SearchRelationInstancesVariables;
8use reactive_graph_graph::ComponentTypeId;
9use reactive_graph_graph::PropertyInstances;
10use serde_json::Value;
11use uuid::Uuid;
12
13#[derive(Args, Debug, Clone)]
15pub(crate) struct SearchRelationInstancesArgs {
16 #[clap(long)]
18 pub outbound_id: Option<Uuid>,
19
20 #[clap(flatten)]
22 pub ty: RelationTypeIdOptions,
23
24 #[clap(short, long)]
26 pub inbound_id: Option<Uuid>,
27
28 #[clap(short, long, value_parser = parse_property)]
30 pub properties: Option<Vec<(String, Value)>>,
31
32 #[clap(short, long, value_parser = parse_component_ty)]
34 pub components: Option<Vec<ComponentTypeId>>,
35}
36
37impl SearchRelationInstancesArgs {
38 pub fn properties(&self) -> PropertyInstances {
39 match &self.properties {
40 None => PropertyInstances::new(),
41 Some(properties) => properties.iter().map(|(name, value)| (name.clone(), value.clone())).collect(),
42 }
43 }
44
45 pub fn components(&self) -> ComponentTypeIds {
46 match &self.components {
47 None => ComponentTypeIds::new(),
48 Some(components) => ComponentTypeIds(components.iter().map(|ty| ty.clone().into()).collect()),
49 }
50 }
51}
52
53impl From<&SearchRelationInstancesArgs> for SearchRelationInstancesVariables {
54 fn from(search: &SearchRelationInstancesArgs) -> Self {
55 let ty: Option<reactive_graph_graph::RelationTypeId> = search.ty.clone().into();
56 let properties: PropertyInstanceDefinitions = search.properties().into();
57 let components: ComponentTypeIds = search.components();
58 SearchRelationInstancesVariables::builder()
59 .outbound_id(search.outbound_id.map(From::from))
60 .ty(ty.map(From::from))
61 .inbound_id(search.inbound_id.map(From::from))
62 .properties(Some(properties.0))
63 .components(Some(components.0))
64 .build()
65 }
66}