pub trait LinkClient<T>: Sized + Client<T> + ClientConnect<T>
where T: Send + Clone,
{ type OtherList; type LinkObject; // Required methods fn link<'life0, 'async_trait>( &'life0 self, request: Self::LinkObject ) -> Pin<Box<dyn Future<Output = Result<Response<()>, Status>> + Send + 'async_trait>> where 'life0: 'async_trait, Self: 'async_trait; fn replace_linked<'life0, 'async_trait>( &'life0 self, request: Self::LinkObject ) -> Pin<Box<dyn Future<Output = Result<Response<()>, Status>> + Send + 'async_trait>> where 'life0: 'async_trait, Self: 'async_trait; fn unlink<'life0, 'async_trait>( &'life0 self, request: Id ) -> Pin<Box<dyn Future<Output = Result<Response<()>, Status>> + Send + 'async_trait>> where 'life0: 'async_trait, Self: 'async_trait; fn get_linked_ids<'life0, 'async_trait>( &'life0 self, request: Id ) -> Pin<Box<dyn Future<Output = Result<Response<IdList>, Status>> + Send + 'async_trait>> where 'life0: 'async_trait, Self: 'async_trait; fn get_linked<'life0, 'async_trait>( &'life0 self, request: Id ) -> Pin<Box<dyn Future<Output = Result<Response<Self::OtherList>, Status>> + Send + 'async_trait>> where 'life0: 'async_trait, Self: 'async_trait; fn is_ready<'life0, 'async_trait>( &'life0 self, request: ReadyRequest ) -> Pin<Box<dyn Future<Output = Result<Response<ReadyResponse>, Status>> + Send + 'async_trait>> where 'life0: 'async_trait, Self: 'async_trait; }
Expand description

Generic gRPC object traits to provide wrappers for simple Resource functions

Required Associated Types§

type OtherList

The type expected for List structs.

type LinkObject

The type expected for Linked Object structs.

Required Methods§

Links one or multiple objects with the main object.

Takes a LinkObject and uses the provided id field to determine the unique id of the main object that needs to be linked. Uses the provided other_id_list field to determine the unique ids of the objects that needs to be linked to the main object.

Errors

Returns tonic::Status with tonic::Code::NotFound if the provided id is not found in the database. Returns tonic::Status with tonic::Code::Internal if the provided ids can not be converted to a uuid::Uuid. Returns tonic::Status with tonic::Code::Internal if any error is returned from the db insert result. Returns tonic::Status with tonic::Code::Unknown if the server is not ready.

Examples
use lib_common::grpc::get_endpoint_from_env;
use svc_storage_client_grpc::prelude::*;

async fn example () -> Result<(), Box<dyn std::error::Error>> {
    let (host, port) = get_endpoint_from_env("SERVER_HOSTNAME", "SERVER_PORT_GRPC");
    let clients = Clients::new(host, port);
    let link_client = clients.user_group_link;
    let user_id = String::from("40ef6e51-c7db-4ce7-a806-a754d6baa641");
    let group_id = String::from("5dc9364e-0e5b-4156-b258-008037da242a");
    let result = link_client
        .link(user::UserGroups {
            id: user_id,
            other_id_list: Some(IdList { ids: vec![group_id] }),
        })
        .await;
    Ok(())
}

fn replace_linked<'life0, 'async_trait>( &'life0 self, request: Self::LinkObject ) -> Pin<Box<dyn Future<Output = Result<Response<()>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Replaces all linked objects with the newly provided data.

Takes a LinkObject and uses the provided id field to determine the unique id of the main object that needs to be re-linked. Uses the provided other_id_list field to determine the unique ids of the objects that needs to be linked to the main object. All existing links will be removed first.

Errors

Returns tonic::Status with tonic::Code::NotFound if the provided id is not found in the database. Returns tonic::Status with tonic::Code::Internal if the provided ids can not be converted to a uuid::Uuid. Returns tonic::Status with tonic::Code::Internal if any error is returned from any of the db results. Returns tonic::Status with tonic::Code::Unknown if the server is not ready.

Examples
use lib_common::grpc::get_endpoint_from_env;
use svc_storage_client_grpc::prelude::*;

async fn example () -> Result<(), Box<dyn std::error::Error>> {
    let (host, port) = get_endpoint_from_env("SERVER_HOSTNAME", "SERVER_PORT_GRPC");
    let clients = Clients::new(host, port);
    let link_client = clients.user_group_link;
    let user_id = String::from("40ef6e51-c7db-4ce7-a806-a754d6baa641");
    let group_id = String::from("5dc9364e-0e5b-4156-b258-008037da242a");
    let result = link_client
        .replace_linked(user::UserGroups {
            id: user_id,
            other_id_list: Some(IdList { ids: vec![group_id] }),
        })
        .await;
    Ok(())
}

Removes all linked objects for the provided main object.

Takes a Id and uses the provided id field to determine the unique id of the main object that needs all its links to be removed.

Errors

Returns tonic::Status with tonic::Code::NotFound if the provided id is not found in the database. Returns tonic::Status with tonic::Code::Internal if the provided ids can not be converted to a uuid::Uuid. Returns tonic::Status with tonic::Code::Internal if any error is returned from the db delete result. Returns tonic::Status with tonic::Code::Unknown if the server is not ready.

Examples
use lib_common::grpc::get_endpoint_from_env;
use svc_storage_client_grpc::prelude::*;

async fn example () -> Result<(), Box<dyn std::error::Error>> {
    let (host, port) = get_endpoint_from_env("SERVER_HOSTNAME", "SERVER_PORT_GRPC");
    let clients = Clients::new(host, port);
    let link_client = clients.user_group_link;
    let user_id = String::from("40ef6e51-c7db-4ce7-a806-a754d6baa641");
    let group_id = String::from("5dc9364e-0e5b-4156-b258-008037da242a");
    let result = link_client
        .unlink(Id {
            id: user_id,
        })
        .await;
    Ok(())
}

fn get_linked_ids<'life0, 'async_trait>( &'life0 self, request: Id ) -> Pin<Box<dyn Future<Output = Result<Response<IdList>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Returns all linked ids for the provided main object.

Takes a Id and uses the provided id field to determine the unique id of the main object that needs all its linked ids returned.

Errors

Returns tonic::Status with tonic::Code::NotFound if the provided id is not found in the database. Returns tonic::Status with tonic::Code::Internal if the provided Id can not be converted to a uuid::Uuid. Returns tonic::Status with tonic::Code::Internal if any error is returned from the db search result. Returns tonic::Status with tonic::Code::Unknown if the server is not ready.

Examples
use lib_common::grpc::get_endpoint_from_env;
use svc_storage_client_grpc::prelude::*;

async fn example () -> Result<(), Box<dyn std::error::Error>> {
    let (host, port) = get_endpoint_from_env("SERVER_HOSTNAME", "SERVER_PORT_GRPC");
    let clients = Clients::new(host, port);
    let link_client = clients.user_group_link;
    let user_id = String::from("40ef6e51-c7db-4ce7-a806-a754d6baa641");
    let group_id = String::from("5dc9364e-0e5b-4156-b258-008037da242a");
    let result = link_client
        .get_linked_ids(Id {
            id: user_id,
        })
        .await;
    Ok(())
}

fn get_linked<'life0, 'async_trait>( &'life0 self, request: Id ) -> Pin<Box<dyn Future<Output = Result<Response<Self::OtherList>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Returns all linked objects of the provided main object.

Takes a Id and uses the provided id field to determine the unique id of the main object that needs all its linked objects returned.

Errors

Returns tonic::Status with tonic::Code::NotFound if the provided id is not found in the database. Returns tonic::Status with tonic::Code::Internal if the provided Id can not be converted to a uuid::Uuid. Returns tonic::Status with tonic::Code::Internal if any error is returned from the db search result. Returns tonic::Status with tonic::Code::Unknown if the server is not ready.

Examples
use lib_common::grpc::get_endpoint_from_env;
use svc_storage_client_grpc::prelude::*;

async fn example () -> Result<(), Box<dyn std::error::Error>> {
    let (host, port) = get_endpoint_from_env("SERVER_HOSTNAME", "SERVER_PORT_GRPC");
    let clients = Clients::new(host, port);
    let link_client = clients.user_group_link;
    let user_id = String::from("40ef6e51-c7db-4ce7-a806-a754d6baa641");
    let group_id = String::from("5dc9364e-0e5b-4156-b258-008037da242a");
    let result = link_client
        .get_linked(Id {
            id: user_id,
        })
        .await;
    Ok(())
}

fn is_ready<'life0, 'async_trait>( &'life0 self, request: ReadyRequest ) -> Pin<Box<dyn Future<Output = Result<Response<ReadyResponse>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Returns a tonic::Response containing a ReadyResponse Takes an ReadyRequest

Errors

Returns tonic::Status with tonic::Code::Unknown if the server is not ready.

Examples
use lib_common::grpc::get_endpoint_from_env;
use svc_storage_client_grpc::prelude::*;

async fn example () -> Result<(), Box<dyn std::error::Error>> {
    let (host, port) = get_endpoint_from_env("SERVER_HOSTNAME", "SERVER_PORT_GRPC");
    let clients = Clients::new(host, port);
    let response = clients.user_group_link
        .is_ready(ReadyRequest {})
        .await?;
    println!("RESPONSE={:?}", response.into_inner());
    Ok(())
}

Object Safety§

This trait is not object safe.

Implementations on Foreign Types§

§

impl Client<RpcUserLinkClient<Channel>> for GrpcClient<RpcUserLinkClient<Channel>>

§

type LinkObject = GroupUsers

§

type OtherList = List

§

fn replace_linked<'life0, 'async_trait>( &'life0 self, request: <GrpcClient<RpcUserLinkClient<Channel>> as Client<RpcUserLinkClient<Channel>>>::LinkObject ) -> Pin<Box<dyn Future<Output = Result<Response<()>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcUserLinkClient<Channel>>: 'async_trait,

§

fn get_linked_ids<'life0, 'async_trait>( &'life0 self, request: Id ) -> Pin<Box<dyn Future<Output = Result<Response<IdList>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcUserLinkClient<Channel>>: 'async_trait,

§

fn get_linked<'life0, 'async_trait>( &'life0 self, request: Id ) -> Pin<Box<dyn Future<Output = Result<Response<<GrpcClient<RpcUserLinkClient<Channel>> as Client<RpcUserLinkClient<Channel>>>::OtherList>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcUserLinkClient<Channel>>: 'async_trait,

§

fn is_ready<'life0, 'async_trait>( &'life0 self, request: ReadyRequest ) -> Pin<Box<dyn Future<Output = Result<Response<ReadyResponse>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcUserLinkClient<Channel>>: 'async_trait,

§

impl Client<RpcVehicleLinkClient<Channel>> for GrpcClient<RpcVehicleLinkClient<Channel>>

§

type LinkObject = GroupVehicles

§

type OtherList = List

§

fn replace_linked<'life0, 'async_trait>( &'life0 self, request: <GrpcClient<RpcVehicleLinkClient<Channel>> as Client<RpcVehicleLinkClient<Channel>>>::LinkObject ) -> Pin<Box<dyn Future<Output = Result<Response<()>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcVehicleLinkClient<Channel>>: 'async_trait,

§

fn get_linked_ids<'life0, 'async_trait>( &'life0 self, request: Id ) -> Pin<Box<dyn Future<Output = Result<Response<IdList>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcVehicleLinkClient<Channel>>: 'async_trait,

§

fn get_linked<'life0, 'async_trait>( &'life0 self, request: Id ) -> Pin<Box<dyn Future<Output = Result<Response<<GrpcClient<RpcVehicleLinkClient<Channel>> as Client<RpcVehicleLinkClient<Channel>>>::OtherList>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcVehicleLinkClient<Channel>>: 'async_trait,

§

fn is_ready<'life0, 'async_trait>( &'life0 self, request: ReadyRequest ) -> Pin<Box<dyn Future<Output = Result<Response<ReadyResponse>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcVehicleLinkClient<Channel>>: 'async_trait,

§

impl Client<RpcVertipadLinkClient<Channel>> for GrpcClient<RpcVertipadLinkClient<Channel>>

§

type LinkObject = GroupVertipads

§

type OtherList = List

§

fn replace_linked<'life0, 'async_trait>( &'life0 self, request: <GrpcClient<RpcVertipadLinkClient<Channel>> as Client<RpcVertipadLinkClient<Channel>>>::LinkObject ) -> Pin<Box<dyn Future<Output = Result<Response<()>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcVertipadLinkClient<Channel>>: 'async_trait,

§

fn get_linked_ids<'life0, 'async_trait>( &'life0 self, request: Id ) -> Pin<Box<dyn Future<Output = Result<Response<IdList>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcVertipadLinkClient<Channel>>: 'async_trait,

§

fn get_linked<'life0, 'async_trait>( &'life0 self, request: Id ) -> Pin<Box<dyn Future<Output = Result<Response<<GrpcClient<RpcVertipadLinkClient<Channel>> as Client<RpcVertipadLinkClient<Channel>>>::OtherList>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcVertipadLinkClient<Channel>>: 'async_trait,

§

fn is_ready<'life0, 'async_trait>( &'life0 self, request: ReadyRequest ) -> Pin<Box<dyn Future<Output = Result<Response<ReadyResponse>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcVertipadLinkClient<Channel>>: 'async_trait,

§

impl Client<RpcVertiportLinkClient<Channel>> for GrpcClient<RpcVertiportLinkClient<Channel>>

§

type LinkObject = GroupVertiports

§

type OtherList = List

§

fn replace_linked<'life0, 'async_trait>( &'life0 self, request: <GrpcClient<RpcVertiportLinkClient<Channel>> as Client<RpcVertiportLinkClient<Channel>>>::LinkObject ) -> Pin<Box<dyn Future<Output = Result<Response<()>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcVertiportLinkClient<Channel>>: 'async_trait,

§

fn get_linked_ids<'life0, 'async_trait>( &'life0 self, request: Id ) -> Pin<Box<dyn Future<Output = Result<Response<IdList>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcVertiportLinkClient<Channel>>: 'async_trait,

§

fn get_linked<'life0, 'async_trait>( &'life0 self, request: Id ) -> Pin<Box<dyn Future<Output = Result<Response<<GrpcClient<RpcVertiportLinkClient<Channel>> as Client<RpcVertiportLinkClient<Channel>>>::OtherList>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcVertiportLinkClient<Channel>>: 'async_trait,

§

fn is_ready<'life0, 'async_trait>( &'life0 self, request: ReadyRequest ) -> Pin<Box<dyn Future<Output = Result<Response<ReadyResponse>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcVertiportLinkClient<Channel>>: 'async_trait,

§

impl Client<RpcFlightPlanLinkClient<Channel>> for GrpcClient<RpcFlightPlanLinkClient<Channel>>

§

type LinkObject = ItineraryFlightPlans

§

type OtherList = List

§

fn replace_linked<'life0, 'async_trait>( &'life0 self, request: <GrpcClient<RpcFlightPlanLinkClient<Channel>> as Client<RpcFlightPlanLinkClient<Channel>>>::LinkObject ) -> Pin<Box<dyn Future<Output = Result<Response<()>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcFlightPlanLinkClient<Channel>>: 'async_trait,

§

fn get_linked_ids<'life0, 'async_trait>( &'life0 self, request: Id ) -> Pin<Box<dyn Future<Output = Result<Response<IdList>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcFlightPlanLinkClient<Channel>>: 'async_trait,

§

fn get_linked<'life0, 'async_trait>( &'life0 self, request: Id ) -> Pin<Box<dyn Future<Output = Result<Response<<GrpcClient<RpcFlightPlanLinkClient<Channel>> as Client<RpcFlightPlanLinkClient<Channel>>>::OtherList>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcFlightPlanLinkClient<Channel>>: 'async_trait,

§

fn is_ready<'life0, 'async_trait>( &'life0 self, request: ReadyRequest ) -> Pin<Box<dyn Future<Output = Result<Response<ReadyResponse>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcFlightPlanLinkClient<Channel>>: 'async_trait,

§

impl Client<RpcGroupLinkClient<Channel>> for GrpcClient<RpcGroupLinkClient<Channel>>

§

type LinkObject = UserGroups

§

type OtherList = List

§

fn replace_linked<'life0, 'async_trait>( &'life0 self, request: <GrpcClient<RpcGroupLinkClient<Channel>> as Client<RpcGroupLinkClient<Channel>>>::LinkObject ) -> Pin<Box<dyn Future<Output = Result<Response<()>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcGroupLinkClient<Channel>>: 'async_trait,

§

fn get_linked_ids<'life0, 'async_trait>( &'life0 self, request: Id ) -> Pin<Box<dyn Future<Output = Result<Response<IdList>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcGroupLinkClient<Channel>>: 'async_trait,

§

fn get_linked<'life0, 'async_trait>( &'life0 self, request: Id ) -> Pin<Box<dyn Future<Output = Result<Response<<GrpcClient<RpcGroupLinkClient<Channel>> as Client<RpcGroupLinkClient<Channel>>>::OtherList>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcGroupLinkClient<Channel>>: 'async_trait,

§

fn is_ready<'life0, 'async_trait>( &'life0 self, request: ReadyRequest ) -> Pin<Box<dyn Future<Output = Result<Response<ReadyResponse>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcGroupLinkClient<Channel>>: 'async_trait,

§

impl Client<RpcGroupLinkClient<Channel>> for GrpcClient<RpcGroupLinkClient<Channel>>

§

type LinkObject = VehicleGroups

§

type OtherList = List

§

fn replace_linked<'life0, 'async_trait>( &'life0 self, request: <GrpcClient<RpcGroupLinkClient<Channel>> as Client<RpcGroupLinkClient<Channel>>>::LinkObject ) -> Pin<Box<dyn Future<Output = Result<Response<()>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcGroupLinkClient<Channel>>: 'async_trait,

§

fn get_linked_ids<'life0, 'async_trait>( &'life0 self, request: Id ) -> Pin<Box<dyn Future<Output = Result<Response<IdList>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcGroupLinkClient<Channel>>: 'async_trait,

§

fn get_linked<'life0, 'async_trait>( &'life0 self, request: Id ) -> Pin<Box<dyn Future<Output = Result<Response<<GrpcClient<RpcGroupLinkClient<Channel>> as Client<RpcGroupLinkClient<Channel>>>::OtherList>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcGroupLinkClient<Channel>>: 'async_trait,

§

fn is_ready<'life0, 'async_trait>( &'life0 self, request: ReadyRequest ) -> Pin<Box<dyn Future<Output = Result<Response<ReadyResponse>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcGroupLinkClient<Channel>>: 'async_trait,

§

impl Client<RpcGroupLinkClient<Channel>> for GrpcClient<RpcGroupLinkClient<Channel>>

§

type LinkObject = VertipadGroups

§

type OtherList = List

§

fn replace_linked<'life0, 'async_trait>( &'life0 self, request: <GrpcClient<RpcGroupLinkClient<Channel>> as Client<RpcGroupLinkClient<Channel>>>::LinkObject ) -> Pin<Box<dyn Future<Output = Result<Response<()>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcGroupLinkClient<Channel>>: 'async_trait,

§

fn get_linked_ids<'life0, 'async_trait>( &'life0 self, request: Id ) -> Pin<Box<dyn Future<Output = Result<Response<IdList>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcGroupLinkClient<Channel>>: 'async_trait,

§

fn get_linked<'life0, 'async_trait>( &'life0 self, request: Id ) -> Pin<Box<dyn Future<Output = Result<Response<<GrpcClient<RpcGroupLinkClient<Channel>> as Client<RpcGroupLinkClient<Channel>>>::OtherList>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcGroupLinkClient<Channel>>: 'async_trait,

§

fn is_ready<'life0, 'async_trait>( &'life0 self, request: ReadyRequest ) -> Pin<Box<dyn Future<Output = Result<Response<ReadyResponse>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcGroupLinkClient<Channel>>: 'async_trait,

§

impl Client<RpcGroupLinkClient<Channel>> for GrpcClient<RpcGroupLinkClient<Channel>>

§

type LinkObject = VertiportGroups

§

type OtherList = List

§

fn replace_linked<'life0, 'async_trait>( &'life0 self, request: <GrpcClient<RpcGroupLinkClient<Channel>> as Client<RpcGroupLinkClient<Channel>>>::LinkObject ) -> Pin<Box<dyn Future<Output = Result<Response<()>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcGroupLinkClient<Channel>>: 'async_trait,

§

fn get_linked_ids<'life0, 'async_trait>( &'life0 self, request: Id ) -> Pin<Box<dyn Future<Output = Result<Response<IdList>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcGroupLinkClient<Channel>>: 'async_trait,

§

fn get_linked<'life0, 'async_trait>( &'life0 self, request: Id ) -> Pin<Box<dyn Future<Output = Result<Response<<GrpcClient<RpcGroupLinkClient<Channel>> as Client<RpcGroupLinkClient<Channel>>>::OtherList>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcGroupLinkClient<Channel>>: 'async_trait,

§

fn is_ready<'life0, 'async_trait>( &'life0 self, request: ReadyRequest ) -> Pin<Box<dyn Future<Output = Result<Response<ReadyResponse>, Status>> + Send + 'async_trait>>
where 'life0: 'async_trait, GrpcClient<RpcGroupLinkClient<Channel>>: 'async_trait,

Implementors§