[{"name":"Verify.Form","comment":" This module is based around a simple type alias over\n[elm-verify](https://package.elm-lang.org/packages/stoeffel/elm-verify/latest)'s\n[Validator](https://package.elm-lang.org/packages/stoeffel/elm-verify/latest/Verify#Validator)\ntype that I commonly find myself using.\n\nWhereas the `Validator` type is defined as\n\n    type alias Validator error input verified =\n        input -> Result ( error, List error ) verified\n\nThe `FormValidator` types is defined\n\n    type alias FormValidator input verified =\n        input -> Result (form -> form) verified\n\n[Validator](https://package.elm-lang.org/packages/stoeffel/elm-verify/latest/Verify#Validator) is great if\nyou wish for the failure of validation to be a list of errors, but what if we have those errors expressed\non our model?\n\n    type alias Form =\n        { firstName : String\n        , firstNameError : Maybe String\n        , lastName : String\n        , lastNameError : Maybe String\n        }\n\n    type alias ValidatedForm =\n        { firstName : NonemptyString\n        , lastName : NonemptyString\n        }\n\nWe don't need a unified \"error\" type. Our errors are just part of our model. Here's a quick example\nof how this looks in action:\n\n    import Verify.Form exposing (FieldValidator, FormValidator)\n\n    firstNameValidator : FieldValidator String Form NonemptyString\n    firstNameValidator input =\n        case String.Nonempty.fromString input of\n            Just firstName ->\n                Ok firstName\n\n            Nothing ->\n                Err (\\form -> { form | firstNameError = Just \"First name cannot be empty\" })\n\n    lastNameValidator : FieldValidator String Form NonemptyString\n    lastNameValidator input =\n        case String.Nonempty.fromString input of\n            Just lastName ->\n                Ok lastName\n\n            Nothing ->\n                Err (\\form -> { form | lastNameError = Just \"Last name cannot be empty\" })\n\n    formValidator : FormValidator Model ValidatedForm\n    formValidator =\n        Verify.Form.ok ValidatedForm\n            |> Verify.Form.verify .firstName firstNameValidator\n            |> Verify.Form.verify .lastName lastNameValidator\n\nnow on form submit we may handle things thusly\n\n    update : Msg -> Form -> ( Form, Cmd Msg )\n    update msg form =\n        case msg of\n            SubmitForm ->\n                case Verify.Form.run formValidator form of\n                    Ok validatedForm ->\n                        ( form, submitForm validatedForm )\n\n                    Err formWithErrors ->\n                        ( formWithErrors, Cmd.none )\n\nYou may still get the full utility of\n[elm-verify](https://package.elm-lang.org/packages/stoeffel/elm-verify/latest)'s helper modules\nand `Validator` type. To turn a `Validator` into a `FieldValidator`, you may use `liftValidator`.\nWe only need to provide a function that states where on the form we should put a list of errors\nif any occur.\n\n    import String.Verify\n    import Verify\n    import Verify.Form exposing (FieldValidator)\n\n    nameValidator : FieldValidator String { form | nameErrors : Maybe (List String) } String\n    nameValidator =\n        String.Verify.notBlank \"Name cannot be empty\"\n            |> Verify.compose (String.Verify.minLength 2 \"Name must be at least 2 characters long\")\n            |> Verify.compose (String.Verify.maxLength 50 \"Name must be at most 50 characters long\")\n            |> Verify.compose\n                (\\input ->\n                    if input == \"Tony\" then\n                        Err ( \"Tony is not a valid name\", [] )\n\n                    else\n                        Ok input\n                )\n            |> Verify.Form.liftValidator (\\errors form -> { form | nameErrors = Just errors })\n\n\n# Types\n\n@docs FormValidator, FieldValidator\n\n\n# Common Helpers\n\n@docs keep, liftValidator, run, validate, verify\n\n","unions":[],"aliases":[{"name":"FieldValidator","comment":" A type alias to represent a validator that is applied to a field on a form.\n","args":["field","form","verified"],"type":"field -> Result.Result (form -> form) verified"},{"name":"FormValidator","comment":" Simple type alias over [Validator](https://package.elm-lang.org/packages/stoeffel/elm-verify/latest/Verify#Validator)\nthat forgoes an error type in favor of an \"Error setter\" for the the `input` type.\n","args":["form","verified"],"type":"Verify.Validator (form -> form) form verified"}],"values":[{"name":"keep","comment":" Creates a `FormValidator` that automatically passes for a given field. Useful if we don't want\nto enforce validation on something, but still want to keep it in the pipeline. Similar to\n[Verify.keep](https://package.elm-lang.org/packages/stoeffel/elm-verify/latest/Verify#keep)\n","type":"(form -> field) -> Verify.Form.FormValidator form (field -> finally) -> Verify.Form.FormValidator form finally"},{"name":"liftValidator","comment":" Convenience function for using the [Validator](https://package.elm-lang.org/packages/stoeffel/elm-verify/latest/Verify#Validator)\ntype as a `FieldValidator`. The first argument tells the resulting `FormValidator` where on the form this `FieldValidator` will\napply any errors to.\n","type":"(( error, List.List error ) -> form -> form) -> Verify.Validator error input verified -> Verify.Form.FieldValidator input form verified"},{"name":"run","comment":" Used to apply a `FormValidator` to an input form.\n","type":"Verify.Form.FormValidator form validatedForm -> form -> Result.Result form validatedForm"},{"name":"validate","comment":" Just a re-export of `Verify.validate` for convenience.\n","type":"verified -> Verify.Form.FormValidator input verified"},{"name":"verify","comment":" Pipeline function that takes a field getter and a `FieldValidator` to transform a `FormValidator`\n","type":"(form -> field) -> Verify.Form.FieldValidator field form verified -> Verify.Form.FormValidator form (verified -> finally) -> Verify.Form.FormValidator form finally"}],"binops":[]}]