Types and Data Structures
Overview
This document outlines some of the common types and data structures defined by OpenFeature and referenced elsewhere in this specification.
Boolean
A logical true or false, as represented idiomatically in the implementation languages.
String
A UTF-8 encoded string.
Number
A numeric value of unspecified type or size. Implementation languages may further differentiate between integers, floating point numbers, and other specific numeric types and provide functionality as idioms dictate.
Structure
Structured data, presented however is idiomatic in the implementation language, such as JSON or YAML.
Datetime
A language primitive for representing a date and time, optionally including timezone information. If no timezone is specified, the date and time will be treated as UTC.
Evaluation Details
A structure representing the result of the flag evaluation process, and made available in the detailed flag resolution functions, containing the following fields:
- flag key (string, required)
- value (boolean | string | number | structure, required)
- error code (error code, optional)
- error message (string, optional)
- reason (string, optional)
- variant (string, optional)
- flag metadata (flag metadata)
Note
Some type systems feature useful constraints that can enhance the ergonomics of the evaluation details
structure.
For example, in the case of an unsuccessful evaluation, error code
, reason
, and error message
will be set, and variant will not.
If the type system of the implementation supports the expression of such constraints, consider defining them.
Resolution Details
A structure which contains a subset of the fields defined in the evaluation details
, representing the result of the provider's flag resolution process, including:
- value (boolean | string | number | structure, required)
- error code (error code, optional)
- error message (string, optional)
- reason (string, optional)
- variant (string, optional)
- flag metadata (flag metadata, optional)
A set of pre-defined reasons is enumerated below:
Reason | Explanation |
---|---|
STATIC | The resolved value is static (no dynamic evaluation). |
DEFAULT | The resolved value fell back to a pre-configured value (no dynamic evaluation occurred or dynamic evaluation yielded no result). |
TARGETING_MATCH | The resolved value was the result of a dynamic evaluation, such as a rule or specific user-targeting. |
SPLIT | The resolved value was the result of pseudorandom assignment. |
CACHED | The resolved value was retrieved from cache. |
DISABLED | The resolved value was the result of the flag being disabled in the management system. |
UNKNOWN | The reason for the resolved value could not be determined. |
STALE | The resolved value is non-authoritative or possibly out of date |
ERROR | The resolved value was the result of an error. |
Note
The reason
should not be limited to the reasons enumerated above. It can be any of the pre-defined reasons, or
any string value. Some type systems have features which can increase the ergonomics of reason
, for instance a union
of pre-defined types with a string, or a rust-style enumeration which allows for enumerated values to have associated
content.
enum Reason {
Static,
Default,
TargetingMatch,
Split,
Cached,
Unknown,
Stale,
Error,
Other(String)
}
let myReason = Reason::Other("my-reason".to_string());
Note
The resolution details
structure is not exposed to the Application Author.
It defines the data which Provider Authors must return when resolving the value of flags.