
Properties.pudu
Pudu34 lines1.4 KB
1/** @Log.Domain.Properties.Module — ordered property lists keyed by name */2module PuduLangLog.Domain.Properties34import Std.List as List5import PuduLangLog as Log678export fn find(properties: &Array[Log.Property], name: Str) -> Option[Log.Value] {9 let found = List.find(properties, |property: Log.Property| property.name == name) ?10 Some(found.value)11}121314export fn has(properties: &Array[Log.Property], name: Str) -> Bool {15 List.any(properties, |property: Log.Property| property.name == name)16}17181920export fn put(properties: &Array[Log.Property], name: Str, value: Log.Value) -> Array[Log.Property] {21 if !has(properties, name) { return properties.push(Log.Property{name: name, value: value}) }22 properties.map(|property: Log.Property| if property.name == name { Log.Property{name: name, value: value} } else { property })23}242526export fn putIfAbsent(properties: &Array[Log.Property], name: Str, value: Log.Value) -> Array[Log.Property] {27 if has(properties, name) { *properties } else { properties.push(Log.Property{name: name, value: value}) }28}293031export fn remove(properties: &Array[Log.Property], name: Str) -> Array[Log.Property] {32 properties.filter(|property: Log.Property| property.name != name)33}34