zoom-api 0.3.1

A fully generated & opinionated API client for the Zoom API.
Documentation
use anyhow::Result;

use crate::Client;

pub struct ImGroups {
    pub client: Client,
}

impl ImGroups {
    #[doc(hidden)]
    pub fn new(client: Client) -> Self {
        ImGroups { client }
    }

    /**
     * List IM directory groups.
     *
     * This function performs a `GET` to the `/im/groups` endpoint.
     *
     * List [IM directory groups](https://support.zoom.us/hc/en-us/articles/203749815-IM-Management).<br><br>
     * **Scopes**: `imgroup:read:admin`<br>
     *  
     *  **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Medium`
     */
    pub async fn get(&self) -> Result<crate::types::Domains> {
        let url = "/im/groups".to_string();
        self.client.get(&url, None).await
    }

    /**
     * Create an IM directory group.
     *
     * This function performs a `POST` to the `/im/groups` endpoint.
     *
     * Create an [IM directory group](https://support.zoom.us/hc/en-us/articles/203749815-IM-Management) under your account.<br><br>
     * **Scopes**: `imgroup:write:admin`<br>
     *  
     *  **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Light`
     */
    pub async fn create(&self, body: &crate::types::ImGroupCreateRequest) -> Result<()> {
        let url = "/im/groups".to_string();
        self.client
            .post(&url, Some(reqwest::Body::from(serde_json::to_vec(body)?)))
            .await
    }

    /**
     * Retrieve an IM directory group.
     *
     * This function performs a `GET` to the `/im/groups/{groupId}` endpoint.
     *
     * Retrieve an [IM directory group](https://support.zoom.us/hc/en-us/articles/203749815-IM-Management) under your account.<br><br>
     * Scopes: `imgroup:read:admin`<br>
     *
     *  **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Light`
     *
     * **Parameters:**
     *
     * * `group_id: &str` -- The group ID.<br>
     *   Can be retrieved by calling [GET /groups](https://marketplace.zoom.us/docs/api-reference/zoom-api/groups/groups).
     */
    pub async fn im_group(&self, group_id: &str) -> Result<crate::types::ImGroupResponseAllOf> {
        let url = format!(
            "/im/groups/{}",
            crate::progenitor_support::encode_path(group_id),
        );

        self.client.get(&url, None).await
    }

    /**
     * Delete an IM directory group.
     *
     * This function performs a `DELETE` to the `/im/groups/{groupId}` endpoint.
     *
     * Delete an [IM directory group](https://support.zoom.us/hc/en-us/articles/203749815-IM-Management) under your account.<br><br>
     * Scopes: `imgroup:write:admin`<br>
     *  
     *  **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Light`
     *
     * **Parameters:**
     *
     * * `group_id: &str` -- The group ID.<br>
     *   Can be retrieved by calling [GET /groups](https://marketplace.zoom.us/docs/api-reference/zoom-api/groups/groups).
     */
    pub async fn delete(&self, group_id: &str) -> Result<()> {
        let url = format!(
            "/im/groups/{}",
            crate::progenitor_support::encode_path(group_id),
        );

        self.client.delete(&url, None).await
    }

    /**
     * Update an IM directory group.
     *
     * This function performs a `PATCH` to the `/im/groups/{groupId}` endpoint.
     *
     * Update an [IM directory group](https://support.zoom.us/hc/en-us/articles/203749815-IM-Management) under your account.<br><br>
     * **Scopes**: `imgroup:write:admin`<br>
     *
     *  **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Light`
     *
     * **Parameters:**
     *
     * * `group_id: &str` -- The group ID.<br>
     *   Can be retrieved by calling [GET /groups](https://marketplace.zoom.us/docs/api-reference/zoom-api/groups/groups).
     */
    pub async fn update(
        &self,
        group_id: &str,
        body: &crate::types::ImGroupCreateRequest,
    ) -> Result<()> {
        let url = format!(
            "/im/groups/{}",
            crate::progenitor_support::encode_path(group_id),
        );

        self.client
            .patch(&url, Some(reqwest::Body::from(serde_json::to_vec(body)?)))
            .await
    }

    /**
     * List IM directory group members.
     *
     * This function performs a `GET` to the `/im/groups/{groupId}/members` endpoint.
     *
     * List the members of an [IM directory group](https://support.zoom.us/hc/en-us/articles/203749815-IM-Management).<br><br>
     * **Scope:** `imgroup:read:admin`<br>
     *
     *  **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Medium`
     *
     * **Parameters:**
     *
     * * `group_id: &str` -- The group ID.<br>
     *   Can be retrieved by calling [GET /groups](https://marketplace.zoom.us/docs/api-reference/zoom-api/groups/groups).
     * * `page_size: i64` -- The number of records returned within a single API call.
     * * `page_number: i64` --
     *   **Deprecated** - This field has been deprecated and we will stop supporting it completely in a future release. Please use "next_page_token" for pagination instead of this field.
     *   
     *   The page number of the current page in the returned records.
     * * `next_page_token: &str` -- The next page token is used to paginate through large result sets. A next page token will be returned whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes.
     */
    pub async fn member(
        &self,
        group_id: &str,
        page_size: i64,
        page_number: i64,
        next_page_token: &str,
    ) -> Result<crate::types::Domains> {
        let mut query_args: Vec<(String, String)> = Default::default();
        if !next_page_token.is_empty() {
            query_args.push(("next_page_token".to_string(), next_page_token.to_string()));
        }
        if page_number > 0 {
            query_args.push(("page_number".to_string(), page_number.to_string()));
        }
        if page_size > 0 {
            query_args.push(("page_size".to_string(), page_size.to_string()));
        }
        let query_ = serde_urlencoded::to_string(&query_args).unwrap();
        let url = format!(
            "/im/groups/{}/members?{}",
            crate::progenitor_support::encode_path(group_id),
            query_
        );

        self.client.get(&url, None).await
    }

    /**
     * Add IM directory group members.
     *
     * This function performs a `POST` to the `/im/groups/{groupId}/members` endpoint.
     *
     * Add members to an [IM directory group](https://support.zoom.us/hc/en-us/articles/203749815-IM-Management) under an account.<br><br>
     * **Scope:** `imgroup:write:admin`<br>
     *
     *  **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Medium`
     *
     * **Parameters:**
     *
     * * `group_id: &str` -- The group ID.<br>
     *   Can be retrieved by calling [GET /groups](https://marketplace.zoom.us/docs/api-reference/zoom-api/groups/groups).
     */
    pub async fn members_create(
        &self,
        group_id: &str,
        body: &crate::types::AddRoleMembersRequest,
    ) -> Result<()> {
        let url = format!(
            "/im/groups/{}/members",
            crate::progenitor_support::encode_path(group_id),
        );

        self.client
            .post(&url, Some(reqwest::Body::from(serde_json::to_vec(body)?)))
            .await
    }

    /**
     * Delete IM directory group member.
     *
     * This function performs a `DELETE` to the `/im/groups/{groupId}/members/{memberId}` endpoint.
     *
     * Delete a member from an [IM directory group](https://support.zoom.us/hc/en-us/articles/203749815-IM-Management) under an account.<br><br>
     * Scopes: `imgroup:write:admin`<br>
     *  
     *  **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Light`
     *
     * **Parameters:**
     *
     * * `group_id: &str` -- The group ID.<br>
     *   Can be retrieved by calling [GET /groups](https://marketplace.zoom.us/docs/api-reference/zoom-api/groups/groups).
     * * `member_id: &str` -- User's first name.
     */
    pub async fn members_delete(&self, group_id: &str, member_id: &str) -> Result<()> {
        let url = format!(
            "/im/groups/{}/members/{}",
            crate::progenitor_support::encode_path(group_id),
            crate::progenitor_support::encode_path(member_id),
        );

        self.client.delete(&url, None).await
    }
}