use std::{
borrow::Cow,
env::{self, VarError},
ffi::{OsStr, OsString},
};
use url::Url;
pub mod v1;
pub const DEFAULT_URL: &str = "https://api.oceanpkg.org/";
pub const URL_ENV_KEY: &str = crate::env::OCEAN_API_URL;
pub fn url() -> Result<Url, url::ParseError> {
match url_str() {
Ok(url) => Url::parse(&url),
Err(_) => Err(url::ParseError::InvalidDomainCharacter),
}
}
pub fn url_str() -> Result<Cow<'static, str>, OsString> {
match env::var(URL_ENV_KEY) {
Ok(var) => Ok(Cow::Owned(var)),
Err(VarError::NotPresent) => Ok(Cow::Borrowed(DEFAULT_URL)),
Err(VarError::NotUnicode(var)) => Err(var),
}
}
pub fn url_os_str() -> Cow<'static, OsStr> {
if let Some(var) = env::var_os(URL_ENV_KEY) {
Cow::Owned(var)
} else {
Cow::Borrowed(DEFAULT_URL.as_ref())
}
}