enigma_node_types/
node.rs

1use serde::{Deserialize, Serialize};
2
3use crate::error::{EnigmaNodeTypesError, Result};
4
5#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
6#[serde(deny_unknown_fields)]
7pub struct NodeInfo {
8    pub base_url: String,
9}
10
11impl NodeInfo {
12    pub fn validate(&self) -> Result<()> {
13        let trimmed = self.base_url.trim();
14        if trimmed.is_empty() || trimmed.len() > 256 {
15            return Err(EnigmaNodeTypesError::InvalidField("base_url"));
16        }
17        if !(trimmed.starts_with("http://") || trimmed.starts_with("https://")) {
18            return Err(EnigmaNodeTypesError::InvalidField("base_url"));
19        }
20        Ok(())
21    }
22}
23
24#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
25#[serde(deny_unknown_fields)]
26pub struct NodesPayload {
27    pub nodes: Vec<NodeInfo>,
28}
29
30impl NodesPayload {
31    pub fn validate(&self) -> Result<()> {
32        for node in &self.nodes {
33            node.validate()?;
34        }
35        Ok(())
36    }
37}