15个版本 (2个稳定版)
2.0.0 | 2024年6月26日 |
---|---|
1.0.0 | 2023年6月28日 |
0.9.0 | 2022年7月11日 |
0.8.0 | 2022年3月16日 |
0.2.5 | 2020年10月23日 |
#796 in 配置
每月661次 下载
在 3 crates 中使用
64KB
1K SLoC
feattle-core
此crate是功能标志(简称"feattle")的核心实现。
其主要部分是宏 feattles!
与特质 Feattles
。有关更多信息,请参阅主要包 - feattle
。
使用示例
use std::sync::Arc;
use feattle_core::{feattles, Feattles};
use feattle_core::persist::NoPersistence;
// Declare the struct
feattles! {
struct MyFeattles {
/// Is this usage considered cool?
is_cool: bool = true,
/// Limit the number of "blings" available.
/// This will not change the number of "blengs", though!
max_blings: i32,
/// List the actions that should not be available
blocked_actions: Vec<String>,
}
}
// Create a new instance (`NoPersistence` is just a mock for the persistence layer)
let my_feattles = MyFeattles::new(Arc::new(NoPersistence));
// Read values (note the use of `*`)
assert_eq!(*my_feattles.is_cool(), true);
assert_eq!(*my_feattles.max_blings(), 0);
assert_eq!(*my_feattles.blocked_actions(), Vec::<String>::new());
工作原理
该宏将生成一个具有给定名称和可见性修饰符(默认为私有)的结构体。生成的结构体实现了 Feattles
,并为每个feattle公开一个方法。
为每个feattle创建的方法允许读取它们的当前值。例如,对于feattle is_cool: bool
,将有一个类似的方法 pub fn is_cool(&self) -> MappedRwLockReadGuard<bool>
。请注意使用了 parking_lot::MappedRwLockReadGuard
,因为结构体的内部存储在 RwLock
后面,以控制并发访问。
可以使用以下语法创建一个Feattle:$key: $type [= $default]
。您可以使用文档注释(以///
开头)来描述它们在系统中的功能。您可以使用实现FeattleValue
的任何类型,并可选地提供默认值。如果没有提供,将使用Default::default()
创建默认值。
更新值
此crate只提供低级方法来使用Feattles::reload()
加载当前Feattle,并使用Feattles::update()
更新它们的值。请查找feattle-sync和feattle-ui以获取更高级的功能。
限制
由于对宏编写的某些限制,您只能在每个模块中一次使用feattles!
。例如,以下代码无法编译
use feattle_core::feattles;
feattles! { struct A { } }
feattles! { struct B { } }
您可以通过创建子模块然后重新导出生成的结构体来绕过此限制。注意第二个情况中使用pub struct
。
use feattle_core::feattles;
feattles! { struct A { } }
mod b {
use feattle_core::feattles;
feattles! { pub struct B { } }
}
use b::B;
可选功能
- uuid:将添加对
uuid::Uuid
的支持。
许可
在以下任一许可下使用:
- Apache License, Version 2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则根据Apache-2.0许可定义的,任何有意提交给作品包含在内的贡献,都将根据上述许可双重许可,没有额外的条款或条件。
依赖
~2.1–8.5MB
~67K SLoC