rs-zero 0.1.1

Rust-first microservice framework inspired by go-zero engineering practices
Documentation
use crate::discovery_etcd::{EtcdDiscoveryConfig, EtcdDiscoveryError, EtcdDiscoveryResult};

/// Factory for etcd clients.
#[derive(Debug, Clone)]
pub struct EtcdClientFactory {
    config: EtcdDiscoveryConfig,
}

impl EtcdClientFactory {
    /// Creates a factory after validating endpoints.
    pub fn new(config: EtcdDiscoveryConfig) -> EtcdDiscoveryResult<Self> {
        if config.endpoints.is_empty() {
            return Err(EtcdDiscoveryError::MissingEndpoint);
        }
        Ok(Self { config })
    }

    /// Returns configured endpoints.
    pub fn endpoints(&self) -> &[String] {
        &self.config.endpoints
    }

    /// Creates a real etcd client when `discovery-etcd` is enabled.
    #[cfg(feature = "discovery-etcd")]
    pub async fn connect(&self) -> EtcdDiscoveryResult<etcd_client::Client> {
        etcd_client::Client::connect(self.config.endpoints.clone(), None)
            .await
            .map_err(|error| EtcdDiscoveryError::Backend(error.to_string()))
    }
}