#![doc(html_logo_url = "https://algorithmia.com/assets/images/apple-touch-icon.png")]
#[macro_use]
extern crate hyper;
extern crate rustc_serialize;
use algo::{Algorithm, AlgoRef};
use data::{DataDir, DataFile, DataPath, HasDataPath};
use client::HttpClient;
use std::clone;
pub mod algo;
pub mod data;
pub mod error;
pub mod client;
pub mod json_helpers;
pub use hyper::{mime, Url};
static DEFAULT_API_BASE_URL: &'static str = "https://api.algorithmia.com";
pub struct Algorithmia {
http_client: HttpClient,
}
impl<'a, 'c> Algorithmia {
pub fn client(api_key: &str) -> Algorithmia {
Algorithmia {
http_client: HttpClient::new(api_key.to_string(), DEFAULT_API_BASE_URL.to_string()),
}
}
pub fn alt_client(base_url: Url, api_key: &str) -> Algorithmia {
Algorithmia {
http_client: HttpClient::new(api_key.to_string(), base_url.serialize()),
}
}
pub fn algo<A: Into<AlgoRef>>(&self, algorithm: A) -> Algorithm {
Algorithm::new(self.http_client.clone(), algorithm.into())
}
pub fn dir(&self, path: &'a str) -> DataDir {
DataDir::new(self.http_client.clone(), path)
}
pub fn file(&self, path: &'a str) -> DataFile {
DataFile::new(self.http_client.clone(), path)
}
pub fn data(&self, path: &'a str) -> DataPath {
DataPath::new(self.http_client.clone(), path)
}
}
impl clone::Clone for Algorithmia {
fn clone(&self) -> Algorithmia {
Algorithmia {
http_client: self.http_client.clone(),
}
}
}