reactive_graph_client/client/instances/relations/args/
id.rs

1use crate::client::error::CommandError;
2use crate::client::error::CommandError::NotFound;
3use crate::client::types::relations::args::type_id::RelationTypeIdArgs;
4use clap::Args;
5use reactive_graph_graph::RelationInstanceId;
6use reactive_graph_graph::RelationInstanceTypeId;
7use std::fmt::Debug;
8use std::fmt::Display;
9use std::fmt::Formatter;
10use uuid::Uuid;
11
12/// CLI argument which identifies an relation instance by its id.
13#[derive(Args, Debug, Clone)]
14pub(crate) struct RelationInstanceIdArgs {
15    /// The id of the outbound entity instance.
16    #[clap(long)]
17    pub outbound_id: Uuid,
18
19    /// The relation type.
20    #[clap(flatten)]
21    pub ty: RelationTypeIdArgs,
22
23    /// The instance id.
24    pub instance_id: String,
25
26    /// The id of the inbound entity instance.
27    #[clap(short, long)]
28    pub inbound_id: Uuid,
29}
30
31impl RelationInstanceIdArgs {
32    pub fn not_found(&self) -> CommandError {
33        let id: RelationInstanceId = self.into();
34        NotFound(format!("The relation instance {} was not found", &id))
35    }
36}
37
38impl From<&RelationInstanceIdArgs> for RelationInstanceId {
39    fn from(id: &RelationInstanceIdArgs) -> Self {
40        let ty = RelationInstanceTypeId::new_unique_for_instance_id(id.ty.clone(), id.instance_id.clone());
41        Self {
42            outbound_id: id.outbound_id,
43            ty,
44            inbound_id: id.inbound_id,
45        }
46    }
47}
48
49impl Display for RelationInstanceIdArgs {
50    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
51        let id = RelationInstanceId::from(self);
52        std::fmt::Display::fmt(&id, f)
53    }
54}