1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use std::sync::Arc;

use crate::error::Result;
use crate::{Interceptor, InterceptorBuilder};

pub type MockBuilderResult = Result<Arc<dyn Interceptor + Send + Sync>>;

/// MockBuilder is a mock Builder for testing.
pub struct MockBuilder {
    pub build: Box<dyn (Fn(&str) -> MockBuilderResult) + Send + Sync + 'static>,
}

impl MockBuilder {
    pub fn new<F: (Fn(&str) -> MockBuilderResult) + Send + Sync + 'static>(f: F) -> Self {
        MockBuilder { build: Box::new(f) }
    }
}

impl InterceptorBuilder for MockBuilder {
    fn build(&self, id: &str) -> MockBuilderResult {
        (self.build)(id)
    }
}