module Data.BTree.UUID
( UUID
, uuid
)
where
import Data.Word
import Text.Printf
import Control.Concurrent
import Data.Typeable
import qualified Data.Char as C
import Data.Serialize
import System.IO.Unsafe
import qualified Data.ByteString.Char8 as B
import qualified Data.ByteString.Lazy.Char8 as BL
import qualified Data.ByteString.Base64 as B64
newtype UUID = UUID { unUUID :: B.ByteString }
deriving (Ord, Eq)
instance Serialize UUID where
put = put . unUUID
get = UUID `fmap` get
instance Show UUID where
show (UUID bs) = B.unpack $ B64.encode bs
uuids :: MVar Int
uuids = unsafePerformIO $ newMVar 1
uuid :: IO UUID
uuid = (UUID . encode) `fmap`
(modifyMVar uuids $ \n -> return (n+1, n))