ebay 0.2.0

eBay API client for Rust.
Documentation
use client::EbayClient;
use reqwest::Method;
use result::*;
pub use xmltree::Element;

const ENDPOINT: &'static str = "https://api.ebay.com/ws/api.dll";

#[macro_use]
mod xml_helper;
mod headers;
pub mod types;

pub use self::xml_helper::{FromXmlElement, XmlResponse};

pub mod get_my_ebay_selling;

impl EbayClient {
  pub fn request_trading_api<T: FromXmlElement>(
    &self,
    call_name: &str,
    request_elements: Vec<Element>,
  ) -> EbayResult<XmlResponse<T>> {
    use self::headers::AddTradingApiHeaders;
    let mut res = self
      .http
      .request(Method::Post, ENDPOINT)
      .add_trading_api_headers(call_name)
      .body(wrap_request_elements(
        call_name,
        &self.trading_api_token,
        request_elements,
      )?)
      .send()?;

    XmlResponse::parse(&mut res)
  }
}

fn wrap_request_elements(
  call_name: &str,
  auth_token: &str,
  mut elements: Vec<Element>,
) -> EbayResult<String> {
  use std::io::Cursor;

  let mut elem = ebay_xml_element!(
    Request[xmlns="urn:ebay:apis:eBLBaseComponents"][
      RequesterCredentials[][
        eBayAuthToken[][
          auth_token
        ]
      ]
    ]
  );
  elem.name = format!("{}Request", call_name);
  elem.children.append(&mut elements);
  let mut buf: Cursor<Vec<u8>> = Cursor::new(vec![]);
  elem.write(&mut buf)?;
  Ok(::std::str::from_utf8(&buf.into_inner())?.to_string())
}