1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
mod federated_graph;

pub use self::federated_graph::*;

#[cfg(feature = "render_sdl")]
mod render_sdl;

#[cfg(feature = "render_sdl")]
pub use render_sdl::{render_api_sdl, render_federated_sdl, render_sdl};

#[cfg(feature = "from_sdl")]
mod from_sdl;

#[cfg(feature = "from_sdl")]
pub use from_sdl::{from_sdl, DomainError};

#[derive(serde::Serialize, serde::Deserialize, Clone, Debug)]
pub enum FederatedGraph {
    V1(FederatedGraphV1),
    V2(FederatedGraphV2),
    V3(FederatedGraphV3),
}

impl FederatedGraph {
    pub fn into_sdl(self) -> Result<String, std::fmt::Error> {
        render_sdl(self)
    }

    #[deprecated(note = "Use into_sdl() instead")]
    pub fn to_sdl(&self) -> Result<String, std::fmt::Error> {
        self.clone().into_sdl()
    }

    pub fn from_sdl(sdl: &str) -> Result<FederatedGraph, DomainError> {
        from_sdl(sdl)
    }

    pub fn into_latest(self) -> FederatedGraphV3 {
        match self {
            FederatedGraph::V1(v1) => FederatedGraph::V2(FederatedGraphV2::from(v1)).into_latest(),
            FederatedGraph::V2(v2) => v2.into(),
            FederatedGraph::V3(v3) => v3,
        }
    }
}