deep copy, copies all config nodes
shallow copy getter, copies only the first level, references the deeper nodes in a shared manner
assigns a single value as array, or appends it to an existing value mapping a single value to array
usage myConfig.append("foobaz").value = "newValue" myConfig.append("foobaz").value = "newValue2"
resulting in myConfig.foobaz == ["newValue, newValue2"]
appends to an existing entry (or extends into an array and appends) if the condition is met
assigns a new value on the given access path
assign a value if the condition is set to true, otherwise skip it
the condition, the access accessPath into the config
gets the current node and if none is present returns a config with a default value
get if the access path is present (get is reserved as getter with a default, on the current path) TODO will be renamed to something more meaningful and deprecated, the name is ambiguous
the access path
simple match, if the first order function call returns true then there is a match, if the value is not present it never matches
the first order function performing the match
lazy, passes a function which then is lazily evaluated instead of a direct value
elvis like typesafe functional save resolver a typesafe option for getIfPresent
usage myOptional.resolve(value => value.subAttr.subAttr2).orElseLazy(....) if this is resolvable without any errors an Optional with the value is returned if not, then an Optional absent is returned, also if you return Optional absent it is flatmapped into absent
the resolver function, can throw any arbitrary errors, int the error case the resolution goes towards absent
simple merge for the root configs
converts the entire config into a json object
Staticfrom
Config, basically an optional wrapper for a json structure (not Side - effect free, since we can alter the internal config state without generating a new config), not sure if we should make it side - effect free since this would swallow a lot of performance and ram