zera-sdk 0.1.0

Rust SDK for ZERA transactions, validator APIs, and bridge workflows
Documentation
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)
}