use crate::Strings;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub struct Addresses {
#[serde(default)]
pub swarm: Vec<String>,
#[serde(default)]
pub announce: Vec<String>,
#[serde(default)]
pub append_announce: Vec<String>,
#[serde(default)]
pub no_announce: Vec<String>,
#[serde(default, rename = "API")]
pub api: Strings,
#[serde(default)]
pub gateway: Strings,
}
impl Addresses {
pub fn default_swarm_addresses() -> Vec<String> {
vec![
"/ip4/0.0.0.0/tcp/4001".to_string(),
"/ip6/::/tcp/4001".to_string(),
"/ip4/0.0.0.0/udp/4001/quic-v1".to_string(),
"/ip4/0.0.0.0/udp/4001/quic-v1/webtransport".to_string(),
"/ip6/::/udp/4001/quic-v1".to_string(),
"/ip6/::/udp/4001/quic-v1/webtransport".to_string(),
]
}
pub fn default_api_address() -> String {
"/ip4/127.0.0.1/tcp/5001".to_string()
}
pub fn default_gateway_address() -> String {
"/ip4/127.0.0.1/tcp/8080".to_string()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_addresses_default() {
let addrs = Addresses::default();
assert!(addrs.swarm.is_empty());
assert!(addrs.api.is_empty());
}
#[test]
fn test_default_swarm_addresses() {
let swarm = Addresses::default_swarm_addresses();
assert!(!swarm.is_empty());
assert!(swarm.iter().any(|a| a.contains("tcp/4001")));
}
}