#![doc(html_logo_url = "https://algorithmia.com/assets/images/logos/png/bintreePurple.png")]
#![doc(test(attr(allow(unused_variables), allow(dead_code))))]
#![cfg_attr(feature="nightly", feature(specialization))]
#![recursion_limit = "1024"]
#![allow(unknown_lints)]
#[cfg(feature="with-serde")]
#[macro_use]
extern crate serde_derive;
#[macro_use]
extern crate mime;
#[macro_use]
extern crate hyper;
#[macro_use]
extern crate error_chain;
#[cfg(feature="with-serde")]
extern crate serde;
#[cfg(feature="with-serde")]
extern crate serde_json;
#[cfg(feature="with-rustc-serialize")]
extern crate rustc_serialize;
extern crate reqwest;
extern crate base64;
extern crate chrono;
extern crate url;
use algo::{Algorithm, AlgoUri};
use data::{DataDir, DataFile, DataObject, HasDataPath};
use client::HttpClient;
pub mod algo;
pub mod data;
pub mod error;
pub use reqwest::{Url, IntoUrl};
pub use client::ApiAuth;
pub use reqwest::Body;
#[cfg(feature="with-serde")]
#[path = "json-serde.rs"]
mod json;
#[cfg(feature="with-rustc-serialize")]
#[path = "json-rustc-serialize.rs"]
mod json;
pub mod prelude {
pub use Algorithmia;
pub use algo::{EntryPoint, DecodedEntryPoint, AlgoInput, AlgoOutput, JsonValue};
pub use data::HasDataPath;
}
mod client;
mod version;
static DEFAULT_API_BASE_URL: &'static str = "https://api.algorithmia.com";
pub struct Algorithmia {
http_client: HttpClient,
}
impl<'a, 'c> Algorithmia {
pub fn client<A: Into<ApiAuth>>(api_key: A) -> Algorithmia {
let api_address = std::env::var("ALGORITHMIA_API")
.unwrap_or_else(|_| DEFAULT_API_BASE_URL.into());
Algorithmia { http_client: HttpClient::new(api_key.into(), &api_address) }
}
pub fn client_with_url<A: Into<ApiAuth>, U: IntoUrl>(base_url: U, api_key: A) -> Algorithmia {
Algorithmia { http_client: HttpClient::new(api_key.into(), base_url) }
}
pub fn algo<A: Into<AlgoUri>>(&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) -> DataObject {
DataObject::new(self.http_client.clone(), path)
}
}
impl Clone for Algorithmia {
fn clone(&self) -> Algorithmia {
Algorithmia { http_client: self.http_client.clone() }
}
}
impl Default for Algorithmia {
fn default() -> Algorithmia {
let api_address = std::env::var("ALGORITHMIA_API")
.unwrap_or_else(|_| DEFAULT_API_BASE_URL.into());
let api_key =
std::env::var("ALGORITHMIA_API_KEY").map(ApiAuth::from).unwrap_or(ApiAuth::None);
Algorithmia { http_client: HttpClient::new(api_key, &api_address) }
}
}