csgoempire 0.1.0

CSGOEmpire REST-API and Socket Bindings
Documentation
use crate::{
    api::{get_base_request, request::CSGOEmpireApiRequest, CSGOEmpireApi},
    models::{
        structs::api::{
            request::withdraw::create::CreateWithdrawalRequest,
            response::withdraw::create::CreateWithdrawalResponse,
        },
        traits::endpoint::CSGOEmpireEndpoint,
    },
};
use reqwest::Method;
use std::collections::HashMap;

pub struct CreateWithdrawalEndpoint(
    HashMap<&'static str, String>,
    HashMap<&'static str, String>,
    CreateWithdrawalRequest,
);

impl CSGOEmpireEndpoint for CreateWithdrawalEndpoint {
    type Response = CreateWithdrawalResponse;

    const URL: &'static str = "/trading/deposit/{deposit_id}/withdraw";
    const METHOD: Method = Method::POST;

    fn headers_mut(&mut self) -> &mut HashMap<&'static str, String> {
        &mut self.0
    }

    fn shims_mut(&mut self) -> Option<&mut HashMap<&'static str, String>> {
        Some(&mut self.1)
    }
}

impl CreateWithdrawalEndpoint {
    pub fn new(api_key: &'static str, deposit_id: i64, coin_value: i64) -> Self {
        let mut shims = HashMap::new();

        shims.insert("{deposit_id}", deposit_id.to_string());

        Self(
            get_base_request(api_key),
            shims,
            CreateWithdrawalRequest { coin_value },
        )
    }

    pub fn deposit_id(mut self, deposit_id: i64) -> Self {
        self.1.insert("{deposit_id}", deposit_id.to_string());
        self
    }
}

impl From<CreateWithdrawalEndpoint> for HashMap<&'static str, String> {
    fn from(endpoint: CreateWithdrawalEndpoint) -> Self {
        endpoint.0
    }
}

impl From<CreateWithdrawalEndpoint> for CSGOEmpireApiRequest<CreateWithdrawalEndpoint> {
    fn from(endpoint: CreateWithdrawalEndpoint) -> Self {
        let deposit_id = endpoint
            .1
            .get("{deposit_id}")
            .unwrap_or(&"".to_string())
            .clone();
        let body = serde_json::to_string(&endpoint.2).unwrap_or_default();
        Self::new(endpoint)
            .shim("{deposit_id}", deposit_id)
            .body(body)
    }
}

impl CSGOEmpireApi {
    pub fn create_withdrawal(
        api_key: &'static str,
        deposit_id: i64,
        coin_value: i64,
    ) -> CSGOEmpireApiRequest<CreateWithdrawalEndpoint> {
        CreateWithdrawalEndpoint::new(api_key, deposit_id, coin_value).into()
    }
}