enigma_node_types/
node.rs1use 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}