spicedb-rust 0.3.4

A client for spicedb
Documentation
use tokio_stream::{Stream, StreamExt};

use crate::grpc::GrpcResult;
use crate::permission::SpiceDBPermissionClient;
use crate::spicedb;
use crate::spicedb::wrappers::{Consistency, ReadRelationshipsResponse};

#[derive(Clone, Debug)]
pub struct ReadRelationshipsRequest {
    client: SpiceDBPermissionClient,
    request: spicedb::ReadRelationshipsRequest,
}

impl ReadRelationshipsRequest {
    pub fn new(client: SpiceDBPermissionClient) -> Self {
        let request = spicedb::ReadRelationshipsRequest {
            ..Default::default()
        };
        ReadRelationshipsRequest { client, request }
    }

    pub fn with_limit(&mut self, limit: u32) -> &mut Self {
        self.request.optional_limit = limit;
        self
    }

    pub fn with_cursor(&mut self, cursor: spicedb::Cursor) -> &mut Self {
        self.request.optional_cursor = Some(cursor);
        self
    }

    pub fn with_relationship_filter(&mut self, filter: spicedb::RelationshipFilter) -> &mut Self {
        self.request.relationship_filter = Some(filter);
        self
    }

    pub fn with_consistency(&mut self, consistency: Consistency) -> &mut Self {
        self.request.consistency = Some(consistency.into());
        self
    }

    pub async fn send(
        mut self,
    ) -> GrpcResult<impl Stream<Item = GrpcResult<ReadRelationshipsResponse>>> {
        let resp = self
            .client
            .read_relationships(self.request)
            .await?
            .into_inner();
        Ok(resp.map(|r| r.map(Into::into)))
    }
}