sift/option
Option validators — required/optional field handling.
Values
pub fn optional(
validator: fn(a) -> Result(a, String),
) -> fn(option.Option(a)) -> Result(option.Option(a), String)
None passes through as the default, Some(a) runs the validator. Returns Option(a) — None stays None, Some(a) validates a.
let validator = option.optional(string.min_length(3, "too short"))
validator(None) // -> Ok(None)
validator(Some("hello")) // -> Ok(Some("hello"))
validator(Some("hi")) // -> Error("too short")
pub fn required(
msg: String,
) -> fn(option.Option(a)) -> Result(a, String)
None produces an error, Some(a) unwraps the value.
let validator = option.required("field is required")
validator(Some("hello")) // -> Ok("hello")
validator(None) // -> Error("field is required")