FeatureProvider

Trait FeatureProvider 

Source
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§

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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§

Source

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.
Source

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.

Source

fn hooks(&self) -> &[HookWrapper]

The provider MAY define a hooks field or accessor which returns a list of hooks that the provider supports.

Implementors§

Source§

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.

Source§

impl FeatureProvider for NoOpProvider