env_url/lib.rs
1//!
2//! This crate provides env-composable service urls complete with key overrides as to facilitate flexibility and to simplify integration with kubernetes.
3//!
4//! ## Env mapping behaviors
5//!
6//! | ENV | |
7//! | -----------------------:|:---------------------------------------------------------:|
8//! | {PREFIX}_URL | set service url, disregarding other overrides |
9//! | {PREFIX}_URL_ENV | override `{PREFIX}_URL` env mapping |
10//! | {PREFIX}_SCHEME | set url scheme component |
11//! | {PREFIX}_SCHEME_ENV | override `{PREFIX}_SCHEME` env mapping |
12//! | {PREFIX}_PATH | set url path component |
13//! | {PREFIX}_PATH_ENV | override `{PREFIX}_PATH` env mapping |
14//! | {PREFIX}_QUERY | set url query component |
15//! | {PREFIX}_QUERY_ENV | override `{PREFIX}_QUERY` env mapping |
16//! | {PREFIX}_USERINFO | set url userinfo component |
17//! | {PREFIX}_USERINFO_ENV | override `{PREFIX}_USERINFO` env mapping |
18//!
19//! ## Example
20//!
21//! ```
22//! use env_url::*;
23//!
24//! #[derive(EnvURL)]
25//! #[env_url(env_prefix = "REDIS", default = "redis://127.0.0.1:6379")]
26//! pub struct RedisDB;
27//!
28//! let service_url = RedisDB::service_url();
29//!
30//! ```
31//!
32#[doc(hidden)]
33pub extern crate url;
34
35extern crate self as env_url;
36
37pub use derive_env_url::*;
38pub use url::{ParseError, Url};
39pub trait ServiceURL {
40 fn service_url() -> Result<Url, ParseError>;
41}
42
43#[cfg(test)]
44#[ctor::ctor]
45fn setup_test_env() {
46 std::env::remove_var("REDIS_URL");
47 std::env::remove_var("REDIS_URL_ENV");
48 std::env::remove_var("REDIS_SCHEME");
49 std::env::remove_var("REDIS_SCHEME_ENV");
50 std::env::remove_var("REDIS_PATH");
51 std::env::remove_var("REDIS_PATH_ENV");
52 std::env::remove_var("REDIS_QUERY");
53 std::env::remove_var("REDIS_QUERY_ENV");
54 std::env::remove_var("REDIS_USERINFO");
55 std::env::remove_var("REDIS_USERINFO_ENV");
56}
57#[cfg(test)]
58mod tests {
59 use env_url::*;
60
61 #[derive(EnvURL)]
62 #[env_url(env_prefix = "REDIS", default = "redis://127.0.0.1:6379")]
63 struct RedisDB;
64
65 #[test]
66 fn it_creates_url() -> Result<(), ParseError> {
67 let url = RedisDB::service_url()?;
68
69 assert_eq!(url.as_str(), "redis://127.0.0.1:6379");
70
71 Ok(())
72 }
73}