pub trait FeatureProvider:
Send
+ Sync
+ 'static {
// Required methods
fn metadata(&self) -> &ProviderMetadata;
fn resolve_bool_value<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
flag_key: &'life1 str,
evaluation_context: &'life2 EvaluationContext,
) -> Pin<Box<dyn Future<Output = EvaluationResult<ResolutionDetails<bool>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
fn resolve_int_value<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
flag_key: &'life1 str,
evaluation_context: &'life2 EvaluationContext,
) -> Pin<Box<dyn Future<Output = EvaluationResult<ResolutionDetails<i64>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
fn resolve_float_value<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
flag_key: &'life1 str,
evaluation_context: &'life2 EvaluationContext,
) -> Pin<Box<dyn Future<Output = EvaluationResult<ResolutionDetails<f64>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
fn resolve_string_value<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
flag_key: &'life1 str,
evaluation_context: &'life2 EvaluationContext,
) -> Pin<Box<dyn Future<Output = EvaluationResult<ResolutionDetails<String>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
fn resolve_struct_value<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
flag_key: &'life1 str,
evaluation_context: &'life2 EvaluationContext,
) -> Pin<Box<dyn Future<Output = EvaluationResult<ResolutionDetails<StructValue>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
// Provided methods
fn initialize<'life0, 'life1, 'async_trait>(
&'life0 mut self,
context: &'life1 EvaluationContext,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn status(&self) -> ProviderStatus { ... }
fn hooks(&self) -> &[HookWrapper] { ... }
}
Expand description
This trait defines interfaces that Provider Authors can use to abstract a particular flag management system, thus enabling the use of the evaluation API by Application Authors.
Providers are the “translator” between the flag evaluation calls made in application code, and the flag management system that stores flags and in some cases evaluates flags. At a minimum, providers should implement some basic evaluation methods which return flag values of the expected type. In addition, providers may transform the evaluation context appropriately in order to be used in dynamic evaluation of their associated flag management system, provide insight into why evaluation proceeded the way it did, and expose configuration options for their associated flag management system. Hypothetical provider implementations might wrap a vendor SDK, embed an REST client, or read flags from a local file.
See the spec.
Required Methods§
Sourcefn metadata(&self) -> &ProviderMetadata
fn metadata(&self) -> &ProviderMetadata
The provider interface MUST define a metadata member or accessor, containing a name field or accessor of type string, which identifies the provider implementation.
Sourcefn resolve_bool_value<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
flag_key: &'life1 str,
evaluation_context: &'life2 EvaluationContext,
) -> Pin<Box<dyn Future<Output = EvaluationResult<ResolutionDetails<bool>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn resolve_bool_value<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
flag_key: &'life1 str,
evaluation_context: &'life2 EvaluationContext,
) -> Pin<Box<dyn Future<Output = EvaluationResult<ResolutionDetails<bool>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Resolve given flag_key
as a bool value.
Sourcefn resolve_int_value<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
flag_key: &'life1 str,
evaluation_context: &'life2 EvaluationContext,
) -> Pin<Box<dyn Future<Output = EvaluationResult<ResolutionDetails<i64>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn resolve_int_value<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
flag_key: &'life1 str,
evaluation_context: &'life2 EvaluationContext,
) -> Pin<Box<dyn Future<Output = EvaluationResult<ResolutionDetails<i64>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Resolve given flag_key
as an i64 value.
Sourcefn resolve_float_value<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
flag_key: &'life1 str,
evaluation_context: &'life2 EvaluationContext,
) -> Pin<Box<dyn Future<Output = EvaluationResult<ResolutionDetails<f64>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn resolve_float_value<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
flag_key: &'life1 str,
evaluation_context: &'life2 EvaluationContext,
) -> Pin<Box<dyn Future<Output = EvaluationResult<ResolutionDetails<f64>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Resolve given flag_key
as a f64 value.
Sourcefn resolve_string_value<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
flag_key: &'life1 str,
evaluation_context: &'life2 EvaluationContext,
) -> Pin<Box<dyn Future<Output = EvaluationResult<ResolutionDetails<String>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn resolve_string_value<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
flag_key: &'life1 str,
evaluation_context: &'life2 EvaluationContext,
) -> Pin<Box<dyn Future<Output = EvaluationResult<ResolutionDetails<String>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Resolve given flag_key
as a string value.
Sourcefn resolve_struct_value<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
flag_key: &'life1 str,
evaluation_context: &'life2 EvaluationContext,
) -> Pin<Box<dyn Future<Output = EvaluationResult<ResolutionDetails<StructValue>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn resolve_struct_value<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
flag_key: &'life1 str,
evaluation_context: &'life2 EvaluationContext,
) -> Pin<Box<dyn Future<Output = EvaluationResult<ResolutionDetails<StructValue>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Resolve given flag_key
as a struct value.
Provided Methods§
Sourcefn initialize<'life0, 'life1, 'async_trait>(
&'life0 mut self,
context: &'life1 EvaluationContext,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn initialize<'life0, 'life1, 'async_trait>(
&'life0 mut self,
context: &'life1 EvaluationContext,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
The provider MAY define an initialize function which accepts the global evaluation context as an argument and performs initialization logic relevant to the provider.
Note the following rules:
- The provider MUST set its status field/accessor to READY if its initialize function terminates normally.
- The provider MUST set its status field to ERROR if its initialize function terminates abnormally.
- The provider SHOULD indicate an error if flag resolution is attempted before the provider is ready.
Sourcefn status(&self) -> ProviderStatus
fn status(&self) -> ProviderStatus
The provider MAY define a status field/accessor which indicates the readiness of the provider, with possible values NOT_READY, READY, or ERROR.
Providers without this field can be assumed to be ready immediately.
Sourcefn hooks(&self) -> &[HookWrapper]
fn hooks(&self) -> &[HookWrapper]
The provider MAY define a hooks field or accessor which returns a list of hooks that the provider supports.
Implementors§
impl FeatureProvider for MockFeatureProvider
This trait defines interfaces that Provider Authors can use to abstract a particular flag management system, thus enabling the use of the evaluation API by Application Authors.
Providers are the “translator” between the flag evaluation calls made in application code, and the flag management system that stores flags and in some cases evaluates flags. At a minimum, providers should implement some basic evaluation methods which return flag values of the expected type. In addition, providers may transform the evaluation context appropriately in order to be used in dynamic evaluation of their associated flag management system, provide insight into why evaluation proceeded the way it did, and expose configuration options for their associated flag management system. Hypothetical provider implementations might wrap a vendor SDK, embed an REST client, or read flags from a local file.
See the spec.