ghl-sdk 0.5.0

Unofficial async Rust SDK for the GoHighLevel (HighLevel) API 2.0 — OAuth 2.0, Private Integration Tokens, rate-limit-aware retries, paginated streams
Documentation
// @generated by xtask/generate_services.py — do not edit by hand.
//! `brand-boards` — typed methods for all 5 API v2 operations
//! in this module.
//!
//! Access via [`Ghl::brand_boards`](crate::Ghl::brand_boards).
//!
//! Request and response types come from [`ghl_models::v2::brand_boards`](https://docs.rs/ghl-models/latest/ghl_models/v2/brand_boards/); every endpoint is also documented in the
//! [`brand-boards` API reference](https://github.com/Shahroz/ghl-rs/blob/main/docs/api/brand-boards.md).
//!
//! Enable with `features = ["brand-boards"]`.

#![allow(clippy::too_many_arguments)]

use crate::client::Ghl;
use crate::error::Result;
use ghl_models::v2::brand_boards as models;

/// Typed access to the `brand-boards` API v2 surface (5 operations). Obtained via
/// [`Ghl::brand_boards`](crate::Ghl::brand_boards).
#[derive(Debug, Clone)]
pub struct BrandBoardsService {
    pub(crate) client: Ghl,
}

impl BrandBoardsService {
    pub(crate) fn new(client: Ghl) -> Self {
        Self { client }
    }
}

/// Query parameters for [`BrandBoardsService::get_brand_boards`].
#[derive(Debug, Clone, Default)]
pub struct GetBrandBoardsParams {
    /// Maximum number of brand boards to return
    pub limit: Option<f64>,
    /// Number of brand boards to skip for pagination
    pub offset: Option<f64>,
    /// Search term to filter brand boards by name
    pub search: Option<String>,
    /// Include deleted brand boards in results
    pub deleted: Option<bool>,
}

impl GetBrandBoardsParams {
    /// Start from the parameters the API requires.
    pub fn new() -> Self {
        Self {
            ..Default::default()
        }
    }

    /// Maximum number of brand boards to return
    pub fn limit(mut self, v: f64) -> Self {
        self.limit = Some(v);
        self
    }

    /// Number of brand boards to skip for pagination
    pub fn offset(mut self, v: f64) -> Self {
        self.offset = Some(v);
        self
    }

    /// Search term to filter brand boards by name
    pub fn search(mut self, v: impl Into<String>) -> Self {
        self.search = Some(v.into());
        self
    }

    /// Include deleted brand boards in results
    pub fn deleted(mut self, v: bool) -> Self {
        self.deleted = Some(v);
        self
    }

    fn to_query(&self) -> Vec<(String, String)> {
        let mut q: Vec<(String, String)> = Vec::new();
        if let Some(v) = &self.limit {
            q.push(("limit".into(), v.to_string()));
        }
        if let Some(v) = &self.offset {
            q.push(("offset".into(), v.to_string()));
        }
        if let Some(v) = &self.search {
            q.push(("search".into(), v.to_string()));
        }
        if let Some(v) = &self.deleted {
            q.push(("deleted".into(), v.to_string()));
        }
        q
    }
}

impl BrandBoardsService {
    /// Create a new brand board
    ///
    /// Creates a new brand board with logos, colors, and fonts
    ///
    /// `POST /brand-boards/`
    ///
    /// Requires scope: `brand-boards/design-kit.write`.
    pub async fn create_a_new_brand_board(
        &self,
        body: &models::CreateBrandBoardParam,
    ) -> Result<models::GetBrandBoardSuccessDTO> {
        let query = Vec::new();
        self.client
            .send_versioned(
                reqwest::Method::POST,
                "/brand-boards/",
                &query,
                Some(body),
                Some("2021-07-28"),
            )
            .await
    }

    /// Get Brand Boards
    ///
    /// Retrieves all Brand Boards for a specific location
    ///
    /// `GET /brand-boards/{locationId}`
    ///
    /// Requires scope: `brand-boards/design-kit.readonly`.
    pub async fn get_brand_boards(
        &self,
        location_id: &str,
        params: &GetBrandBoardsParams,
    ) -> Result<models::GetBrandBoardsByLocationSuccessDTO> {
        let path = format!("/brand-boards/{}", crate::services::encode(location_id));
        let query = params.to_query();
        self.client
            .send_versioned(
                reqwest::Method::GET,
                &path,
                &query,
                None::<&()>,
                Some("2021-07-28"),
            )
            .await
    }

    /// Delete a Brand Board
    ///
    /// Deletes a Brand Board
    ///
    /// `DELETE /brand-boards/{locationId}/{id}`
    ///
    /// Requires scope: `brand-boards/design-kit.write`.
    pub async fn delete_a_brand_board(
        &self,
        location_id: &str,
        id: &str,
    ) -> Result<models::GetBrandBoardSuccessDTO> {
        let path = format!(
            "/brand-boards/{}/{}",
            crate::services::encode(location_id),
            crate::services::encode(id)
        );
        let query = Vec::new();
        self.client
            .send_versioned(
                reqwest::Method::DELETE,
                &path,
                &query,
                None::<&()>,
                Some("2021-07-28"),
            )
            .await
    }

    /// Get Brand Board
    ///
    /// Retrieves a specific Brand Board by its ID
    ///
    /// `GET /brand-boards/{locationId}/{id}`
    ///
    /// Requires scope: `brand-boards/design-kit.readonly`.
    pub async fn get_brand_board(
        &self,
        location_id: &str,
        id: &str,
    ) -> Result<models::GetBrandBoardSuccessDTO> {
        let path = format!(
            "/brand-boards/{}/{}",
            crate::services::encode(location_id),
            crate::services::encode(id)
        );
        let query = Vec::new();
        self.client
            .send_versioned(
                reqwest::Method::GET,
                &path,
                &query,
                None::<&()>,
                Some("2021-07-28"),
            )
            .await
    }

    /// Update a Brand Board
    ///
    /// Updates an existing Brand Board
    ///
    /// `PATCH /brand-boards/{locationId}/{id}`
    ///
    /// Requires scope: `brand-boards/design-kit.write`.
    pub async fn update_a_brand_board(
        &self,
        location_id: &str,
        id: &str,
        body: &models::UpdateBrandBoardBody,
    ) -> Result<models::GetBrandBoardSuccessDTO> {
        let path = format!(
            "/brand-boards/{}/{}",
            crate::services::encode(location_id),
            crate::services::encode(id)
        );
        let query = Vec::new();
        self.client
            .send_versioned(
                reqwest::Method::PATCH,
                &path,
                &query,
                Some(body),
                Some("2021-07-28"),
            )
            .await
    }
}