{-# LANGUAGE OverloadedStrings, ScopedTypeVariables #-} module Utils where import Data.Word (Word8) import qualified Data.ByteString.Lazy.Char8 as B import qualified Data.ByteString.Lazy as BW import Text.ProtocolBuffers.WireMessage (messageGet, messagePut, Wire) import Text.ProtocolBuffers.Reflections (ReflectDescriptor) import Network.Riak.MontageClient (MontageObject(..)) import Proto.User.UserInfo import Proto.User.UserEvent import Proto.User.UserName putDecimal' :: Int -> [Word8] putDecimal' 0 = [] putDecimal' i = ((fromIntegral f) + 48) : putDecimal' (fromIntegral r) where (r, f) = i `divMod` 10 {-# INLINE putDecimal' #-} putDecimal :: Int -> B.ByteString putDecimal i | i < 0 = BW.pack $ (45 :: Word8) : (reverse $ putDecimal' $ abs i) | otherwise = BW.pack $ reverse $ putDecimal' i {-# INLINE putDecimal #-} generateUI :: (Int, Int) -> MontageObject generateUI (key, uid) = MontageObject Nothing "u-info" key' data' Nothing where key' = putDecimal $ fromIntegral key data' = messagePut $ UserInfo { uid = fromIntegral uid } generateUE :: (Int, Int) -> MontageObject generateUE (key, eid) = MontageObject Nothing "u-event" key' data' Nothing where key' = putDecimal $ fromIntegral key data' = messagePut $ UserEvent { eid = fromIntegral eid } generateUN :: (Int, BW.ByteString) -> MontageObject generateUN (key, nameStr) = MontageObject Nothing "u-name" key' data' Nothing where key' = putDecimal $ fromIntegral key data' = messagePut $ UserName { name = nameStr }