diff options
Diffstat (limited to 'src/client/Validation.elm')
-rw-r--r-- | src/client/Validation.elm | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/client/Validation.elm b/src/client/Validation.elm new file mode 100644 index 0000000..4781c3d --- /dev/null +++ b/src/client/Validation.elm @@ -0,0 +1,47 @@ +module Validation exposing + ( cost + , date + , category + ) + +import Date exposing (Date) +import Date.Extra.Core exposing (intToMonth) +import Date.Extra.Create exposing (dateFromFields) +import Dict +import String exposing (toInt, split) + +import Form.Validate as Validate exposing (Validation) + +import Model.Category exposing (Categories, CategoryId) + +cost : Validation String Int +cost = + Validate.customValidation Validate.int (\n -> + if n == 0 + then Err (Validate.customError "CostMustNotBeNull") + else Ok n + ) + +date : Validation String Date +date = + Validate.customValidation Validate.string (\str -> + case split "/" str of + [day, month, year] -> + case (toInt day, toInt month, toInt year) of + (Ok dayNum, Ok monthNum, Ok yearNum) -> + Ok (dateFromFields yearNum (intToMonth monthNum) dayNum 0 0 0 0) + _ -> Err (Validate.customError "InvalidDate") + _ -> Err (Validate.customError "InvalidDate") + ) + +category : Categories -> Validation String CategoryId +category categories = + Validate.customValidation Validate.string (\str -> + case toInt str of + Ok category -> + if List.member category (Dict.keys categories) + then Ok category + else Err (Validate.customError "InvalidCategory") + Err _ -> + Err (Validate.customError "InvalidCategory") + ) |