rowrap 0.0.0

A wrapper for the Roblox API.
Documentation
use anyhow::Error;
use crate::{
    Client,
    utils::{
        HttpsRequest,
        HttpProtocol,
        HttpMethod,
        http_request,
        Session,
        format_query_param,
        merge_qry_to_qry_prms,
    },
    data_models::{
        GroupAuditLogAction,
        SortOrder,
        Limit,
        AuditPage
    },
};

pub struct GetAuditLog<'a> {
    session: &'a Session,
    group_id: u64,
    query_params: Vec<String>,
}

impl <'a>GetAuditLog<'a> {
    pub fn new(session: &'a Session, group_id: u64) -> GetAuditLog<'a> {
        GetAuditLog {
            session,
            group_id,
            query_params: Vec::new(),
        }
    }

    pub fn action_type(&'a mut self, action_type: GroupAuditLogAction) -> &'a mut GetAuditLog {
        self.query_params.push(format_query_param(("actionType", action_type.to_string())));
        self
    }

    pub fn user_id(&'a mut self, user_id: u64) -> &'a mut GetAuditLog {
        self.query_params.push(format_query_param(("userId", user_id.to_string())));
        self
    }

    pub fn sort_order(&'a mut self, sort_order: SortOrder) -> &'a mut GetAuditLog {
        self.query_params.push(format_query_param(("sortOrder", sort_order.to_string())));
        self
    }

    pub fn limit(&'a mut self, limit: Limit) -> &'a mut GetAuditLog {
        self.query_params.push(format_query_param(("limit", limit.to_string())));
        self
    }

    pub fn cursor(&'a mut self, cursor: String) -> &'a mut GetAuditLog {
        self.query_params.push(format_query_param(("cursor", cursor)));
        self
    }

    pub async fn send(&self) -> Result<AuditPage, Error> {
        let query = format!("//groups.roblox.com/v1/groups/{}/audit-log?", self.group_id);

        let response = http_request(HttpsRequest {
            method: HttpMethod::Get,
            protocol: HttpProtocol::Https,
            url: merge_qry_to_qry_prms(query, &self.query_params),
            session: Some(self.session),
        }).await?;

        Ok(response.json::<AuditPage>().await?)
    }
}

impl Client {
    pub fn get_audit_log(&self, group_id: u64) -> GetAuditLog {
        GetAuditLog::new(self.get_session(), group_id)
    }
}