uarp-sdk 0.5.7

Async Rust client for the UARP (Snaga) Universal Agent Runtime Platform API
Documentation
// Code generated by @uarp/codegen from spec/openapi.json. DO NOT EDIT.
//!
//! User management, invites, roles

#![allow(unused_imports, clippy::too_many_arguments)]

use reqwest::Method;
use serde::{Deserialize, Serialize};

use crate::client::{Client, Request, NO_BODY, NO_QUERY};
use crate::error::Result;
use crate::generated::models;
use crate::multipart::{field_text, FilePart};
use crate::util::encode_path;

/// User management, invites, roles
#[derive(Debug, Clone)]
pub struct UsersApi {
    pub(crate) client: Client,
}

impl Client {
    /// User management, invites, roles
    pub fn users(&self) -> UsersApi {
        UsersApi { client: self.clone() }
    }
}

impl UsersApi {
    /// Delete user
    ///
    /// `DELETE /api/v1/users/{userId}`
    ///
    /// Required scopes: `users:write`.
    pub async fn delete(&self, user_id: &str) -> Result<models::DeleteUserResponse> {
        self.client
            .request_json(Request {
                method: Method::DELETE,
                path: format!("/api/v1/users/{}", encode_path(user_id)),
                query: NO_QUERY,
                body: NO_BODY,
                headers: Vec::new(),
                idempotent: true,
            })
            .await
    }

    /// Revoke a pending user invite
    ///
    /// `DELETE /api/v1/users/invites/{inviteId}`
    ///
    /// Required scopes: `users:write`.
    pub async fn delete_invite(&self, invite_id: &str) -> Result<()> {
        self.client
            .request_empty(Request {
                method: Method::DELETE,
                path: format!("/api/v1/users/invites/{}", encode_path(invite_id)),
                query: NO_QUERY,
                body: NO_BODY,
                headers: Vec::new(),
                idempotent: true,
            })
            .await
    }

    /// Get user
    ///
    /// `GET /api/v1/users/{userId}`
    ///
    /// Required scopes: `users:read`.
    pub async fn get(&self, user_id: &str) -> Result<serde_json::Map<String, serde_json::Value>> {
        self.client
            .request_json(Request {
                method: Method::GET,
                path: format!("/api/v1/users/{}", encode_path(user_id)),
                query: NO_QUERY,
                body: NO_BODY,
                headers: Vec::new(),
                idempotent: false,
            })
            .await
    }

    /// Invite user
    ///
    /// `POST /api/v1/users/invites`
    ///
    /// Required scopes: `users:write`.
    pub async fn invite_user(&self, body: &models::InviteUserRequest) -> Result<serde_json::Map<String, serde_json::Value>> {
        self.client
            .request_json(Request {
                method: Method::POST,
                path: "/api/v1/users/invites".to_string(),
                query: NO_QUERY,
                body: Some(body),
                headers: Vec::new(),
                idempotent: true,
            })
            .await
    }

    /// List users
    ///
    /// `GET /api/v1/users`
    ///
    /// Required scopes: `users:read`.
    pub async fn list(&self) -> Result<models::ListUsersResponse> {
        self.client
            .request_json(Request {
                method: Method::GET,
                path: "/api/v1/users".to_string(),
                query: NO_QUERY,
                body: NO_BODY,
                headers: Vec::new(),
                idempotent: false,
            })
            .await
    }

    /// List invites
    ///
    /// `GET /api/v1/users/invites`
    ///
    /// Required scopes: `users:read`.
    pub async fn list_invites(&self) -> Result<models::ListInvitesResponse> {
        self.client
            .request_json(Request {
                method: Method::GET,
                path: "/api/v1/users/invites".to_string(),
                query: NO_QUERY,
                body: NO_BODY,
                headers: Vec::new(),
                idempotent: false,
            })
            .await
    }

    /// Resend the invite email
    ///
    /// `POST /api/v1/users/invites/{inviteId}/resend`
    ///
    /// Required scopes: `users:write`.
    pub async fn resend_invite(&self, invite_id: &str) -> Result<models::ResendInviteResponse> {
        self.client
            .request_json(Request {
                method: Method::POST,
                path: format!("/api/v1/users/invites/{}/resend", encode_path(invite_id)),
                query: NO_QUERY,
                body: NO_BODY,
                headers: Vec::new(),
                idempotent: true,
            })
            .await
    }

    /// Set user role
    ///
    /// `PUT /api/v1/users/{userId}/role`
    ///
    /// Required scopes: `users:write`.
    pub async fn set_user_role(&self, user_id: &str, body: &models::SetUserRoleRequest) -> Result<models::SetUserRoleResponse> {
        self.client
            .request_json(Request {
                method: Method::PUT,
                path: format!("/api/v1/users/{}/role", encode_path(user_id)),
                query: NO_QUERY,
                body: Some(body),
                headers: Vec::new(),
                idempotent: true,
            })
            .await
    }

    /// Suspend user
    ///
    /// `PUT /api/v1/users/{userId}/suspend`
    ///
    /// Required scopes: `users:write`.
    pub async fn suspend_user(&self, user_id: &str) -> Result<models::SuspendUserResponse> {
        self.client
            .request_json(Request {
                method: Method::PUT,
                path: format!("/api/v1/users/{}/suspend", encode_path(user_id)),
                query: NO_QUERY,
                body: NO_BODY,
                headers: Vec::new(),
                idempotent: true,
            })
            .await
    }

    /// Transfer tenant ownership to this user
    ///
    /// Demotes the calling owner to admin and promotes the target user to owner. Irreversible
    /// without a counter-transfer.
    ///
    /// `POST /api/v1/users/{userId}/transfer-ownership`
    ///
    /// Required scopes: `users:write`.
    pub async fn transfer_tenant_ownership(&self, user_id: &str) -> Result<models::TransferTenantOwnershipResponse> {
        self.client
            .request_json(Request {
                method: Method::POST,
                path: format!("/api/v1/users/{}/transfer-ownership", encode_path(user_id)),
                query: NO_QUERY,
                body: NO_BODY,
                headers: Vec::new(),
                idempotent: true,
            })
            .await
    }

    /// Reverse a suspension and restore the user
    ///
    /// `PUT /api/v1/users/{userId}/unsuspend`
    ///
    /// Required scopes: `users:write`.
    pub async fn unsuspend_user(&self, user_id: &str) -> Result<models::UnsuspendUserResponse> {
        self.client
            .request_json(Request {
                method: Method::PUT,
                path: format!("/api/v1/users/{}/unsuspend", encode_path(user_id)),
                query: NO_QUERY,
                body: NO_BODY,
                headers: Vec::new(),
                idempotent: true,
            })
            .await
    }
}