1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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())
}
}