mod models;
use reqwest::Client;
use serde_derive::{Deserialize, Serialize};
use std::error::Error;
use std::collections::HashMap;
use crate::models::organization::{Organization, OrganizationCreate};
#[derive(Serialize, Deserialize)]
pub struct Resource {
}
const ORGANIZATION_URL: &str = "/organization";
const BASE_ADDRESS: &str = "http://localhost:8080";
const BASE_ADDRESS_SANDBOX: &str = "https://sandbox.metriport.com";
pub struct MetriportSDK {
client: Client,
base_url: String,
api_key: String,
}
#[allow(dead_code)]
pub struct Options {
timeout: Option<u64>,
additional_headers: Option<HashMap<String, String>>,
sandbox: Option<bool>,
base_address: Option<String>,
}
impl MetriportSDK {
pub fn new(api_key: String, options: Options) -> Self {
let base_url = match (options.sandbox, options.base_address) {
(Some(true), _) => String::from(BASE_ADDRESS_SANDBOX),
(_, Some(address)) => address,
_ => String::from(BASE_ADDRESS),
};
Self {
client: Client::new(),
base_url,
api_key,
}
}
pub async fn create_organization(&self, data: OrganizationCreate) -> Result<Organization, Box<dyn Error>> {
let url = format!("{}{}", self.base_url, ORGANIZATION_URL);
let response: reqwest::Response = self
.client
.post(&url)
.header("Authorization", format!("Bearer {}", self.api_key))
.json(&data)
.send()
.await?;
if response.status().is_success() {
let organization: Organization = response.json().await?;
Ok(organization)
} else {
Err(Box::new(std::io::Error::new(
std::io::ErrorKind::Other,
"Failed to create organization",
)))
}
}
}