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 [`action_search`]
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum ActionSearchError {
    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 [`evaluation`]
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum EvaluationError {
    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 [`evaluations`]
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum EvaluationsError {
    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 [`get_configuration`]
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum GetConfigurationError {
    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 [`resource_search`]
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum ResourceSearchError {
    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 [`subject_search`]
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum SubjectSearchError {
    Status400(models::ValidationErrorMessageResponse),
    Status401(models::UnauthenticatedResponse),
    Status403(models::ForbiddenResponse),
    Status404(models::PathUnknownErrorMessageResponse),
    Status409(models::AbortedMessageResponse),
    Status422(models::UnprocessableContentMessageResponse),
    Status500(models::InternalErrorMessageResponse),
}

/// [Experimental] The ActionSearch API returns all actions (relations) that a subject can perform on a specific resource.
pub async fn action_search(
    configuration: &configuration::Configuration,
    store_id: &str,
    body: models::ActionSearchRequest,
) -> Result<models::ActionSearchResponse, Error<ActionSearchError>> {
    let uri_str = format!(
        "{}/stores/{store_id}/access/v1/search/action",
        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
}

/// [Experimental] The Evaluation API determines whether a subject is authorized to perform an action on a resource.
pub async fn evaluation(
    configuration: &configuration::Configuration,
    store_id: &str,
    body: models::EvaluationRequest,
) -> Result<models::EvaluationResponse, Error<EvaluationError>> {
    let uri_str = format!(
        "{}/stores/{store_id}/access/v1/evaluation",
        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
}

/// [Experimental] The Evaluations API allows batch authorization checks in a single request.
pub async fn evaluations(
    configuration: &configuration::Configuration,
    store_id: &str,
    body: models::EvaluationsRequest,
) -> Result<models::EvaluationsResponse, Error<EvaluationsError>> {
    let uri_str = format!(
        "{}/stores/{store_id}/access/v1/evaluations",
        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
}

/// [Experimental] The GetConfiguration API returns metadata about the Policy Decision Point (PDP).
pub async fn get_configuration(
    configuration: &configuration::Configuration,
    store_id: &str,
) -> Result<models::GetConfigurationResponse, Error<GetConfigurationError>> {
    let uri_str = format!(
        "{}/.well-known/authzen-configuration/{store_id}",
        configuration.base_path,
        store_id = crate::apis::urlencode(store_id)
    );
    let req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
    let req_builder = configuration.apply_to_request(req_builder);
    let resp = req_builder.send().await?;
    parse_response(resp).await
}

/// [Experimental] The ResourceSearch API returns all resources of a given type that a subject has a specific action (relation) on.
pub async fn resource_search(
    configuration: &configuration::Configuration,
    store_id: &str,
    body: models::ResourceSearchRequest,
) -> Result<models::ResourceSearchResponse, Error<ResourceSearchError>> {
    let uri_str = format!(
        "{}/stores/{store_id}/access/v1/search/resource",
        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
}

/// [Experimental] The SubjectSearch API returns all subjects that have a specific action (relation) on a given resource.
pub async fn subject_search(
    configuration: &configuration::Configuration,
    store_id: &str,
    body: models::SubjectSearchRequest,
) -> Result<models::SubjectSearchResponse, Error<SubjectSearchError>> {
    let uri_str = format!(
        "{}/stores/{store_id}/access/v1/search/subject",
        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
}