dbus-core-0.8: hs/DBus/UUID.hs
{-
Copyright (C) 2009 John Millikin <jmillikin@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-}
module DBus.UUID
( UUID
, toHex
, fromHex
) where
import Data.Text.Lazy (Text)
import qualified Data.Text.Lazy as TL
newtype UUID = UUID Text -- TODO: (Word64, Word64)?
deriving (Eq)
instance Show UUID where
showsPrec d uuid = showParen (d > 10) $
showString "UUID " . shows (toHex uuid)
toHex :: UUID -> Text
toHex (UUID text) = text
fromHex :: Text -> Maybe UUID
fromHex text = if validUUID text
then Just $ UUID text
else Nothing
validUUID :: Text -> Bool
validUUID text = valid where
valid = and [TL.length text == 32, TL.all validChar text]
validChar c = or
[ c >= '0' && c <= '9'
, c >= 'a' && c <= 'f'
, c >= 'A' && c <= 'F'
]