openfga 1.0.2

Rust SDK for OpenFGA — the open-source authorization system
Documentation
/*
 * OpenFGA
 *
 * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar.
 *
 * The version of the OpenAPI document: 1.x
 * Contact: community@openfga.dev
 * Generated by: https://openapi-generator.tech
 */

use super::{Error, configuration, parse_response};
use crate::models;
use serde::{Deserialize, Serialize};

/// struct for typed errors of method [`read`]
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum ReadError {
    Status400(models::ValidationErrorMessageResponse),
    Status401(models::UnauthenticatedResponse),
    Status403(models::ForbiddenResponse),
    Status404(models::PathUnknownErrorMessageResponse),
    Status409(models::AbortedMessageResponse),
    Status422(models::UnprocessableContentMessageResponse),
    Status500(models::InternalErrorMessageResponse),
}

/// struct for typed errors of method [`read_changes`]
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum ReadChangesError {
    Status400(models::ValidationErrorMessageResponse),
    Status401(models::UnauthenticatedResponse),
    Status403(models::ForbiddenResponse),
    Status404(models::PathUnknownErrorMessageResponse),
    Status409(models::AbortedMessageResponse),
    Status422(models::UnprocessableContentMessageResponse),
    Status500(models::InternalErrorMessageResponse),
}

/// struct for typed errors of method [`write`]
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum WriteError {
    Status400(models::ValidationErrorMessageResponse),
    Status401(models::UnauthenticatedResponse),
    Status403(models::ForbiddenResponse),
    Status404(models::PathUnknownErrorMessageResponse),
    Status409(models::AbortedMessageResponse),
    Status422(models::UnprocessableContentMessageResponse),
    Status500(models::InternalErrorMessageResponse),
}

/// The Read API will return the tuples for a certain store that match a query filter specified in the body of the request.
pub async fn read(
    configuration: &configuration::Configuration,
    store_id: &str,
    body: models::ReadRequest,
) -> Result<models::ReadResponse, Error<ReadError>> {
    let uri_str = format!(
        "{}/stores/{store_id}/read",
        configuration.base_path,
        store_id = crate::apis::urlencode(store_id)
    );
    let req_builder = configuration
        .client
        .request(reqwest::Method::POST, &uri_str);
    let req_builder = configuration.apply_to_request(req_builder);
    let req_builder = req_builder.json(&body);
    let resp = req_builder.send().await?;
    parse_response(resp).await
}

/// The ReadChanges API will return a paginated list of tuple changes (additions and deletions) that occurred in a given store, sorted by ascending time.
pub async fn read_changes(
    configuration: &configuration::Configuration,
    store_id: &str,
    r#type: Option<&str>,
    page_size: Option<i32>,
    continuation_token: Option<&str>,
    start_time: Option<chrono::DateTime<chrono::FixedOffset>>,
) -> Result<models::ReadChangesResponse, Error<ReadChangesError>> {
    let uri_str = format!(
        "{}/stores/{store_id}/changes",
        configuration.base_path,
        store_id = crate::apis::urlencode(store_id)
    );
    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
    if let Some(param_value) = r#type {
        req_builder = req_builder.query(&[("type", param_value)]);
    }
    if let Some(param_value) = page_size {
        req_builder = req_builder.query(&[("page_size", param_value.to_string())]);
    }
    if let Some(param_value) = continuation_token {
        req_builder = req_builder.query(&[("continuation_token", param_value)]);
    }
    if let Some(ref param_value) = start_time {
        req_builder = req_builder.query(&[("start_time", &param_value.to_rfc3339())]);
    }
    let req_builder = configuration.apply_to_request(req_builder);
    let resp = req_builder.send().await?;
    parse_response(resp).await
}

/// The Write API will transactionally update the tuples for a certain store.
pub async fn write(
    configuration: &configuration::Configuration,
    store_id: &str,
    body: models::WriteRequest,
) -> Result<models::WriteResponse, Error<WriteError>> {
    let uri_str = format!(
        "{}/stores/{store_id}/write",
        configuration.base_path,
        store_id = crate::apis::urlencode(store_id)
    );
    let req_builder = configuration
        .client
        .request(reqwest::Method::POST, &uri_str);
    let req_builder = configuration.apply_to_request(req_builder);
    let req_builder = req_builder.json(&body);
    let resp = req_builder.send().await?;
    parse_response(resp).await
}