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}