reactive_graph_client/client/instances/entities/args/
create.rs

1use crate::client::instances::properties::args::parse_property;
2use crate::client::types::entities::args::type_id::EntityTypeIdArgs;
3use clap::Args;
4use reactive_graph_graph::PropertyInstances;
5use serde_json::Value;
6use uuid::Uuid;
7
8#[derive(Args, Debug, Clone)]
9pub(crate) struct CreateEntityInstanceArgs {
10    /// The entity type.
11    #[clap(flatten)]
12    pub ty: EntityTypeIdArgs,
13
14    /// The entity instance id.
15    #[clap(short, long)]
16    pub id: Option<Uuid>,
17
18    /// The entity instance description.
19    #[clap(short, long)]
20    pub description: Option<String>,
21
22    /// The entity instance properties.
23    #[clap(short, long, value_parser = parse_property)]
24    pub properties: Option<Vec<(String, Value)>>,
25    // TODO: The entity instance extensions.
26    // #[clap(short, long, value_parser = parse_extension)]
27    // pub extensions: Option<Vec<(String, Value)>>,
28}
29
30impl CreateEntityInstanceArgs {
31    pub fn properties(&self) -> PropertyInstances {
32        match &self.properties {
33            None => PropertyInstances::new(),
34            Some(properties) => properties.iter().map(|(name, value)| (name.clone(), value.clone())).collect(),
35        }
36    }
37}