spicedb-grpc 0.1.1

Auto-generated Rust gRPC client for SpiceDB
Documentation
# spicedb-grpc

Auto-generated Rust client for the SpiceDB gRPC API.

## Features

- Asynchronous gRPC client for SpiceDB via Tonic
- Generated from the official AuthZed SpiceDB protobuf definitions

## Installation

Add this to your `Cargo.toml`:

```toml
[dependencies]
spicedb-grpc = "0.1.1"
```

## Usage

```rust,ignore
use spicedb_client::authzed::api::v1::permissions_service_client::PermissionsServiceClient;
use spicedb_client::authzed::api::v1::CheckPermissionRequest;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let spicedb_url =
        env::var("SPICEDB_URL").unwrap_or_else(|_| "http://localhost:50051".to_string());

    let preshared_key =
        env::var("SPICEDB_PRESHARED_KEY").unwrap_or_else(|_| "spicedb".to_string());
    let preshared_key: MetadataValue<_> = format!("bearer {preshared_key}").parse().unwrap();

    let channel = Channel::from_shared(spicedb_url)
        .unwrap()
        .connect()
        .await
        .unwrap();

    let interceptor = move |mut req: Request<()>| {
        req.metadata_mut()
            .insert("authorization", preshared_key.clone());
        Ok(req)
    };

    let mut client =
        PermissionsServiceClient::with_interceptor(channel.clone(), interceptor.clone());

    let request = CheckPermissionRequest {
        consistency: None,
        resource: Some(ObjectReference {
            object_type: "document".to_string(),
            object_id: "mydoc".to_string(),
        }),
        permission: "read".to_string(),
        subject: Some(SubjectReference {
            object: Some(ObjectReference {
                object_type: "user".to_string(),
                object_id: "me".to_string(),
            }),
            optional_relation: "".to_string(),
        }),
        context: None,
        with_tracing: false,
    };

    let response = client.check_permission(request).await.unwrap();

    println!("Response: {:?}", response);

    Ok(())
}
```

## Documentation

See the [Buf package documentation](https://buf.build/authzed/api/docs/main:authzed.api.v1) for `buf.build/authzed/api`.

## Developing

First, install buf.

```sh
brew install bufbuild/buf/buf
```

Then download the proto files.

```sh
buf export buf.build/authzed/api -o proto
```

And generate the Rust code from the proto.

```sh
cargo run --features=gen gen
```

If any new files are generated, update `lib.rs` to include them.

## Contributing

We welcome contributions!

## License

This project is licensed under [Apache 2.0](LICENSE).

## Acknowledgements

This client is based on the official [AuthZed SpiceDB API](https://docs.authzed.com) and uses [Tonic](https://github.com/hyperium/tonic) for to generate the gRPC client.