#![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))]
#![allow(unknown_lints)]
#![recursion_limit = "1024"]
#[macro_use]
extern crate serde_derive;
#[macro_use]
extern crate error_chain;
#[cfg(feature = "entrypoint")]
#[allow(unused_imports)]
extern crate algorithmia_entrypoint;
use crate::algo::{AlgoUri, Algorithm};
use crate::client::HttpClient;
use crate::data::{DataDir, DataFile, DataObject, HasDataPath};
pub mod algo;
pub mod data;
pub mod error;
#[cfg(feature = "entrypoint")]
pub mod entrypoint;
use crate::client::ApiAuth;
use crate::error::Result;
pub use reqwest::Body;
pub use reqwest::{IntoUrl, Url};
pub mod prelude {
pub use crate::algo::AlgoIo;
pub use crate::data::HasDataPath;
pub use crate::Algorithmia;
pub use serde_json::Value;
#[cfg(feature = "entrypoint")]
pub use crate::entrypoint::{entrypoint, DecodedEntryPoint, EntryPoint};
}
mod client;
mod version;
const DEFAULT_API_BASE_URL: &'static str = "https://api.algorithmia.com";
pub struct Algorithmia {
http_client: HttpClient,
}
impl Algorithmia {
pub fn new() -> Result<Algorithmia> {
let api_address =
std::env::var("ALGORITHMIA_API").unwrap_or_else(|_| DEFAULT_API_BASE_URL.into());
let auth = std::env::var("ALGORITHMIA_API_KEY")
.map(ApiAuth::from)
.unwrap_or(ApiAuth::None);
Ok(Algorithmia {
http_client: HttpClient::new(auth, &api_address)?,
})
}
pub fn client<A: Into<String>>(api_key: A) -> Result<Algorithmia> {
let api_address =
std::env::var("ALGORITHMIA_API").unwrap_or_else(|_| DEFAULT_API_BASE_URL.into());
Ok(Algorithmia {
http_client: HttpClient::new(ApiAuth::from(api_key.into()), &api_address)?,
})
}
pub fn client_with_url<A: Into<String>, U: IntoUrl>(
api_key: A,
base_url: U,
) -> Result<Algorithmia> {
Ok(Algorithmia {
http_client: HttpClient::new(ApiAuth::from(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: &str) -> DataDir {
DataDir::new(self.http_client.clone(), path)
}
pub fn file(&self, path: &str) -> DataFile {
DataFile::new(self.http_client.clone(), path)
}
pub fn data(&self, path: &str) -> DataObject {
DataObject::new(self.http_client.clone(), path)
}
}
impl Clone for Algorithmia {
fn clone(&self) -> Algorithmia {
Algorithmia {
http_client: self.http_client.clone(),
}
}
}