use crate::{Configuration, OwnedSection, Section};
use std::rc::Rc;
use std::sync::Arc;
use tokens::{ChangeToken, NeverChangeToken};
pub trait Reloadable: Sized {
fn can_reload(&self) -> bool;
fn reload_token(&self) -> impl ChangeToken + 'static;
}
macro_rules! unreloadable {
($type:ty) => {
impl Reloadable for $type {
#[inline]
fn can_reload(&self) -> bool {
false
}
#[inline]
fn reload_token(&self) -> impl ChangeToken + 'static {
NeverChangeToken
}
}
};
}
unreloadable!(Configuration);
unreloadable!(Section<'_>);
unreloadable!(OwnedSection);
macro_rules! reloadable {
($type:ty) => {
impl Reloadable for $type {
#[inline]
fn can_reload(&self) -> bool {
(&**self).can_reload()
}
#[inline]
fn reload_token(&self) -> impl ChangeToken + 'static {
(&**self).reload_token()
}
}
};
}
reloadable!(Arc<Configuration>);
reloadable!(Rc<Configuration>);