use std::path::{Path, PathBuf};
pub const GATEWAY_PEER_CACHE_FILE: &str = "gateway-peer-cache";
pub const LEGACY_GATEWAY_PEER_CACHE_FILE: &str = "cached_gateway_peers";
pub const ROUTER_PEER_CACHE_FILE: &str = "router-peer-cache";
pub const LEGACY_ROUTER_PEER_CACHE_FILE: &str = "cached_router_peers";
pub const CURRENT_PROPOSAL_CACHE_FILE: &str = "current-proposal-cache";
pub const VALIDATOR_WHITELIST_FILE: &str = "validator-whitelist";
pub fn jwt_secret_file<D: std::fmt::Display>(address: &D) -> PathBuf {
PathBuf::from(format!("jwt_secret_{address}.txt"))
}
pub fn legacy_current_proposal_cache_file(network: u16, dev: Option<u16>) -> PathBuf {
if let Some(dev) = dev {
PathBuf::from(format!(".current-proposal-cache-{network}-{dev}"))
} else {
PathBuf::from(format!("current-proposal-cache-{network}"))
}
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct NodeDataDir {
path: PathBuf,
}
impl NodeDataDir {
pub fn new(path: PathBuf) -> Self {
Self { path }
}
pub fn new_test(dev: Option<u16>) -> Self {
if let Some(dev) = dev {
Self { path: PathBuf::from(format!(".node-data-test-{dev}")) }
} else {
Self { path: PathBuf::from(".node-data-test") }
}
}
pub fn new_development(network: u16, dev: u16) -> Self {
let path = std::env::current_dir()
.unwrap_or(PathBuf::from(env!("CARGO_MANIFEST_DIR")))
.join(format!(".node-data-{network}-{dev}"));
Self::new(path)
}
pub fn path(&self) -> &Path {
&self.path
}
pub fn router_peer_cache_path(&self) -> PathBuf {
self.path.join(ROUTER_PEER_CACHE_FILE)
}
pub fn gateway_peer_cache_path(&self) -> PathBuf {
self.path.join(GATEWAY_PEER_CACHE_FILE)
}
pub fn validator_whitelist_path(&self) -> PathBuf {
self.path.join(VALIDATOR_WHITELIST_FILE)
}
pub fn current_proposal_cache_path(&self) -> PathBuf {
self.path.join(CURRENT_PROPOSAL_CACHE_FILE)
}
pub fn jwt_secret_path<D: std::fmt::Display>(&self, address: &D) -> PathBuf {
self.path.join(jwt_secret_file(address))
}
}