net_pool/strategy/
strategy.rs

1use crate::backend::{Address, BackendState};
2
3/// 策略trait
4pub trait Strategy: Send + Sync {
5    /// 判断一个后端地址是否存在
6    fn contain(&self, addr: &Address) -> bool;
7
8    /// 添加一个后端地址
9    fn add_backend(&self, id: Option<u32>, addr: Address);
10
11    /// 移除一个后端地址
12    fn remove_backend(&self, addr: &Address) -> bool;
13
14    /// 获取一个后端地址
15    fn get_backend(&self, key: &str) -> Option<BackendState>;
16
17    /// 获取id来获取后端地址
18    fn get_backend_by_id(&self, id: u32) -> Option<BackendState>;
19    
20    fn get_backend_by_code(&self, code: u64) -> Option<BackendState>;
21    
22    /// 获取所有后端地址
23    fn get_backends(&self) -> Vec<BackendState>;
24    
25    /// 获取一个后端地址, 通过通用key
26    fn backend<KEY: AsRef<str>>(this: Box<dyn Strategy>, key: KEY) -> Option<BackendState>
27    where
28        Self: Sized,
29    {
30        this.get_backend(key.as_ref())
31    }
32}