feat: add meta for changing module name
This commit is contained in:
parent
e6b7121508
commit
97e63b686d
3 changed files with 69 additions and 15 deletions
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "itconfig"
|
name = "itconfig"
|
||||||
version = "0.1.1"
|
version = "0.2.0"
|
||||||
authors = ["Dmitriy Pleshevskiy <dmitriy@ideascup.me>"]
|
authors = ["Dmitriy Pleshevskiy <dmitriy@ideascup.me>"]
|
||||||
description = "Easy build a configs from environment variables and use it in globally."
|
description = "Easy build a configs from environment variables and use it in globally."
|
||||||
categories = ["config", "web-programming"]
|
categories = ["config", "web-programming"]
|
||||||
|
|
70
src/lib.rs
70
src/lib.rs
|
@ -131,16 +131,16 @@ impl From<EnvValue> for String {
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
macro_rules! config {
|
macro_rules! config {
|
||||||
($($tokens:tt)*) => {
|
($($tokens:tt)*) => {
|
||||||
__config_parse_variables!(
|
__itconfig_parse_module! {
|
||||||
tokens = [$($tokens)*],
|
tokens = [$($tokens)*],
|
||||||
variables = [],
|
name = cfg,
|
||||||
);
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
macro_rules! __invalid_config_syntax {
|
macro_rules! __itconfig_invalid_syntax {
|
||||||
() => {
|
() => {
|
||||||
compile_error!(
|
compile_error!(
|
||||||
"Invalid `config!` syntax. Please see the `config!` macro docs for more info."
|
"Invalid `config!` syntax. Please see the `config!` macro docs for more info."
|
||||||
|
@ -148,11 +148,48 @@ macro_rules! __invalid_config_syntax {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[macro_export]
|
||||||
|
#[doc(hidden)]
|
||||||
|
macro_rules! __itconfig_parse_module {
|
||||||
|
// Find module name
|
||||||
|
(
|
||||||
|
tokens = [
|
||||||
|
#![mod_name = $mod_name:ident];
|
||||||
|
$($rest:tt)*
|
||||||
|
],
|
||||||
|
name = $ignore:tt,
|
||||||
|
) => {
|
||||||
|
__itconfig_parse_module! {
|
||||||
|
tokens = [$($rest)*],
|
||||||
|
name = $mod_name,
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Done parsing module
|
||||||
|
(
|
||||||
|
tokens = $tokens:tt,
|
||||||
|
name = $name:tt,
|
||||||
|
) => {
|
||||||
|
__itconfig_parse_variables! {
|
||||||
|
tokens = $tokens,
|
||||||
|
variables = [],
|
||||||
|
module = {
|
||||||
|
name = $name,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Invalid syntax
|
||||||
|
($($tokens:tt)*) => {
|
||||||
|
__itconfig_invalid_syntax!();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
macro_rules! __config_parse_variables {
|
macro_rules! __itconfig_parse_variables {
|
||||||
// Find general config of variable
|
// Find variable with default value
|
||||||
(
|
(
|
||||||
tokens = [
|
tokens = [
|
||||||
$name:ident : $ty:ty => $default:expr,
|
$name:ident : $ty:ty => $default:expr,
|
||||||
|
@ -160,7 +197,7 @@ macro_rules! __config_parse_variables {
|
||||||
],
|
],
|
||||||
$($args:tt)*
|
$($args:tt)*
|
||||||
) => {
|
) => {
|
||||||
__config_parse_variables!(
|
__itconfig_parse_variables! {
|
||||||
current_variable = {
|
current_variable = {
|
||||||
name = $name,
|
name = $name,
|
||||||
ty = $ty,
|
ty = $ty,
|
||||||
|
@ -169,9 +206,10 @@ macro_rules! __config_parse_variables {
|
||||||
},
|
},
|
||||||
tokens = [$($rest)*],
|
tokens = [$($rest)*],
|
||||||
$($args)*
|
$($args)*
|
||||||
);
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Find variable without default value
|
||||||
(
|
(
|
||||||
tokens = [
|
tokens = [
|
||||||
$name:ident : $ty:ty,
|
$name:ident : $ty:ty,
|
||||||
|
@ -179,7 +217,7 @@ macro_rules! __config_parse_variables {
|
||||||
],
|
],
|
||||||
$($args:tt)*
|
$($args:tt)*
|
||||||
) => {
|
) => {
|
||||||
__config_parse_variables!(
|
__itconfig_parse_variables! {
|
||||||
current_variable = {
|
current_variable = {
|
||||||
name = $name,
|
name = $name,
|
||||||
ty = $ty,
|
ty = $ty,
|
||||||
|
@ -187,7 +225,7 @@ macro_rules! __config_parse_variables {
|
||||||
},
|
},
|
||||||
tokens = [$($rest)*],
|
tokens = [$($rest)*],
|
||||||
$($args)*
|
$($args)*
|
||||||
);
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Done parsing variable
|
// Done parsing variable
|
||||||
|
@ -199,10 +237,11 @@ macro_rules! __config_parse_variables {
|
||||||
variables = [$($variables:tt,)*],
|
variables = [$($variables:tt,)*],
|
||||||
$($args:tt)*
|
$($args:tt)*
|
||||||
) => {
|
) => {
|
||||||
__config_parse_variables!(
|
__itconfig_parse_variables! {
|
||||||
tokens = $tokens,
|
tokens = $tokens,
|
||||||
variables = [$($variables,)* { $($current_variable)* },],
|
variables = [$($variables,)* { $($current_variable)* },],
|
||||||
);
|
$($args)*
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Done parsing all variables
|
// Done parsing all variables
|
||||||
|
@ -215,7 +254,7 @@ macro_rules! __config_parse_variables {
|
||||||
|
|
||||||
// Invalid syntax
|
// Invalid syntax
|
||||||
($($tokens:tt)*) => {
|
($($tokens:tt)*) => {
|
||||||
__invalid_config_syntax!();
|
__itconfig_invalid_syntax!();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -228,8 +267,11 @@ macro_rules! __config_impl {
|
||||||
name = $name:ident,
|
name = $name:ident,
|
||||||
$($variable:tt)*
|
$($variable:tt)*
|
||||||
},)+],
|
},)+],
|
||||||
|
module = {
|
||||||
|
name = $mod_name:ident,
|
||||||
|
},
|
||||||
) => {
|
) => {
|
||||||
pub mod cfg {
|
pub mod $mod_name {
|
||||||
#![allow(non_snake_case)]
|
#![allow(non_snake_case)]
|
||||||
use std::env;
|
use std::env;
|
||||||
use $crate::EnvValue;
|
use $crate::EnvValue;
|
||||||
|
|
|
@ -109,3 +109,15 @@ fn convert_number_value_from_env() {
|
||||||
assert_eq!(cfg::F32(), 10.0);
|
assert_eq!(cfg::F32(), 10.0);
|
||||||
assert_eq!(cfg::F64(), 10.0);
|
assert_eq!(cfg::F64(), 10.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn change_config_module_name() {
|
||||||
|
config! {
|
||||||
|
#![mod_name = custom_config_name];
|
||||||
|
|
||||||
|
DEBUG: bool => true,
|
||||||
|
}
|
||||||
|
|
||||||
|
assert_eq!(custom_config_name::DEBUG(), true);
|
||||||
|
}
|
Reference in a new issue