module Data.UUID.Named
(generateNamed
,namespaceDNS
,namespaceURL
,namespaceOID
,namespaceX500
) where
import Data.UUID.Types.Internal
import Control.Applicative ((<*>),(<$>))
import Data.Binary.Get (runGet, getWord32be)
import Data.Maybe
import Data.Word (Word8)
import qualified Data.ByteString as B
import qualified Data.ByteString.Lazy as BL
generateNamed :: (B.ByteString -> B.ByteString)
-> Word8
-> UUID
-> [Word8]
-> UUID
generateNamed :: (ByteString -> ByteString) -> Word8 -> UUID -> [Word8] -> UUID
generateNamed ByteString -> ByteString
hash Word8
version UUID
namespace [Word8]
object =
let chunk :: ByteString
chunk = [Word8] -> ByteString
B.pack forall a b. (a -> b) -> a -> b
$ UUID -> [Word8]
toList UUID
namespace forall a. [a] -> [a] -> [a]
++ [Word8]
object
bytes :: ByteString
bytes = [ByteString] -> ByteString
BL.fromChunks forall b c a. (b -> c) -> (a -> b) -> a -> c
. (forall a. a -> [a] -> [a]
:[]) forall a b. (a -> b) -> a -> b
$ ByteString -> ByteString
hash ByteString
chunk
w :: Get Word32
w = Get Word32
getWord32be
unpackBytes :: ByteString -> UUID
unpackBytes = forall a. Get a -> ByteString -> a
runGet forall a b. (a -> b) -> a -> b
$
Word8 -> Word32 -> Word32 -> Word32 -> Word32 -> UUID
buildFromWords Word8
version forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word32
w forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Get Word32
w forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Get Word32
w forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Get Word32
w
in ByteString -> UUID
unpackBytes ByteString
bytes
unsafeFromString :: String -> UUID
unsafeFromString :: String -> UUID
unsafeFromString = forall a. HasCallStack => Maybe a -> a
fromJust forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Maybe UUID
fromString
namespaceDNS :: UUID
namespaceDNS :: UUID
namespaceDNS = String -> UUID
unsafeFromString String
"6ba7b810-9dad-11d1-80b4-00c04fd430c8"
namespaceURL :: UUID
namespaceURL :: UUID
namespaceURL = String -> UUID
unsafeFromString String
"6ba7b811-9dad-11d1-80b4-00c04fd430c8"
namespaceOID :: UUID
namespaceOID :: UUID
namespaceOID = String -> UUID
unsafeFromString String
"6ba7b812-9dad-11d1-80b4-00c04fd430c8"
namespaceX500 :: UUID
namespaceX500 :: UUID
namespaceX500 = String -> UUID
unsafeFromString String
"6ba7b814-9dad-11d1-80b4-00c04fd430c8"