grapesy-1.1.0: interop/Interop/Util/Messages.hs
-- | Utilities for working with the message types from the interop testsuite
module Interop.Util.Messages (
-- * BoolValue
boolValue
-- * Payload
, payloadOfZeroes
, payloadOfType
, clearPayload
) where
import Data.ByteString qualified as BS.Strict
import Data.ByteString qualified as Strict (ByteString)
import Data.ByteString.Char8 qualified as BS.Strict.Char8
import Data.ProtoLens.Labels ()
import Network.GRPC.Common.Protobuf
import Interop.Util.Exceptions
import Proto.API.Interop
{-------------------------------------------------------------------------------
BoolValue
-------------------------------------------------------------------------------}
boolValue :: Bool -> Proto BoolValue
boolValue b = defMessage & #value .~ b
{-------------------------------------------------------------------------------
Payload
-------------------------------------------------------------------------------}
payloadOfZeroes :: Int -> Proto Payload
payloadOfZeroes sz = defMessage & #body .~ BS.Strict.pack (replicate sz 0)
payloadOfType :: Integral size => Proto PayloadType -> size -> IO (Proto Payload)
payloadOfType type' size = do
body <-
case getProto type' of
COMPRESSABLE ->
return $ BS.Strict.pack (replicate (fromIntegral size) 0)
PayloadType'Unrecognized x ->
assertUnrecognized x
return $
defMessage
& #type' .~ type'
& #body .~ body
clearPayload ::
( HasField a "payload" b
, HasField b "body" Strict.ByteString
)
=> a -> a
clearPayload x = x & #payload . #body .~ BS.Strict.Char8.pack replacement
where
replacement :: String
replacement = concat [
"<<payload of "
, show (BS.Strict.length (x ^. #payload . #body))
, " bytes>>"
]