api_kit 0.1.0

Rust library for build typesafe web api client.
Documentation

api_kit

Rust library for build typesafe web api client.

Sample Usage

extern crate api_kit;
extern crate hyper;
extern crate serde_json; 

use hyper::client::response::Response;
use api_kit::api_request::ApiRequest;
use api_kit::api_request::HttpMethod;
use api_kit::api_client::ApiClient;
use api_kit::error::ApiError;
use hyper::header::{Headers, Accept, qitem};
use hyper::mime::{Mime, TopLevel, SubLevel, Attr, Value};
use hyper::client::request::Request;
use hyper::net::Fresh;
use std::io::{Read};

struct CircleCi {
}

impl ApiClient for CircleCi {
    fn base_url(&self) -> &str {
        return "https://circleci.com/api/v1.1";
    }
}

struct CircleCiMeRequest<'a> {
    api_token: &'a str
}

impl<'a> CircleCiMeRequest<'a> {
    fn new(token: &'a str) -> CircleCiMeRequest {
        CircleCiMeRequest {
            api_token: token
        }
    }
}

impl<'a> ApiRequest<serde_json::Value> for CircleCiMeRequest<'a> {
    
    fn method(&self) -> HttpMethod {
        return HttpMethod::Get;
    }
    
    fn path(&self) -> &str {
        return "/me";
    }
    
    fn queryParameters(&self) -> Vec<(&str, &str)> {
        return vec![
            ("circle-token", self.api_token)
        ];
    }
    
    fn interceptRequest(&self, mut request: Request<Fresh>) -> Result<Request<Fresh>, ApiError> {
        request.headers_mut().set(
                    Accept(vec![
                        qitem(Mime(TopLevel::Application, SubLevel::Json,
                                   vec![(Attr::Charset, Value::Utf8)])),
                    ])
                );
        return Ok(request);
    }
    
    fn responseFromObject(&self, response: &mut Response) -> Result<serde_json::Value, ApiError> {
        let mut buffer = String::new();
        response.read_to_string(&mut buffer).unwrap();
        return Ok(serde_json::from_str(&buffer).unwrap());
    }
}

fn main() {
    let ci = CircleCi {} ;
    let me = ci.sendRequest(&CircleCiMeRequest::new("xxxxxxxxxxxxxxxxx"));
    println!("{}", me.unwrap());
}

TODO

  • Support Mutlipart/Form
  • Support Network Interceptor (retry automatic-authenticate..etc)