Skip to main content

zombienet_orchestrator/network/
jamchain.rs

1use std::{
2    path::{Path, PathBuf},
3    sync::Arc,
4};
5
6use serde::{Deserialize, Serialize};
7
8use super::node::JamNetworkNode;
9use crate::utils::default_as_empty_vec;
10
11/// The JAM chain of a network, and the nodes running it.
12#[derive(Debug, Serialize, Deserialize)]
13pub struct Jamchain {
14    pub(crate) id: String,
15    pub(crate) chain_spec_path: PathBuf,
16    #[serde(default, deserialize_with = "default_as_empty_vec")]
17    pub(crate) nodes: Vec<Arc<JamNetworkNode>>,
18}
19
20#[derive(Debug, Deserialize)]
21pub(crate) struct RawJamchain {
22    #[serde(flatten)]
23    pub(crate) inner: Jamchain,
24    pub(crate) nodes: serde_json::Value,
25}
26
27impl Jamchain {
28    pub(crate) fn new(id: impl Into<String>, chain_spec_path: PathBuf) -> Self {
29        Self {
30            id: id.into(),
31            chain_spec_path,
32            nodes: Default::default(),
33        }
34    }
35
36    // Public API
37
38    pub fn nodes(&self) -> Vec<&JamNetworkNode> {
39        self.nodes.iter().map(|n| n.as_ref()).collect()
40    }
41
42    /// Get chain id
43    pub fn id(&self) -> &str {
44        &self.id
45    }
46
47    pub fn chain_spec_path(&self) -> &Path {
48        self.chain_spec_path.as_path()
49    }
50}