zombienet_orchestrator/network/
jamchain.rs1use 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#[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 pub fn nodes(&self) -> Vec<&JamNetworkNode> {
39 self.nodes.iter().map(|n| n.as_ref()).collect()
40 }
41
42 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}