etcd-detector 0.5.2

An etcd-based implementation of service registration and discovery.
Documentation
use crate::{Detector, MetaDetector};
use detector::{Meta, MetaKey, Service, ServiceKey};
use std::time::Duration;

#[derive(Clone)]
pub struct Builder {
    client: etcd_client::Client,
}

impl Builder {
    /// Connect to etcd servers from given endpoints.
    pub async fn connect<E: AsRef<str>, S: AsRef<[E]>>(
        endpoints: S,
    ) -> Result<Builder, etcd_client::Error> {
        let options = Some(
            etcd_client::ConnectOptions::new()
                .with_keep_alive(Duration::from_secs(5), Duration::from_secs(10)),
        );
        let client = etcd_client::Client::connect(endpoints, options).await?;
        Ok(Builder { client })
    }

    /// 根据Service对象创建一个detector
    pub fn detector(&self, service: Service) -> Detector {
        Detector::new(self.client.clone(), service)
    }

    /// 根据ServiceKey创建一个detector, 如果用于注册,则会发现没有实例具本信息
    pub fn detector_from_key(&self, key: ServiceKey) -> Detector {
        Detector::new(self.client.clone(), Service::from_key(key))
    }

    /// 根据Meta对象创建一个MetaDetector
    pub fn meta_detector(&self, meta: Meta) -> MetaDetector {
        MetaDetector::new(self.client.clone(), meta)
    }

    /// 根据MetaKey创建一个MetaDetector, 如果用于注册,则会发现没有实例具本信息
    pub fn meta_detector_from_key(&self, key: MetaKey) -> MetaDetector {
        MetaDetector::new(self.client.clone(), Meta::from_key(key))
    }
}