diff options
Diffstat (limited to 'src/client/Model/Frequency.elm')
-rw-r--r-- | src/client/Model/Frequency.elm | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/client/Model/Frequency.elm b/src/client/Model/Frequency.elm new file mode 100644 index 0000000..40f9893 --- /dev/null +++ b/src/client/Model/Frequency.elm @@ -0,0 +1,36 @@ +module Model.Frequency exposing + ( Frequency(..) + , decoder + , validate + , fromString + ) + +import Json.Decode as Decode exposing (Decoder) +import Json.Decode.Extra as Decode + +import Form.Validate as Validate exposing (Validation) + +type Frequency = Punctual | Monthly + +decoder : Decoder Frequency +decoder = + let frequencyResult input = + fromString input + |> Result.fromMaybe ("Could not deduce Punctual nor Monthly from " ++ input) + in Decode.string |> Decode.andThen (Decode.fromResult << frequencyResult) + +validate : Validation String Frequency +validate = + Validate.customValidation Validate.string (\str -> + fromString str + |> Result.fromMaybe (Validate.customError "InvalidFrequency") + ) + +fromString : String -> Maybe Frequency +fromString str = + if str == toString Punctual then + Just Punctual + else if str == toString Monthly then + Just Monthly + else + Nothing |