use eyre::Result;
use figment::{
value::{Dict, Map},
Error, Metadata, Profile, Provider,
};
#[derive(Debug)]
pub struct RenameProfileProvider<P> {
provider: P,
from: Profile,
to: Profile,
}
impl<P> RenameProfileProvider<P> {
#[allow(dead_code)]
pub fn new(provider: P, from: impl Into<Profile>, to: impl Into<Profile>) -> Self {
Self {
provider,
from: from.into(),
to: to.into(),
}
}
}
impl<P: Provider> Provider for RenameProfileProvider<P> {
fn metadata(&self) -> Metadata {
self.provider.metadata()
}
fn data(&self) -> Result<Map<Profile, Dict>, Error> {
let mut data = self.provider.data()?;
if let Some(data) = data.remove(&self.from) {
return Ok(Map::from([(self.to.clone(), data)]));
}
Ok(Default::default())
}
fn profile(&self) -> Option<Profile> {
Some(self.to.clone())
}
}