use crate::{
utils::{IdentityLayer, Layer},
Subscriber,
};
#[derive(Clone)]
pub struct SubscriberBuilder<L = IdentityLayer> {
layer: L,
}
impl Default for SubscriberBuilder {
fn default() -> Self {
Self::new()
}
}
impl SubscriberBuilder {
pub fn new() -> Self {
Self {
layer: IdentityLayer::new(),
}
}
}
impl<L> SubscriberBuilder<L> {
pub fn layer<NewLayer>(self, layer: NewLayer) -> SubscriberBuilder<NewLayer> {
SubscriberBuilder { layer }
}
pub fn subscriber<S>(self, subscriber: S) -> L::LayerType
where
S: Subscriber,
L: Layer<S>,
L::LayerType: Subscriber,
{
Layer::layer(&self.layer, subscriber)
}
}