{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE DeriveGeneric #-}
{-# OPTIONS_GHC -Wno-unused-imports #-}
{- |
Module: Capnp.Capnp.Rpc.Pure
Description: High-level generated module for capnp/rpc.capnp
This module is the generated code for capnp/rpc.capnp,
for the high-level api.
-}
module Capnp.Capnp.Rpc.Pure (Accept(..), Bootstrap(..), Call(..), CapDescriptor(..), Disembargo(..), Exception(..), Finish(..), Join(..), Message(..), MessageTarget(..), Payload(..), PromisedAnswer(..), Provide(..), Release(..), Resolve(..), Return(..), ThirdPartyCapDescriptor(..), Call'sendResultsTo(..), Disembargo'context(..), Capnp.ById.Xb312981b2552a250.Exception'Type(..), PromisedAnswer'Op(..), Resolve'(..), Return'(..)
) where
-- Code generated by capnpc-haskell. DO NOT EDIT.
-- Generated from schema file: capnp/rpc.capnp
import Data.Int
import Data.Word
import Data.Default (Default(def))
import GHC.Generics (Generic)
import Data.Capnp.Basics.Pure (Data, Text)
import Control.Monad.Catch (MonadThrow)
import Data.Capnp.TraversalLimit (MonadLimit)
import Control.Monad (forM_)
import qualified Data.Capnp.Message as M'
import qualified Data.Capnp.Untyped as U'
import qualified Data.Capnp.Untyped.Pure as PU'
import qualified Data.Capnp.GenHelpers.Pure as PH'
import qualified Data.Capnp.Classes as C'
import qualified Data.Vector as V
import qualified Data.ByteString as BS
import qualified Capnp.ById.Xb312981b2552a250
import qualified Capnp.ById.Xbdf87d7bb8304e81.Pure
import qualified Capnp.ById.Xbdf87d7bb8304e81
data Accept
    = Accept
        {questionId :: Word32,
        provision :: Maybe (PU'.PtrType),
        embargo :: Bool}
    deriving(Show,Read,Eq,Generic)
instance C'.Decerialize Accept where
    type Cerial msg Accept = Capnp.ById.Xb312981b2552a250.Accept msg
    decerialize raw = do
        Accept <$>
            (Capnp.ById.Xb312981b2552a250.get_Accept'questionId raw) <*>
            (Capnp.ById.Xb312981b2552a250.get_Accept'provision raw >>= C'.decerialize) <*>
            (Capnp.ById.Xb312981b2552a250.get_Accept'embargo raw)
instance C'.Marshal Accept where
    marshalInto raw value = do
        case value of
            Accept{..} -> do
                Capnp.ById.Xb312981b2552a250.set_Accept'questionId raw questionId
                field_ <- C'.cerialize (U'.message raw) provision
                Capnp.ById.Xb312981b2552a250.set_Accept'provision raw field_
                Capnp.ById.Xb312981b2552a250.set_Accept'embargo raw embargo
instance C'.Cerialize s Accept
instance C'.FromStruct M'.ConstMsg Accept where
    fromStruct struct = do
        raw <- C'.fromStruct struct
        C'.decerialize (raw :: Capnp.ById.Xb312981b2552a250.Accept M'.ConstMsg)
instance Default Accept where
    def = PH'.defaultStruct
data Bootstrap
    = Bootstrap
        {questionId :: Word32,
        deprecatedObjectId :: Maybe (PU'.PtrType)}
    deriving(Show,Read,Eq,Generic)
instance C'.Decerialize Bootstrap where
    type Cerial msg Bootstrap = Capnp.ById.Xb312981b2552a250.Bootstrap msg
    decerialize raw = do
        Bootstrap <$>
            (Capnp.ById.Xb312981b2552a250.get_Bootstrap'questionId raw) <*>
            (Capnp.ById.Xb312981b2552a250.get_Bootstrap'deprecatedObjectId raw >>= C'.decerialize)
instance C'.Marshal Bootstrap where
    marshalInto raw value = do
        case value of
            Bootstrap{..} -> do
                Capnp.ById.Xb312981b2552a250.set_Bootstrap'questionId raw questionId
                field_ <- C'.cerialize (U'.message raw) deprecatedObjectId
                Capnp.ById.Xb312981b2552a250.set_Bootstrap'deprecatedObjectId raw field_
instance C'.Cerialize s Bootstrap
instance C'.FromStruct M'.ConstMsg Bootstrap where
    fromStruct struct = do
        raw <- C'.fromStruct struct
        C'.decerialize (raw :: Capnp.ById.Xb312981b2552a250.Bootstrap M'.ConstMsg)
instance Default Bootstrap where
    def = PH'.defaultStruct
data Call
    = Call
        {questionId :: Word32,
        target :: MessageTarget,
        interfaceId :: Word64,
        methodId :: Word16,
        params :: Payload,
        sendResultsTo :: Call'sendResultsTo,
        allowThirdPartyTailCall :: Bool}
    deriving(Show,Read,Eq,Generic)
instance C'.Decerialize Call where
    type Cerial msg Call = Capnp.ById.Xb312981b2552a250.Call msg
    decerialize raw = do
        Call <$>
            (Capnp.ById.Xb312981b2552a250.get_Call'questionId raw) <*>
            (Capnp.ById.Xb312981b2552a250.get_Call'target raw >>= C'.decerialize) <*>
            (Capnp.ById.Xb312981b2552a250.get_Call'interfaceId raw) <*>
            (Capnp.ById.Xb312981b2552a250.get_Call'methodId raw) <*>
            (Capnp.ById.Xb312981b2552a250.get_Call'params raw >>= C'.decerialize) <*>
            (Capnp.ById.Xb312981b2552a250.get_Call'sendResultsTo raw >>= C'.decerialize) <*>
            (Capnp.ById.Xb312981b2552a250.get_Call'allowThirdPartyTailCall raw)
instance C'.Marshal Call where
    marshalInto raw value = do
        case value of
            Call{..} -> do
                Capnp.ById.Xb312981b2552a250.set_Call'questionId raw questionId
                field_ <- Capnp.ById.Xb312981b2552a250.new_Call'target raw
                C'.marshalInto field_ target
                Capnp.ById.Xb312981b2552a250.set_Call'interfaceId raw interfaceId
                Capnp.ById.Xb312981b2552a250.set_Call'methodId raw methodId
                field_ <- Capnp.ById.Xb312981b2552a250.new_Call'params raw
                C'.marshalInto field_ params
                field_ <- Capnp.ById.Xb312981b2552a250.get_Call'sendResultsTo raw
                C'.marshalInto field_ sendResultsTo
                Capnp.ById.Xb312981b2552a250.set_Call'allowThirdPartyTailCall raw allowThirdPartyTailCall
instance C'.Cerialize s Call
instance C'.FromStruct M'.ConstMsg Call where
    fromStruct struct = do
        raw <- C'.fromStruct struct
        C'.decerialize (raw :: Capnp.ById.Xb312981b2552a250.Call M'.ConstMsg)
instance Default Call where
    def = PH'.defaultStruct
data CapDescriptor
    = CapDescriptor'none
    | CapDescriptor'senderHosted (Word32)
    | CapDescriptor'senderPromise (Word32)
    | CapDescriptor'receiverHosted (Word32)
    | CapDescriptor'receiverAnswer (PromisedAnswer)
    | CapDescriptor'thirdPartyHosted (ThirdPartyCapDescriptor)
    | CapDescriptor'unknown' Word16
    deriving(Show,Read,Eq,Generic)
instance C'.Decerialize CapDescriptor where
    type Cerial msg CapDescriptor = Capnp.ById.Xb312981b2552a250.CapDescriptor msg
    decerialize raw = do
        raw <- Capnp.ById.Xb312981b2552a250.get_CapDescriptor' raw
        case raw of
            Capnp.ById.Xb312981b2552a250.CapDescriptor'none -> pure CapDescriptor'none
            Capnp.ById.Xb312981b2552a250.CapDescriptor'senderHosted val -> pure (CapDescriptor'senderHosted val)
            Capnp.ById.Xb312981b2552a250.CapDescriptor'senderPromise val -> pure (CapDescriptor'senderPromise val)
            Capnp.ById.Xb312981b2552a250.CapDescriptor'receiverHosted val -> pure (CapDescriptor'receiverHosted val)
            Capnp.ById.Xb312981b2552a250.CapDescriptor'receiverAnswer val -> CapDescriptor'receiverAnswer <$> C'.decerialize val
            Capnp.ById.Xb312981b2552a250.CapDescriptor'thirdPartyHosted val -> CapDescriptor'thirdPartyHosted <$> C'.decerialize val
            Capnp.ById.Xb312981b2552a250.CapDescriptor'unknown' val -> pure $ CapDescriptor'unknown' val
instance C'.Marshal CapDescriptor where
    marshalInto raw value = do
        case value of
            CapDescriptor'none -> Capnp.ById.Xb312981b2552a250.set_CapDescriptor'none raw
            CapDescriptor'senderHosted arg_ -> Capnp.ById.Xb312981b2552a250.set_CapDescriptor'senderHosted raw arg_
            CapDescriptor'senderPromise arg_ -> Capnp.ById.Xb312981b2552a250.set_CapDescriptor'senderPromise raw arg_
            CapDescriptor'receiverHosted arg_ -> Capnp.ById.Xb312981b2552a250.set_CapDescriptor'receiverHosted raw arg_
            CapDescriptor'receiverAnswer arg_ -> do
                field_ <- Capnp.ById.Xb312981b2552a250.new_CapDescriptor'receiverAnswer raw
                C'.marshalInto field_ arg_
            CapDescriptor'thirdPartyHosted arg_ -> do
                field_ <- Capnp.ById.Xb312981b2552a250.new_CapDescriptor'thirdPartyHosted raw
                C'.marshalInto field_ arg_
            CapDescriptor'unknown' arg_ -> Capnp.ById.Xb312981b2552a250.set_CapDescriptor'unknown' raw arg_
instance C'.Cerialize s CapDescriptor
instance C'.FromStruct M'.ConstMsg CapDescriptor where
    fromStruct struct = do
        raw <- C'.fromStruct struct
        C'.decerialize (raw :: Capnp.ById.Xb312981b2552a250.CapDescriptor M'.ConstMsg)
instance Default CapDescriptor where
    def = PH'.defaultStruct
data Disembargo
    = Disembargo
        {target :: MessageTarget,
        context :: Disembargo'context}
    deriving(Show,Read,Eq,Generic)
instance C'.Decerialize Disembargo where
    type Cerial msg Disembargo = Capnp.ById.Xb312981b2552a250.Disembargo msg
    decerialize raw = do
        Disembargo <$>
            (Capnp.ById.Xb312981b2552a250.get_Disembargo'target raw >>= C'.decerialize) <*>
            (Capnp.ById.Xb312981b2552a250.get_Disembargo'context raw >>= C'.decerialize)
instance C'.Marshal Disembargo where
    marshalInto raw value = do
        case value of
            Disembargo{..} -> do
                field_ <- Capnp.ById.Xb312981b2552a250.new_Disembargo'target raw
                C'.marshalInto field_ target
                field_ <- Capnp.ById.Xb312981b2552a250.get_Disembargo'context raw
                C'.marshalInto field_ context
instance C'.Cerialize s Disembargo
instance C'.FromStruct M'.ConstMsg Disembargo where
    fromStruct struct = do
        raw <- C'.fromStruct struct
        C'.decerialize (raw :: Capnp.ById.Xb312981b2552a250.Disembargo M'.ConstMsg)
instance Default Disembargo where
    def = PH'.defaultStruct
data Exception
    = Exception
        {reason :: Text,
        obsoleteIsCallersFault :: Bool,
        obsoleteDurability :: Word16,
        type_ :: Capnp.ById.Xb312981b2552a250.Exception'Type}
    deriving(Show,Read,Eq,Generic)
instance C'.Decerialize Exception where
    type Cerial msg Exception = Capnp.ById.Xb312981b2552a250.Exception msg
    decerialize raw = do
        Exception <$>
            (Capnp.ById.Xb312981b2552a250.get_Exception'reason raw >>= C'.decerialize) <*>
            (Capnp.ById.Xb312981b2552a250.get_Exception'obsoleteIsCallersFault raw) <*>
            (Capnp.ById.Xb312981b2552a250.get_Exception'obsoleteDurability raw) <*>
            (Capnp.ById.Xb312981b2552a250.get_Exception'type_ raw)
instance C'.Marshal Exception where
    marshalInto raw value = do
        case value of
            Exception{..} -> do
                field_ <- C'.cerialize (U'.message raw) reason
                Capnp.ById.Xb312981b2552a250.set_Exception'reason raw field_
                Capnp.ById.Xb312981b2552a250.set_Exception'obsoleteIsCallersFault raw obsoleteIsCallersFault
                Capnp.ById.Xb312981b2552a250.set_Exception'obsoleteDurability raw obsoleteDurability
                Capnp.ById.Xb312981b2552a250.set_Exception'type_ raw type_
instance C'.Cerialize s Exception
instance C'.FromStruct M'.ConstMsg Exception where
    fromStruct struct = do
        raw <- C'.fromStruct struct
        C'.decerialize (raw :: Capnp.ById.Xb312981b2552a250.Exception M'.ConstMsg)
instance Default Exception where
    def = PH'.defaultStruct
data Finish
    = Finish
        {questionId :: Word32,
        releaseResultCaps :: Bool}
    deriving(Show,Read,Eq,Generic)
instance C'.Decerialize Finish where
    type Cerial msg Finish = Capnp.ById.Xb312981b2552a250.Finish msg
    decerialize raw = do
        Finish <$>
            (Capnp.ById.Xb312981b2552a250.get_Finish'questionId raw) <*>
            (Capnp.ById.Xb312981b2552a250.get_Finish'releaseResultCaps raw)
instance C'.Marshal Finish where
    marshalInto raw value = do
        case value of
            Finish{..} -> do
                Capnp.ById.Xb312981b2552a250.set_Finish'questionId raw questionId
                Capnp.ById.Xb312981b2552a250.set_Finish'releaseResultCaps raw releaseResultCaps
instance C'.Cerialize s Finish
instance C'.FromStruct M'.ConstMsg Finish where
    fromStruct struct = do
        raw <- C'.fromStruct struct
        C'.decerialize (raw :: Capnp.ById.Xb312981b2552a250.Finish M'.ConstMsg)
instance Default Finish where
    def = PH'.defaultStruct
data Join
    = Join
        {questionId :: Word32,
        target :: MessageTarget,
        keyPart :: Maybe (PU'.PtrType)}
    deriving(Show,Read,Eq,Generic)
instance C'.Decerialize Join where
    type Cerial msg Join = Capnp.ById.Xb312981b2552a250.Join msg
    decerialize raw = do
        Join <$>
            (Capnp.ById.Xb312981b2552a250.get_Join'questionId raw) <*>
            (Capnp.ById.Xb312981b2552a250.get_Join'target raw >>= C'.decerialize) <*>
            (Capnp.ById.Xb312981b2552a250.get_Join'keyPart raw >>= C'.decerialize)
instance C'.Marshal Join where
    marshalInto raw value = do
        case value of
            Join{..} -> do
                Capnp.ById.Xb312981b2552a250.set_Join'questionId raw questionId
                field_ <- Capnp.ById.Xb312981b2552a250.new_Join'target raw
                C'.marshalInto field_ target
                field_ <- C'.cerialize (U'.message raw) keyPart
                Capnp.ById.Xb312981b2552a250.set_Join'keyPart raw field_
instance C'.Cerialize s Join
instance C'.FromStruct M'.ConstMsg Join where
    fromStruct struct = do
        raw <- C'.fromStruct struct
        C'.decerialize (raw :: Capnp.ById.Xb312981b2552a250.Join M'.ConstMsg)
instance Default Join where
    def = PH'.defaultStruct
data Message
    = Message'unimplemented (Message)
    | Message'abort (Exception)
    | Message'call (Call)
    | Message'return (Return)
    | Message'finish (Finish)
    | Message'resolve (Resolve)
    | Message'release (Release)
    | Message'obsoleteSave (Maybe (PU'.PtrType))
    | Message'bootstrap (Bootstrap)
    | Message'obsoleteDelete (Maybe (PU'.PtrType))
    | Message'provide (Provide)
    | Message'accept (Accept)
    | Message'join (Join)
    | Message'disembargo (Disembargo)
    | Message'unknown' Word16
    deriving(Show,Read,Eq,Generic)
instance C'.Decerialize Message where
    type Cerial msg Message = Capnp.ById.Xb312981b2552a250.Message msg
    decerialize raw = do
        raw <- Capnp.ById.Xb312981b2552a250.get_Message' raw
        case raw of
            Capnp.ById.Xb312981b2552a250.Message'unimplemented val -> Message'unimplemented <$> C'.decerialize val
            Capnp.ById.Xb312981b2552a250.Message'abort val -> Message'abort <$> C'.decerialize val
            Capnp.ById.Xb312981b2552a250.Message'call val -> Message'call <$> C'.decerialize val
            Capnp.ById.Xb312981b2552a250.Message'return val -> Message'return <$> C'.decerialize val
            Capnp.ById.Xb312981b2552a250.Message'finish val -> Message'finish <$> C'.decerialize val
            Capnp.ById.Xb312981b2552a250.Message'resolve val -> Message'resolve <$> C'.decerialize val
            Capnp.ById.Xb312981b2552a250.Message'release val -> Message'release <$> C'.decerialize val
            Capnp.ById.Xb312981b2552a250.Message'obsoleteSave val -> Message'obsoleteSave <$> C'.decerialize val
            Capnp.ById.Xb312981b2552a250.Message'bootstrap val -> Message'bootstrap <$> C'.decerialize val
            Capnp.ById.Xb312981b2552a250.Message'obsoleteDelete val -> Message'obsoleteDelete <$> C'.decerialize val
            Capnp.ById.Xb312981b2552a250.Message'provide val -> Message'provide <$> C'.decerialize val
            Capnp.ById.Xb312981b2552a250.Message'accept val -> Message'accept <$> C'.decerialize val
            Capnp.ById.Xb312981b2552a250.Message'join val -> Message'join <$> C'.decerialize val
            Capnp.ById.Xb312981b2552a250.Message'disembargo val -> Message'disembargo <$> C'.decerialize val
            Capnp.ById.Xb312981b2552a250.Message'unknown' val -> pure $ Message'unknown' val
instance C'.Marshal Message where
    marshalInto raw value = do
        case value of
            Message'unimplemented arg_ -> do
                field_ <- Capnp.ById.Xb312981b2552a250.new_Message'unimplemented raw
                C'.marshalInto field_ arg_
            Message'abort arg_ -> do
                field_ <- Capnp.ById.Xb312981b2552a250.new_Message'abort raw
                C'.marshalInto field_ arg_
            Message'call arg_ -> do
                field_ <- Capnp.ById.Xb312981b2552a250.new_Message'call raw
                C'.marshalInto field_ arg_
            Message'return arg_ -> do
                field_ <- Capnp.ById.Xb312981b2552a250.new_Message'return raw
                C'.marshalInto field_ arg_
            Message'finish arg_ -> do
                field_ <- Capnp.ById.Xb312981b2552a250.new_Message'finish raw
                C'.marshalInto field_ arg_
            Message'resolve arg_ -> do
                field_ <- Capnp.ById.Xb312981b2552a250.new_Message'resolve raw
                C'.marshalInto field_ arg_
            Message'release arg_ -> do
                field_ <- Capnp.ById.Xb312981b2552a250.new_Message'release raw
                C'.marshalInto field_ arg_
            Message'obsoleteSave arg_ -> do
                field_ <- C'.cerialize (U'.message raw) arg_
                Capnp.ById.Xb312981b2552a250.set_Message'obsoleteSave raw field_
            Message'bootstrap arg_ -> do
                field_ <- Capnp.ById.Xb312981b2552a250.new_Message'bootstrap raw
                C'.marshalInto field_ arg_
            Message'obsoleteDelete arg_ -> do
                field_ <- C'.cerialize (U'.message raw) arg_
                Capnp.ById.Xb312981b2552a250.set_Message'obsoleteDelete raw field_
            Message'provide arg_ -> do
                field_ <- Capnp.ById.Xb312981b2552a250.new_Message'provide raw
                C'.marshalInto field_ arg_
            Message'accept arg_ -> do
                field_ <- Capnp.ById.Xb312981b2552a250.new_Message'accept raw
                C'.marshalInto field_ arg_
            Message'join arg_ -> do
                field_ <- Capnp.ById.Xb312981b2552a250.new_Message'join raw
                C'.marshalInto field_ arg_
            Message'disembargo arg_ -> do
                field_ <- Capnp.ById.Xb312981b2552a250.new_Message'disembargo raw
                C'.marshalInto field_ arg_
            Message'unknown' arg_ -> Capnp.ById.Xb312981b2552a250.set_Message'unknown' raw arg_
instance C'.Cerialize s Message
instance C'.FromStruct M'.ConstMsg Message where
    fromStruct struct = do
        raw <- C'.fromStruct struct
        C'.decerialize (raw :: Capnp.ById.Xb312981b2552a250.Message M'.ConstMsg)
instance Default Message where
    def = PH'.defaultStruct
data MessageTarget
    = MessageTarget'importedCap (Word32)
    | MessageTarget'promisedAnswer (PromisedAnswer)
    | MessageTarget'unknown' Word16
    deriving(Show,Read,Eq,Generic)
instance C'.Decerialize MessageTarget where
    type Cerial msg MessageTarget = Capnp.ById.Xb312981b2552a250.MessageTarget msg
    decerialize raw = do
        raw <- Capnp.ById.Xb312981b2552a250.get_MessageTarget' raw
        case raw of
            Capnp.ById.Xb312981b2552a250.MessageTarget'importedCap val -> pure (MessageTarget'importedCap val)
            Capnp.ById.Xb312981b2552a250.MessageTarget'promisedAnswer val -> MessageTarget'promisedAnswer <$> C'.decerialize val
            Capnp.ById.Xb312981b2552a250.MessageTarget'unknown' val -> pure $ MessageTarget'unknown' val
instance C'.Marshal MessageTarget where
    marshalInto raw value = do
        case value of
            MessageTarget'importedCap arg_ -> Capnp.ById.Xb312981b2552a250.set_MessageTarget'importedCap raw arg_
            MessageTarget'promisedAnswer arg_ -> do
                field_ <- Capnp.ById.Xb312981b2552a250.new_MessageTarget'promisedAnswer raw
                C'.marshalInto field_ arg_
            MessageTarget'unknown' arg_ -> Capnp.ById.Xb312981b2552a250.set_MessageTarget'unknown' raw arg_
instance C'.Cerialize s MessageTarget
instance C'.FromStruct M'.ConstMsg MessageTarget where
    fromStruct struct = do
        raw <- C'.fromStruct struct
        C'.decerialize (raw :: Capnp.ById.Xb312981b2552a250.MessageTarget M'.ConstMsg)
instance Default MessageTarget where
    def = PH'.defaultStruct
data Payload
    = Payload
        {content :: Maybe (PU'.PtrType),
        capTable :: PU'.ListOf (CapDescriptor)}
    deriving(Show,Read,Eq,Generic)
instance C'.Decerialize Payload where
    type Cerial msg Payload = Capnp.ById.Xb312981b2552a250.Payload msg
    decerialize raw = do
        Payload <$>
            (Capnp.ById.Xb312981b2552a250.get_Payload'content raw >>= C'.decerialize) <*>
            (Capnp.ById.Xb312981b2552a250.get_Payload'capTable raw >>= C'.decerialize)
instance C'.Marshal Payload where
    marshalInto raw value = do
        case value of
            Payload{..} -> do
                field_ <- C'.cerialize (U'.message raw) content
                Capnp.ById.Xb312981b2552a250.set_Payload'content raw field_
                let len_ = V.length capTable
                field_ <- Capnp.ById.Xb312981b2552a250.new_Payload'capTable len_ raw
                forM_ [0..len_ - 1] $ \i -> do
                    elt <- C'.index i field_
                    C'.marshalInto elt (capTable V.! i)
instance C'.Cerialize s Payload
instance C'.FromStruct M'.ConstMsg Payload where
    fromStruct struct = do
        raw <- C'.fromStruct struct
        C'.decerialize (raw :: Capnp.ById.Xb312981b2552a250.Payload M'.ConstMsg)
instance Default Payload where
    def = PH'.defaultStruct
data PromisedAnswer
    = PromisedAnswer
        {questionId :: Word32,
        transform :: PU'.ListOf (PromisedAnswer'Op)}
    deriving(Show,Read,Eq,Generic)
instance C'.Decerialize PromisedAnswer where
    type Cerial msg PromisedAnswer = Capnp.ById.Xb312981b2552a250.PromisedAnswer msg
    decerialize raw = do
        PromisedAnswer <$>
            (Capnp.ById.Xb312981b2552a250.get_PromisedAnswer'questionId raw) <*>
            (Capnp.ById.Xb312981b2552a250.get_PromisedAnswer'transform raw >>= C'.decerialize)
instance C'.Marshal PromisedAnswer where
    marshalInto raw value = do
        case value of
            PromisedAnswer{..} -> do
                Capnp.ById.Xb312981b2552a250.set_PromisedAnswer'questionId raw questionId
                let len_ = V.length transform
                field_ <- Capnp.ById.Xb312981b2552a250.new_PromisedAnswer'transform len_ raw
                forM_ [0..len_ - 1] $ \i -> do
                    elt <- C'.index i field_
                    C'.marshalInto elt (transform V.! i)
instance C'.Cerialize s PromisedAnswer
instance C'.FromStruct M'.ConstMsg PromisedAnswer where
    fromStruct struct = do
        raw <- C'.fromStruct struct
        C'.decerialize (raw :: Capnp.ById.Xb312981b2552a250.PromisedAnswer M'.ConstMsg)
instance Default PromisedAnswer where
    def = PH'.defaultStruct
data Provide
    = Provide
        {questionId :: Word32,
        target :: MessageTarget,
        recipient :: Maybe (PU'.PtrType)}
    deriving(Show,Read,Eq,Generic)
instance C'.Decerialize Provide where
    type Cerial msg Provide = Capnp.ById.Xb312981b2552a250.Provide msg
    decerialize raw = do
        Provide <$>
            (Capnp.ById.Xb312981b2552a250.get_Provide'questionId raw) <*>
            (Capnp.ById.Xb312981b2552a250.get_Provide'target raw >>= C'.decerialize) <*>
            (Capnp.ById.Xb312981b2552a250.get_Provide'recipient raw >>= C'.decerialize)
instance C'.Marshal Provide where
    marshalInto raw value = do
        case value of
            Provide{..} -> do
                Capnp.ById.Xb312981b2552a250.set_Provide'questionId raw questionId
                field_ <- Capnp.ById.Xb312981b2552a250.new_Provide'target raw
                C'.marshalInto field_ target
                field_ <- C'.cerialize (U'.message raw) recipient
                Capnp.ById.Xb312981b2552a250.set_Provide'recipient raw field_
instance C'.Cerialize s Provide
instance C'.FromStruct M'.ConstMsg Provide where
    fromStruct struct = do
        raw <- C'.fromStruct struct
        C'.decerialize (raw :: Capnp.ById.Xb312981b2552a250.Provide M'.ConstMsg)
instance Default Provide where
    def = PH'.defaultStruct
data Release
    = Release
        {id :: Word32,
        referenceCount :: Word32}
    deriving(Show,Read,Eq,Generic)
instance C'.Decerialize Release where
    type Cerial msg Release = Capnp.ById.Xb312981b2552a250.Release msg
    decerialize raw = do
        Release <$>
            (Capnp.ById.Xb312981b2552a250.get_Release'id raw) <*>
            (Capnp.ById.Xb312981b2552a250.get_Release'referenceCount raw)
instance C'.Marshal Release where
    marshalInto raw value = do
        case value of
            Release{..} -> do
                Capnp.ById.Xb312981b2552a250.set_Release'id raw id
                Capnp.ById.Xb312981b2552a250.set_Release'referenceCount raw referenceCount
instance C'.Cerialize s Release
instance C'.FromStruct M'.ConstMsg Release where
    fromStruct struct = do
        raw <- C'.fromStruct struct
        C'.decerialize (raw :: Capnp.ById.Xb312981b2552a250.Release M'.ConstMsg)
instance Default Release where
    def = PH'.defaultStruct
data Resolve
    = Resolve
        {promiseId :: Word32,
        union' :: Resolve'}
    deriving(Show,Read,Eq,Generic)
instance C'.Decerialize Resolve where
    type Cerial msg Resolve = Capnp.ById.Xb312981b2552a250.Resolve msg
    decerialize raw = do
        Resolve <$>
            (Capnp.ById.Xb312981b2552a250.get_Resolve'promiseId raw) <*>
            (Capnp.ById.Xb312981b2552a250.get_Resolve'union' raw >>= C'.decerialize)
instance C'.Marshal Resolve where
    marshalInto raw value = do
        case value of
            Resolve{..} -> do
                Capnp.ById.Xb312981b2552a250.set_Resolve'promiseId raw promiseId
                field_ <- Capnp.ById.Xb312981b2552a250.get_Resolve'union' raw
                C'.marshalInto field_ union'
instance C'.Cerialize s Resolve
instance C'.FromStruct M'.ConstMsg Resolve where
    fromStruct struct = do
        raw <- C'.fromStruct struct
        C'.decerialize (raw :: Capnp.ById.Xb312981b2552a250.Resolve M'.ConstMsg)
instance Default Resolve where
    def = PH'.defaultStruct
data Return
    = Return
        {answerId :: Word32,
        releaseParamCaps :: Bool,
        union' :: Return'}
    deriving(Show,Read,Eq,Generic)
instance C'.Decerialize Return where
    type Cerial msg Return = Capnp.ById.Xb312981b2552a250.Return msg
    decerialize raw = do
        Return <$>
            (Capnp.ById.Xb312981b2552a250.get_Return'answerId raw) <*>
            (Capnp.ById.Xb312981b2552a250.get_Return'releaseParamCaps raw) <*>
            (Capnp.ById.Xb312981b2552a250.get_Return'union' raw >>= C'.decerialize)
instance C'.Marshal Return where
    marshalInto raw value = do
        case value of
            Return{..} -> do
                Capnp.ById.Xb312981b2552a250.set_Return'answerId raw answerId
                Capnp.ById.Xb312981b2552a250.set_Return'releaseParamCaps raw releaseParamCaps
                field_ <- Capnp.ById.Xb312981b2552a250.get_Return'union' raw
                C'.marshalInto field_ union'
instance C'.Cerialize s Return
instance C'.FromStruct M'.ConstMsg Return where
    fromStruct struct = do
        raw <- C'.fromStruct struct
        C'.decerialize (raw :: Capnp.ById.Xb312981b2552a250.Return M'.ConstMsg)
instance Default Return where
    def = PH'.defaultStruct
data ThirdPartyCapDescriptor
    = ThirdPartyCapDescriptor
        {id :: Maybe (PU'.PtrType),
        vineId :: Word32}
    deriving(Show,Read,Eq,Generic)
instance C'.Decerialize ThirdPartyCapDescriptor where
    type Cerial msg ThirdPartyCapDescriptor = Capnp.ById.Xb312981b2552a250.ThirdPartyCapDescriptor msg
    decerialize raw = do
        ThirdPartyCapDescriptor <$>
            (Capnp.ById.Xb312981b2552a250.get_ThirdPartyCapDescriptor'id raw >>= C'.decerialize) <*>
            (Capnp.ById.Xb312981b2552a250.get_ThirdPartyCapDescriptor'vineId raw)
instance C'.Marshal ThirdPartyCapDescriptor where
    marshalInto raw value = do
        case value of
            ThirdPartyCapDescriptor{..} -> do
                field_ <- C'.cerialize (U'.message raw) id
                Capnp.ById.Xb312981b2552a250.set_ThirdPartyCapDescriptor'id raw field_
                Capnp.ById.Xb312981b2552a250.set_ThirdPartyCapDescriptor'vineId raw vineId
instance C'.Cerialize s ThirdPartyCapDescriptor
instance C'.FromStruct M'.ConstMsg ThirdPartyCapDescriptor where
    fromStruct struct = do
        raw <- C'.fromStruct struct
        C'.decerialize (raw :: Capnp.ById.Xb312981b2552a250.ThirdPartyCapDescriptor M'.ConstMsg)
instance Default ThirdPartyCapDescriptor where
    def = PH'.defaultStruct
data Call'sendResultsTo
    = Call'sendResultsTo'caller
    | Call'sendResultsTo'yourself
    | Call'sendResultsTo'thirdParty (Maybe (PU'.PtrType))
    | Call'sendResultsTo'unknown' Word16
    deriving(Show,Read,Eq,Generic)
instance C'.Decerialize Call'sendResultsTo where
    type Cerial msg Call'sendResultsTo = Capnp.ById.Xb312981b2552a250.Call'sendResultsTo msg
    decerialize raw = do
        raw <- Capnp.ById.Xb312981b2552a250.get_Call'sendResultsTo' raw
        case raw of
            Capnp.ById.Xb312981b2552a250.Call'sendResultsTo'caller -> pure Call'sendResultsTo'caller
            Capnp.ById.Xb312981b2552a250.Call'sendResultsTo'yourself -> pure Call'sendResultsTo'yourself
            Capnp.ById.Xb312981b2552a250.Call'sendResultsTo'thirdParty val -> Call'sendResultsTo'thirdParty <$> C'.decerialize val
            Capnp.ById.Xb312981b2552a250.Call'sendResultsTo'unknown' val -> pure $ Call'sendResultsTo'unknown' val
instance C'.Marshal Call'sendResultsTo where
    marshalInto raw value = do
        case value of
            Call'sendResultsTo'caller -> Capnp.ById.Xb312981b2552a250.set_Call'sendResultsTo'caller raw
            Call'sendResultsTo'yourself -> Capnp.ById.Xb312981b2552a250.set_Call'sendResultsTo'yourself raw
            Call'sendResultsTo'thirdParty arg_ -> do
                field_ <- C'.cerialize (U'.message raw) arg_
                Capnp.ById.Xb312981b2552a250.set_Call'sendResultsTo'thirdParty raw field_
            Call'sendResultsTo'unknown' arg_ -> Capnp.ById.Xb312981b2552a250.set_Call'sendResultsTo'unknown' raw arg_
instance C'.FromStruct M'.ConstMsg Call'sendResultsTo where
    fromStruct struct = do
        raw <- C'.fromStruct struct
        C'.decerialize (raw :: Capnp.ById.Xb312981b2552a250.Call'sendResultsTo M'.ConstMsg)
instance Default Call'sendResultsTo where
    def = PH'.defaultStruct
data Disembargo'context
    = Disembargo'context'senderLoopback (Word32)
    | Disembargo'context'receiverLoopback (Word32)
    | Disembargo'context'accept
    | Disembargo'context'provide (Word32)
    | Disembargo'context'unknown' Word16
    deriving(Show,Read,Eq,Generic)
instance C'.Decerialize Disembargo'context where
    type Cerial msg Disembargo'context = Capnp.ById.Xb312981b2552a250.Disembargo'context msg
    decerialize raw = do
        raw <- Capnp.ById.Xb312981b2552a250.get_Disembargo'context' raw
        case raw of
            Capnp.ById.Xb312981b2552a250.Disembargo'context'senderLoopback val -> pure (Disembargo'context'senderLoopback val)
            Capnp.ById.Xb312981b2552a250.Disembargo'context'receiverLoopback val -> pure (Disembargo'context'receiverLoopback val)
            Capnp.ById.Xb312981b2552a250.Disembargo'context'accept -> pure Disembargo'context'accept
            Capnp.ById.Xb312981b2552a250.Disembargo'context'provide val -> pure (Disembargo'context'provide val)
            Capnp.ById.Xb312981b2552a250.Disembargo'context'unknown' val -> pure $ Disembargo'context'unknown' val
instance C'.Marshal Disembargo'context where
    marshalInto raw value = do
        case value of
            Disembargo'context'senderLoopback arg_ -> Capnp.ById.Xb312981b2552a250.set_Disembargo'context'senderLoopback raw arg_
            Disembargo'context'receiverLoopback arg_ -> Capnp.ById.Xb312981b2552a250.set_Disembargo'context'receiverLoopback raw arg_
            Disembargo'context'accept -> Capnp.ById.Xb312981b2552a250.set_Disembargo'context'accept raw
            Disembargo'context'provide arg_ -> Capnp.ById.Xb312981b2552a250.set_Disembargo'context'provide raw arg_
            Disembargo'context'unknown' arg_ -> Capnp.ById.Xb312981b2552a250.set_Disembargo'context'unknown' raw arg_
instance C'.FromStruct M'.ConstMsg Disembargo'context where
    fromStruct struct = do
        raw <- C'.fromStruct struct
        C'.decerialize (raw :: Capnp.ById.Xb312981b2552a250.Disembargo'context M'.ConstMsg)
instance Default Disembargo'context where
    def = PH'.defaultStruct
data PromisedAnswer'Op
    = PromisedAnswer'Op'noop
    | PromisedAnswer'Op'getPointerField (Word16)
    | PromisedAnswer'Op'unknown' Word16
    deriving(Show,Read,Eq,Generic)
instance C'.Decerialize PromisedAnswer'Op where
    type Cerial msg PromisedAnswer'Op = Capnp.ById.Xb312981b2552a250.PromisedAnswer'Op msg
    decerialize raw = do
        raw <- Capnp.ById.Xb312981b2552a250.get_PromisedAnswer'Op' raw
        case raw of
            Capnp.ById.Xb312981b2552a250.PromisedAnswer'Op'noop -> pure PromisedAnswer'Op'noop
            Capnp.ById.Xb312981b2552a250.PromisedAnswer'Op'getPointerField val -> pure (PromisedAnswer'Op'getPointerField val)
            Capnp.ById.Xb312981b2552a250.PromisedAnswer'Op'unknown' val -> pure $ PromisedAnswer'Op'unknown' val
instance C'.Marshal PromisedAnswer'Op where
    marshalInto raw value = do
        case value of
            PromisedAnswer'Op'noop -> Capnp.ById.Xb312981b2552a250.set_PromisedAnswer'Op'noop raw
            PromisedAnswer'Op'getPointerField arg_ -> Capnp.ById.Xb312981b2552a250.set_PromisedAnswer'Op'getPointerField raw arg_
            PromisedAnswer'Op'unknown' arg_ -> Capnp.ById.Xb312981b2552a250.set_PromisedAnswer'Op'unknown' raw arg_
instance C'.Cerialize s PromisedAnswer'Op
instance C'.FromStruct M'.ConstMsg PromisedAnswer'Op where
    fromStruct struct = do
        raw <- C'.fromStruct struct
        C'.decerialize (raw :: Capnp.ById.Xb312981b2552a250.PromisedAnswer'Op M'.ConstMsg)
instance Default PromisedAnswer'Op where
    def = PH'.defaultStruct
data Resolve'
    = Resolve'cap (CapDescriptor)
    | Resolve'exception (Exception)
    | Resolve'unknown' Word16
    deriving(Show,Read,Eq,Generic)
instance C'.Decerialize Resolve' where
    type Cerial msg Resolve' = Capnp.ById.Xb312981b2552a250.Resolve' msg
    decerialize raw = do
        raw <- Capnp.ById.Xb312981b2552a250.get_Resolve'' raw
        case raw of
            Capnp.ById.Xb312981b2552a250.Resolve'cap val -> Resolve'cap <$> C'.decerialize val
            Capnp.ById.Xb312981b2552a250.Resolve'exception val -> Resolve'exception <$> C'.decerialize val
            Capnp.ById.Xb312981b2552a250.Resolve''unknown' val -> pure $ Resolve'unknown' val
instance C'.Marshal Resolve' where
    marshalInto raw value = do
        case value of
            Resolve'cap arg_ -> do
                field_ <- Capnp.ById.Xb312981b2552a250.new_Resolve'cap raw
                C'.marshalInto field_ arg_
            Resolve'exception arg_ -> do
                field_ <- Capnp.ById.Xb312981b2552a250.new_Resolve'exception raw
                C'.marshalInto field_ arg_
            Resolve'unknown' arg_ -> Capnp.ById.Xb312981b2552a250.set_Resolve''unknown' raw arg_
instance C'.Cerialize s Resolve'
instance C'.FromStruct M'.ConstMsg Resolve' where
    fromStruct struct = do
        raw <- C'.fromStruct struct
        C'.decerialize (raw :: Capnp.ById.Xb312981b2552a250.Resolve' M'.ConstMsg)
instance Default Resolve' where
    def = PH'.defaultStruct
data Return'
    = Return'results (Payload)
    | Return'exception (Exception)
    | Return'canceled
    | Return'resultsSentElsewhere
    | Return'takeFromOtherQuestion (Word32)
    | Return'acceptFromThirdParty (Maybe (PU'.PtrType))
    | Return'unknown' Word16
    deriving(Show,Read,Eq,Generic)
instance C'.Decerialize Return' where
    type Cerial msg Return' = Capnp.ById.Xb312981b2552a250.Return' msg
    decerialize raw = do
        raw <- Capnp.ById.Xb312981b2552a250.get_Return'' raw
        case raw of
            Capnp.ById.Xb312981b2552a250.Return'results val -> Return'results <$> C'.decerialize val
            Capnp.ById.Xb312981b2552a250.Return'exception val -> Return'exception <$> C'.decerialize val
            Capnp.ById.Xb312981b2552a250.Return'canceled -> pure Return'canceled
            Capnp.ById.Xb312981b2552a250.Return'resultsSentElsewhere -> pure Return'resultsSentElsewhere
            Capnp.ById.Xb312981b2552a250.Return'takeFromOtherQuestion val -> pure (Return'takeFromOtherQuestion val)
            Capnp.ById.Xb312981b2552a250.Return'acceptFromThirdParty val -> Return'acceptFromThirdParty <$> C'.decerialize val
            Capnp.ById.Xb312981b2552a250.Return''unknown' val -> pure $ Return'unknown' val
instance C'.Marshal Return' where
    marshalInto raw value = do
        case value of
            Return'results arg_ -> do
                field_ <- Capnp.ById.Xb312981b2552a250.new_Return'results raw
                C'.marshalInto field_ arg_
            Return'exception arg_ -> do
                field_ <- Capnp.ById.Xb312981b2552a250.new_Return'exception raw
                C'.marshalInto field_ arg_
            Return'canceled -> Capnp.ById.Xb312981b2552a250.set_Return'canceled raw
            Return'resultsSentElsewhere -> Capnp.ById.Xb312981b2552a250.set_Return'resultsSentElsewhere raw
            Return'takeFromOtherQuestion arg_ -> Capnp.ById.Xb312981b2552a250.set_Return'takeFromOtherQuestion raw arg_
            Return'acceptFromThirdParty arg_ -> do
                field_ <- C'.cerialize (U'.message raw) arg_
                Capnp.ById.Xb312981b2552a250.set_Return'acceptFromThirdParty raw field_
            Return'unknown' arg_ -> Capnp.ById.Xb312981b2552a250.set_Return''unknown' raw arg_
instance C'.Cerialize s Return'
instance C'.FromStruct M'.ConstMsg Return' where
    fromStruct struct = do
        raw <- C'.fromStruct struct
        C'.decerialize (raw :: Capnp.ById.Xb312981b2552a250.Return' M'.ConstMsg)
instance Default Return' where
    def = PH'.defaultStruct