grafana 0.1.3

Ergonomic Rust SDK for Grafana's HTTP API, with async and blocking clients.
Documentation
use crate::{
    BlockingClient, Result,
    types::{
        AddTeamMemberRequest, CreateTeamRequest, CreateTeamResponse, SuccessResponse, Team, TeamId,
        TeamMember, TeamSearchParams, TeamSearchResult, UpdateTeamMemberRequest, UpdateTeamRequest,
        UserId,
    },
};

#[derive(Clone)]
pub struct BlockingTeamsService {
    client: BlockingClient,
}

impl BlockingTeamsService {
    pub(crate) fn new(client: BlockingClient) -> Self {
        Self { client }
    }

    pub fn search(&self, params: &TeamSearchParams) -> Result<TeamSearchResult> {
        self.client.get_json(&["teams", "search"], Some(params))
    }

    pub fn create(&self, request: &CreateTeamRequest) -> Result<CreateTeamResponse> {
        self.client.post_json(&["teams"], request)
    }

    pub fn get_by_id(&self, team_id: impl Into<TeamId>) -> Result<Team> {
        let team_id: TeamId = team_id.into();
        let team_id_str = team_id.0.to_string();
        let segments = ["teams", team_id_str.as_str()];
        self.client.get_json(&segments, Option::<&()>::None)
    }

    pub fn update(
        &self,
        team_id: impl Into<TeamId>,
        request: &UpdateTeamRequest,
    ) -> Result<SuccessResponse> {
        let team_id: TeamId = team_id.into();
        let team_id_str = team_id.0.to_string();
        let segments = ["teams", team_id_str.as_str()];
        self.client.put_json(&segments, request)
    }

    pub fn delete(&self, team_id: impl Into<TeamId>) -> Result<SuccessResponse> {
        let team_id: TeamId = team_id.into();
        let team_id_str = team_id.0.to_string();
        let segments = ["teams", team_id_str.as_str()];
        self.client.delete_json(&segments)
    }

    pub fn members(&self, team_id: impl Into<TeamId>) -> Result<Vec<TeamMember>> {
        let team_id: TeamId = team_id.into();
        let team_id_str = team_id.0.to_string();
        let segments = ["teams", team_id_str.as_str(), "members"];
        self.client.get_json(&segments, Option::<&()>::None)
    }

    pub fn add_member(
        &self,
        team_id: impl Into<TeamId>,
        user_id: impl Into<UserId>,
    ) -> Result<SuccessResponse> {
        let user_id: UserId = user_id.into();
        let request = AddTeamMemberRequest::new(user_id.0);
        let team_id: TeamId = team_id.into();
        let team_id_str = team_id.0.to_string();
        let segments = ["teams", team_id_str.as_str(), "members"];
        self.client.post_json(&segments, &request)
    }

    pub fn update_member_permission(
        &self,
        team_id: impl Into<TeamId>,
        user_id: impl Into<UserId>,
        request: &UpdateTeamMemberRequest,
    ) -> Result<SuccessResponse> {
        let team_id: TeamId = team_id.into();
        let user_id: UserId = user_id.into();
        let team_id_str = team_id.0.to_string();
        let user_id_str = user_id.0.to_string();
        let segments = [
            "teams",
            team_id_str.as_str(),
            "members",
            user_id_str.as_str(),
        ];
        self.client.put_json(&segments, request)
    }

    pub fn remove_member(
        &self,
        team_id: impl Into<TeamId>,
        user_id: impl Into<UserId>,
    ) -> Result<SuccessResponse> {
        let team_id: TeamId = team_id.into();
        let user_id: UserId = user_id.into();
        let team_id_str = team_id.0.to_string();
        let user_id_str = user_id.0.to_string();
        let segments = [
            "teams",
            team_id_str.as_str(),
            "members",
            user_id_str.as_str(),
        ];
        self.client.delete_json(&segments)
    }
}