configcat 0.1.5

ConfigCat Rust SDK
Documentation
use crate::{OverrideBehavior, OverrideDataSource};
use std::borrow::Borrow;
use std::fmt::{Debug, Formatter};

pub mod behavior;
pub mod file;
pub mod map;
pub mod source;

pub trait OptionalOverrides {
    fn is_local(&self) -> bool;
}

pub struct FlagOverrides {
    behavior: OverrideBehavior,
    source: Box<dyn OverrideDataSource>,
}

impl FlagOverrides {
    pub fn new(source: Box<dyn OverrideDataSource>, behavior: OverrideBehavior) -> Self {
        Self { behavior, source }
    }

    pub fn behavior(&self) -> &OverrideBehavior {
        &self.behavior
    }

    pub fn source(&self) -> &dyn OverrideDataSource {
        self.source.borrow()
    }
}

impl OptionalOverrides for Option<&FlagOverrides> {
    fn is_local(&self) -> bool {
        if let Some(ov) = self {
            return matches!(ov.behavior, OverrideBehavior::LocalOnly);
        }
        false
    }
}

impl OptionalOverrides for Option<FlagOverrides> {
    fn is_local(&self) -> bool {
        self.as_ref().is_local()
    }
}

impl Debug for FlagOverrides {
    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
        f.debug_struct("FlagOverrides")
            .field("behavior", &self.behavior)
            .finish_non_exhaustive()
    }
}