use crate::{
prelude::*,
resolver::{Locked, LockedResolver, ResolverState, Unlocked, UnlockedResolver},
};
pub struct ConstantResolver<S, T>
where
S: ResolverState,
{
value: T,
_state: S,
}
impl<T> LockedResolver<T> for ConstantResolver<Locked, T> {}
impl<T> UnlockedResolver<T, ConstantResolver<Locked, T>> for ConstantResolver<Unlocked, T>
{
fn lock(self) -> ConstantResolver<Locked, T>
{
ConstantResolver {
value: self.value,
_state: Locked,
}
}
}
impl<S, T> Resolver<S, T> for ConstantResolver<S, T>
where
S: ResolverState,
{
fn resolve(&self, _name: &str) -> Option<&T>
{
Some(&self.value)
}
}
impl<T> ConstantResolver<Unlocked, T>
{
pub fn new(value: T) -> Self
{
ConstantResolver {
value,
_state: Unlocked,
}
}
}
impl<S, T> ConstantResolver<S, T>
where
S: ResolverState,
{
pub fn set(&mut self, value: T)
{
self.value = value;
}
}