use crate::traits::PlatformIfConfigT;
use derive_builder::Builder;
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
pub enum Layer {
L2,
L3,
}
#[derive(Builder)]
pub struct IfConfig<P: PlatformIfConfigT> {
pub name: String,
#[builder(default = "Layer::L3")]
pub layer: Layer,
#[allow(dead_code)]
#[builder(setter(custom))]
#[builder(default = "P::default()")]
pub platform: P,
}
impl<P: PlatformIfConfigT + Clone> IfConfigBuilder<P> {
pub fn platform<F, E>(&mut self, f: F) -> Result<&mut Self, E>
where
F: Fn(P::Builder) -> Result<P, E>,
{
let builder = P::Builder::default();
self.platform = Some(f(builder)?);
Ok(self)
}
}