Current section
Files
Jump to
Current section
Files
src/evaluation_context.gleam
import gleam/dict.{type Dict}
import gleam/dynamic.{type Dynamic}
import gleam/option.{type Option, None, Some}
pub type EvaluationContext {
EvaluationContext(
targeting_key: Option(String),
attributes: Dict(String, Dynamic),
)
}
pub fn get_attribute(
evaluation_context: EvaluationContext,
key: String,
) -> Result(Dynamic, Nil) {
dict.get(evaluation_context.attributes, key)
}
pub fn get_all_attributes(
evaluation_context: EvaluationContext,
) -> List(#(String, Dynamic)) {
dict.to_list(evaluation_context.attributes)
}
pub fn merge(
initial_context: EvaluationContext,
overriding_context: EvaluationContext,
) -> EvaluationContext {
let targeting_key = case overriding_context.targeting_key {
None -> initial_context.targeting_key
Some(_) -> overriding_context.targeting_key
}
let attributes =
dict.combine(
initial_context.attributes,
overriding_context.attributes,
fn(_initial, overriding) { overriding },
)
EvaluationContext(targeting_key, attributes)
}