drpc 0.2.3

Rust High Performance Async RPC Framework
Documentation
#[cfg(test)]
mod test {
    use drpc::balance::{LoadBalance, LoadBalanceType, RpcClient};

    pub struct MockClient {
        pub addr: String,
    }
    impl RpcClient for MockClient {
        fn addr(&self) -> &str {
            &self.addr
        }
    }
    impl From<&str> for MockClient {
        fn from(value: &str) -> Self {
            MockClient {
                addr: value.to_string(),
            }
        }
    }

    #[tokio::test]
    async fn test_put() {
        let load: LoadBalance<MockClient> = LoadBalance::new();
        load.put("127.0.0.1:13000".into());
        load.put("127.0.0.1:13001".into());

        let old = load.put("127.0.0.1:13001".into()).unwrap();
        assert_eq!(old.addr(), "127.0.0.1:13001".to_string());
    }

    #[tokio::test]
    async fn test_remove() {
        let load: LoadBalance<MockClient> = LoadBalance::new();
        load.put("127.0.0.1:13000".into());
        load.put("127.0.0.1:13001".into());

        let old = load.remove("127.0.0.1:13000").unwrap();
        assert_eq!(old.addr(), "127.0.0.1:13000".to_string());
    }

    #[tokio::test]
    async fn test_min_connect() {
        let load: LoadBalance<MockClient> = LoadBalance::new();
        load.put("127.0.0.1:13000".into());
        load.put("127.0.0.1:13001".into());
        load.put("127.0.0.1:13002".into());
        load.put("127.0.0.1:13003".into());
        let mut v = vec![];
        let item = load.do_balance(LoadBalanceType::MinConnect, "");
        println!("select:{}", item.as_ref().unwrap().addr());
        v.push(item);
        let item = load.do_balance(LoadBalanceType::MinConnect, "");
        println!("select:{}", item.as_ref().unwrap().addr());
        v.push(item);
        let item = load.do_balance(LoadBalanceType::MinConnect, "");
        println!("select:{}", item.as_ref().unwrap().addr());
        v.push(item);
        let item = load.do_balance(LoadBalanceType::MinConnect, "");
        println!("select:{}", item.as_ref().unwrap().addr());
        v.push(item);
        let item = load.do_balance(LoadBalanceType::MinConnect, "");
        println!("select:{}", item.as_ref().unwrap().addr());
        v.push(item);
        let item = load.do_balance(LoadBalanceType::MinConnect, "");
        println!("select:{}", item.as_ref().unwrap().addr());
        v.push(item);
    }
}