rs-zero 0.1.1

Rust-first microservice framework inspired by go-zero engineering practices
Documentation
#![cfg(feature = "discovery-etcd")]

use rs_zero::discovery::{Discovery, InstanceEndpoint, Registry, ServiceInstance};
use rs_zero::discovery_etcd::{
    EtcdDiscoveryConfig, EtcdRegistry, decode_instance, encode_instance, instance_key,
};

#[tokio::test]
async fn etcd_codec_and_registry_facade_work_without_external_service() {
    let instance = ServiceInstance::new(
        "api",
        "api-1",
        InstanceEndpoint::new("127.0.0.1", 8080).expect("endpoint"),
    );
    let encoded = encode_instance(&instance).expect("encode");
    assert_eq!(decode_instance(&encoded).expect("decode"), instance);
    assert_eq!(
        instance_key(&EtcdDiscoveryConfig::default(), "api", "api-1"),
        "/rs-zero/api/api-1"
    );

    let registry = EtcdRegistry::new(EtcdDiscoveryConfig::default());
    registry.register(instance).await.expect("register");
    assert_eq!(registry.discover("api").await.expect("discover").len(), 1);
    registry
        .deregister("api", "api-1")
        .await
        .expect("deregister");
}