use zera_proto::zera_guardian::{
PayloadRequest, PayloadResponse, SearchPayloadRequest, SearchPayloadResponse,
};
use crate::error::Result;
use crate::grpc::paths;
use crate::grpc::transport::{unary, GrpcWebTransport, UnaryTransport};
use crate::types::RpcConfig;
#[derive(Clone)]
pub struct GuardianClient<T = GrpcWebTransport> {
transport: T,
}
impl GuardianClient<GrpcWebTransport> {
pub fn new(config: RpcConfig) -> Result<Self> {
Ok(Self {
transport: GrpcWebTransport::new(config)?,
})
}
}
impl<T> GuardianClient<T>
where
T: UnaryTransport,
{
pub fn with_transport(transport: T) -> Self {
Self { transport }
}
pub fn transport(&self) -> &T {
&self.transport
}
pub async fn get_payload_request(&self, request: &PayloadRequest) -> Result<PayloadResponse> {
unary(
&self.transport,
&paths::guardian_path("GetPayload"),
request,
)
.await
}
pub async fn search_payload_request(
&self,
request: &SearchPayloadRequest,
) -> Result<SearchPayloadResponse> {
unary(
&self.transport,
&paths::guardian_path("SearchPayload"),
request,
)
.await
}
}
pub fn create_guardian_client(config: RpcConfig) -> Result<GuardianClient<GrpcWebTransport>> {
GuardianClient::new(config)
}