rsgmo 0.2.2

GMOコインのRust用APIライブラリ.
Documentation
use std::fmt;
use reqwest::header::HeaderMap;
use serde::{Serialize, de::DeserializeOwned};
use anyhow::Result;
use futures::Future;

use crate::auth::Auth;

#[derive(Debug, Clone, Copy)]
pub enum RequestMethod {
    GET,
    POST,
    PUT,
    DELETE,
}

impl fmt::Display for RequestMethod {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        match *self {
            RequestMethod::GET => write!(f, "GET"),
            RequestMethod::POST => write!(f, "POST"),
            RequestMethod::PUT => write!(f, "PUT"),
            RequestMethod::DELETE => write!(f, "DELETE"),
        }
    }
}

pub trait Request: Auth {
    fn build_headers<T: Serialize>(&self, timestamp: u64, method: RequestMethod, path: &str, parameters: Option<T>) -> Result<HeaderMap>;
    fn send_request<T: Serialize + Clone>(&self, method: RequestMethod, path: &str, parameters: Option<T>, access_level: AccessLevel) -> impl Future<Output = Result<String>>;
    fn deserialize_response<P: DeserializeOwned>(&self, body: &str) -> Result<P>;
}

#[derive(Debug, Clone)]
pub enum AccessLevel {
    Public,
    Private,
}

impl fmt::Display for AccessLevel {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        match *self {
            AccessLevel::Public => write!(f, "/public"),
            AccessLevel::Private => write!(f, "/private"),
        }
    }
}