#[derive(Default, Clone)]
pub struct KeystoreConfig {
pub(crate) in_memory: bool,
#[cfg(feature = "std")]
pub(crate) fs_root: Option<std::path::PathBuf>,
#[cfg(any(
feature = "aws-signer",
feature = "gcp-signer",
feature = "ledger-browser",
feature = "ledger-node"
))]
pub(crate) remote_configs: Vec<crate::remote::RemoteConfig>,
}
impl core::fmt::Debug for KeystoreConfig {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
let mut binding = f.debug_struct("KeystoreConfig");
let c = binding.field("in_memory", &self.in_memory);
#[cfg(feature = "std")]
let c = c.field("fs_root", &self.fs_root);
#[cfg(any(
feature = "aws-signer",
feature = "gcp-signer",
feature = "ledger-browser",
feature = "ledger-node"
))]
let c = c.field("remote_configs", &self.remote_configs);
c.finish()
}
}
impl KeystoreConfig {
#[must_use]
pub fn new() -> Self {
Self::default()
}
#[must_use]
pub fn in_memory(mut self, value: bool) -> Self {
self.in_memory = value;
self
}
#[cfg(feature = "std")]
#[must_use]
pub fn fs_root<P: AsRef<std::path::Path>>(mut self, path: P) -> Self {
self.fs_root = Some(path.as_ref().to_path_buf());
self
}
cfg_remote! {
#[must_use]
pub fn remote(mut self, remote_config: crate::remote::RemoteConfig) -> Self {
self.remote_configs.push(remote_config);
self
}
}
#[allow(unused_mut)]
fn is_empty(&self) -> bool {
let mut is_empty = self.in_memory;
#[cfg(feature = "std")]
{
is_empty |= self.fs_root.is_none();
}
#[cfg(any(
feature = "aws-signer",
feature = "gcp-signer",
feature = "ledger-browser",
feature = "ledger-node"
))]
{
is_empty |= !self.remote_configs.is_empty();
}
is_empty
}
pub(crate) fn finalize(self) -> Self {
if self.is_empty() {
return self.in_memory(true);
}
self
}
}