1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
use anyhow::Result;

use crate::Client;

pub struct AdminsBeta {
    client: Client,
}

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

    /**
     * Get all the admins at a company.
     *
     * This function performs a `GET` to the `/v1/companies/{company_id}/admins` endpoint.
     *
     * This endpoint is in beta and intended for **[Gusto Embedded Payroll](https://gusto.com/embedded-payroll)** customers. Please [apply for early access](https://gusto-embedded-payroll.typeform.com/to/iomAQIj3?utm_source=docs) if you’d like to learn more and use it for production. Note, this endpoint will require you to enter a different agreement with Gusto.
     *
     * Returns a list of all the admins at a company
     */
    pub async fn get_company_admins(&self, company_id: &str) -> Result<Vec<crate::types::Admin>> {
        let url = format!(
            "/v1/companies/{}/admins",
            crate::progenitor_support::encode_path(&company_id.to_string()),
        );

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

    /**
     * Get all the admins at a company.
     *
     * This function performs a `GET` to the `/v1/companies/{company_id}/admins` endpoint.
     *
     * As opposed to `get_company_admins`, this function returns all the pages of the request at once.
     *
     * This endpoint is in beta and intended for **[Gusto Embedded Payroll](https://gusto.com/embedded-payroll)** customers. Please [apply for early access](https://gusto-embedded-payroll.typeform.com/to/iomAQIj3?utm_source=docs) if you’d like to learn more and use it for production. Note, this endpoint will require you to enter a different agreement with Gusto.
     *
     * Returns a list of all the admins at a company
     */
    pub async fn get_all_company_admins(
        &self,
        company_id: &str,
    ) -> Result<Vec<crate::types::Admin>> {
        let url = format!(
            "/v1/companies/{}/admins",
            crate::progenitor_support::encode_path(&company_id.to_string()),
        );

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

    /**
     * Create an admin for the company.
     *
     * This function performs a `POST` to the `/v1/companies/{company_id}/admins` endpoint.
     *
     * This endpoint is in beta and intended for **[Gusto Embedded Payroll](https://gusto.com/embedded-payroll)** customers. Please [apply for early access](https://gusto-embedded-payroll.typeform.com/to/iomAQIj3?utm_source=docs) if you’d like to learn more and use it for production. Note, this endpoint will require you to enter a different agreement with Gusto.
     *
     * Creates a new admin for a company. If the email matches an existing user, this will create an admin account for the current user. Otherwise, this will create a new user.
     */
    pub async fn post_company_admin(
        &self,
        company_id: &str,
        body: &crate::types::PostCompanyAdminRequest,
    ) -> Result<crate::types::Admin> {
        let url = format!(
            "/v1/companies/{}/admins",
            crate::progenitor_support::encode_path(&company_id.to_string()),
        );

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