caretta-sync/lazy-supplements/src/config/node.rs

71 lines
1.9 KiB
Rust
Raw Normal View History

2025-05-30 09:26:47 +09:00
use std::path::PathBuf;
2025-05-24 06:11:00 +09:00
use libp2p::identity::{self, Keypair};
use serde::{Deserialize, Serialize};
2025-05-30 09:26:47 +09:00
use crate::global::DEFAULT_DATABASE_FILE_PATH;
2025-05-24 06:11:00 +09:00
#[derive(Debug, Deserialize, Serialize)]
pub struct NodeConfig {
#[serde(with = "keypair")]
secret: Keypair,
2025-05-30 09:26:47 +09:00
database_path: Option<PathBuf>
}
impl NodeConfig {
pub fn new() -> Self {
Self {
secret: identity::Keypair::generate_ed25519(),
database_path: None,
}
}
pub fn get_database_path(&self) -> PathBuf {
if let Some(x) = self.database_path.clone() {
x
} else {
DEFAULT_DATABASE_FILE_PATH.clone()
}
}
2025-05-24 06:11:00 +09:00
}
mod keypair {
use base64::{prelude::BASE64_STANDARD, Engine};
use libp2p::identity::Keypair;
use serde::{Deserialize, Deserializer, Serializer};
pub fn serialize<S>(keypair: &Keypair, serializer: S) -> Result<S::Ok, S::Error>
where S: Serializer
{
let vec = keypair.to_protobuf_encoding().unwrap();
let base64 = BASE64_STANDARD.encode(vec);
serializer.serialize_str(&base64)
}
pub fn deserialize<'de, D>(deserializer: D) -> Result<Keypair, D::Error>
where D: Deserializer<'de>
{
let base64 = String::deserialize(deserializer)?;
let vec = BASE64_STANDARD.decode(base64).unwrap();
Ok(Keypair::from_protobuf_encoding(&vec).unwrap())
}
}
#[cfg(test)]
mod tests {
use libp2p::identity;
use super::*;
#[tokio::test]
2025-05-24 09:17:45 +09:00
async fn serialize_deserialize() {
2025-05-24 06:11:00 +09:00
let keypair = identity::Keypair::generate_ed25519();
let config = NodeConfig {
secret: keypair.clone(),
2025-05-30 09:26:47 +09:00
database_path: None,
2025-05-24 06:11:00 +09:00
};
let string = toml::to_string(&config).unwrap();
println!("Parsed config: {}", &string);
let parsed_config: NodeConfig = toml::from_str(&string).unwrap();
2025-05-24 09:17:45 +09:00
assert_eq!(keypair.public(), parsed_config.secret.public());
2025-05-24 06:11:00 +09:00
}
}