1use std::{error::Error, path::Path};
2
3use libp2p::Multiaddr;
4use serde::Deserialize;
5
6#[derive(Clone, Deserialize)]
7#[serde(rename_all = "PascalCase")]
8pub(crate) struct Config {
9 pub(crate) identity: Identity,
10 pub(crate) addresses: Addresses,
11}
12
13impl Config {
14 pub(crate) fn from_file(path: &Path) -> Result<Self, Box<dyn Error>> {
15 Ok(serde_json::from_str(&std::fs::read_to_string(path)?)?)
16 }
17}
18
19#[derive(Clone, Deserialize)]
20#[serde(rename_all = "PascalCase")]
21pub(crate) struct Identity {
22 #[serde(rename = "PeerID")]
23 pub(crate) peer_id: String,
24 pub(crate) priv_key: String,
25}
26
27#[derive(Clone, Deserialize)]
28#[serde(rename_all = "PascalCase")]
29pub(crate) struct Addresses {
30 pub(crate) swarm: Vec<Multiaddr>,
31 pub(crate) append_announce: Vec<Multiaddr>,
32}
33
34impl zeroize::Zeroize for Config {
35 fn zeroize(&mut self) {
36 self.identity.peer_id.zeroize();
37 self.identity.priv_key.zeroize();
38 }
39}