architect_api/symbology/
venue.rs

1//! Venues represent where products can be traded or custodied, e.g. an exchange, an ATS,
2//! custodian, blockchain, or DeFi app.
3
4use super::Symbolic;
5use crate::{uuid_val, Str};
6use anyhow::Result;
7#[cfg(feature = "netidx")]
8use derive::FromValue;
9#[cfg(feature = "netidx")]
10use netidx_derive::Pack;
11use schemars::JsonSchema;
12use serde::{Deserialize, Serialize};
13use uuid::{uuid, Uuid};
14
15static VENUE_NS: Uuid = uuid!("dd85a6c5-b45f-46d1-bf50-793dacb1e51a");
16uuid_val!(VenueId, VENUE_NS);
17
18#[derive(Debug, Clone, Copy, Serialize, Deserialize, JsonSchema)]
19#[cfg_attr(feature = "juniper", derive(juniper::GraphQLObject))]
20#[cfg_attr(feature = "netidx", derive(Pack, FromValue))]
21pub struct Venue {
22    pub id: VenueId,
23    pub name: Str,
24    // CR alee: maybe VenueInfo
25}
26
27impl Venue {
28    pub fn new(name: &str) -> Result<Self> {
29        Ok(Venue { id: VenueId::from(name), name: Str::try_from(name)? })
30    }
31}
32
33impl Symbolic for Venue {
34    type Id = VenueId;
35
36    fn type_name() -> &'static str {
37        "venue"
38    }
39
40    fn id(&self) -> Self::Id {
41        self.id
42    }
43
44    fn name(&self) -> Str {
45        self.name
46    }
47}