From 1e47a7754ca38bd1a6c74765d8378caf68ce4619 Mon Sep 17 00:00:00 2001 From: Joris Date: Sun, 26 Mar 2017 21:10:42 +0200 Subject: Separate client and server watch --- src/client/Validation.elm | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/client/Validation.elm (limited to 'src/client/Validation.elm') 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") + ) -- cgit v1.2.3