2个版本
0.1.2 | 2024年7月8日 |
---|---|
0.1.1 | 2024年6月5日 |
##288 在 音频
每月115次下载
71KB
2K SLoC
OpenFeature Rust Confidence提供程序
Rust对Confidence功能提供程序的实现,与OpenFeature SDK一起使用。
使用
启用提供程序,设置评估上下文和解析标志
setProvider
使openfeature api能够将confidence作为标志的提供程序。
首先,我们需要设置包含client_secret
和region
的api配置,然后我们可以创建如下提供程序
let api_config = APIConfig {
api_key: "API_KEY".to_string(),
region: Region::Global,
};
let confidence = Confidence::new(api_config);
let provider = ConfidenceProvider::new(confidence);
此时我们可以按如下方式设置OpenFeatureAPI
的提供程序
let mut api = OpenFeature::singleton_mut().await;
api.set_provider(provider).await;
在完成初始设置后,我们可以开始访问标志。每次请求任何标志时,提供程序都会从网络中获取它们并解析请求的属性。
属性的架构在解析属性中起着至关重要的作用,如果架构类型与请求的类型匹配,则返回值,否则我们期望从EvaluationError
中收到一个MismatchType
错误。
// wrong type, should return error
let details_string = api
.create_client()
.get_bool_details("test.struct-key.string-key", Some(&context), None)
.await;
// correct type, should return value
let details_boolean = api
.create_client()
.get_bool_details("my-test.struct-key.boolean-key", Some(&context), None)
.await;
println!("details string -> {:?}", details_string);
println!("details boolean -> {:?}", details_boolean.unwrap().value);
上述代码的结果将是
details string -> Err(EvaluationError { code: TypeMismatch, message: Some("schema type is different for my-test.struct-key.string-key") })
details boolean -> true
读取整个标志为结构体
还可以像以下那样读取整个标志并获取整个标志作为结构体
let details_flag = api
.create_client()
.get_struct_details::<MyStructValue>("my-test.struct-key", Some(&context), None)
.await
.unwrap();
println!("details boolean struct -> {:?}", details_flag.value.my_boolean);
println!("details string struct -> {:?}", details_flag.value.my_string);
}
struct MyStructValue {
my_boolean: bool,
my_string: String
}
impl FromStructValue for MyStructValue {
fn from_struct_value(value: &StructValue) -> anyhow::Result<Self> {
return Ok(MyStructValue {
my_boolean: value.fields.get("boolean-key").unwrap().as_bool().unwrap_or_default(),
my_string: value.fields.get("string-key").unwrap().as_str().unwrap_or_default().to_string(),
})
}
}
依赖
~8–20MB
~295K SLoC