aboutsummaryrefslogtreecommitdiff
path: root/src/Model/BirthdateParser.hs
diff options
context:
space:
mode:
authorJoris2015-11-22 12:15:41 +0100
committerJoris2015-11-22 12:15:41 +0100
commit09d822d47218141bf655d40a6f6f0395cfae69f0 (patch)
tree586785adc2bdb3073506eba25b1560f2f9af9986 /src/Model/BirthdateParser.hs
parent75e3bb69a3fec4be8850833da5cd11bbabcd99b7 (diff)
downloadevents-09d822d47218141bf655d40a6f6f0395cfae69f0.tar.gz
events-09d822d47218141bf655d40a6f6f0395cfae69f0.tar.bz2
events-09d822d47218141bf655d40a6f6f0395cfae69f0.zip
Validate birthdates and show an error message if there are invalid ones
Diffstat (limited to 'src/Model/BirthdateParser.hs')
-rw-r--r--src/Model/BirthdateParser.hs19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/Model/BirthdateParser.hs b/src/Model/BirthdateParser.hs
index c9ac3b9..8e8489b 100644
--- a/src/Model/BirthdateParser.hs
+++ b/src/Model/BirthdateParser.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE OverloadedStrings #-}
+
module Model.BirthdateParser
( parseBirthdates
) where
@@ -14,9 +16,20 @@ import Model.Date
parseBirthdates :: Text -> Either Text [Birthdate]
parseBirthdates input =
- left
- (T.pack . show)
- (parse birthdatesParser "" (T.unpack input))
+ left (T.pack . show) (parse birthdatesParser "" (T.unpack input)) >>= validateBirthdates
+
+validateBirthdates :: [Birthdate] -> Either Text [Birthdate]
+validateBirthdates birthdates =
+ let invalid = filter (not . isValid . date) birthdates
+ in if null invalid
+ then
+ Right birthdates
+ else
+ Left $
+ T.concat
+ [ "Invalid birthdates: "
+ , T.intercalate ", " (map renderBirthdate invalid)
+ ]
birthdatesParser :: Parser [Birthdate]
birthdatesParser = many (many newline >> birthdateParser <* many newline)