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")
Search Document