Skip to main content

apigate_core/
policy.rs

1use std::sync::Arc;
2
3use crate::balancing::{Balancer, RoundRobin};
4use crate::routing::{NoRouteKey, RouteStrategy};
5
6pub struct Policy {
7    pub router: Arc<dyn RouteStrategy>,
8    pub balancer: Arc<dyn Balancer>,
9}
10
11impl Policy {
12    pub fn new() -> Self {
13        Self {
14            router: Arc::new(NoRouteKey),
15            balancer: Arc::new(RoundRobin::new()),
16        }
17    }
18
19    pub fn router<R>(mut self, router: R) -> Self
20    where
21        R: RouteStrategy,
22    {
23        self.router = Arc::new(router);
24        self
25    }
26
27    pub fn balancer<B>(mut self, balancer: B) -> Self
28    where
29        B: Balancer,
30    {
31        self.balancer = Arc::new(balancer);
32        self
33    }
34}