From fc74d2df894a0aad13811822cdfcd01200bc1e1b Mon Sep 17 00:00:00 2001 From: Jon Kristensen Date: Sat, 21 Apr 2012 19:18:43 +0200 Subject: [PATCH] recommitted version functions, rewritten to work with Text and attoparsec --- src/Network/XMPP/Utilities.hs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/Network/XMPP/Utilities.hs b/src/Network/XMPP/Utilities.hs index 794fe0f..7841698 100644 --- a/src/Network/XMPP/Utilities.hs +++ b/src/Network/XMPP/Utilities.hs @@ -15,6 +15,7 @@ import Control.Monad.STM import Control.Concurrent.STM.TVar import Prelude +import qualified Data.Attoparsec.Text as AP import qualified Data.Text as Text @@ -60,4 +61,26 @@ idGenerator prefix = atomically $ do -- Characters allowed in IDs. repertoire :: String - repertoire = ['a'..'z'] \ No newline at end of file + repertoire = ['a'..'z'] + + +-- Converts a "." numeric version number to a @Version@ object. +versionFromString :: Text.Text -> Maybe Version +versionFromString s = case AP.parseOnly versionParser s of + Right version -> Just version + Left _ -> Nothing + + +-- Constructs a "Version" based on the major and minor version numbers. +versionFromNumbers :: Integer -> Integer -> Version +versionFromNumbers major minor = Version major minor + + +-- Read numbers, a dot, more numbers, and end-of-file. +versionParser :: AP.Parser Version +versionParser = do + major <- AP.many1 AP.digit + AP.skip (\ c -> c == '.') + minor <- AP.many1 AP.digit + AP.endOfInput + return $ Version (read major) (read minor) \ No newline at end of file