{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE DeriveGeneric #-}
{-# OPTIONS_GHC -Wno-unused-imports #-}
{- |
Module: Capnp.Capnp.Json.Pure
Description: High-level generated module for capnp/json.capnp
This module is the generated code for capnp/json.capnp,
for the high-level api.
-}
module Capnp.Capnp.Json.Pure (JsonValue(..), JsonValue'Call(..), JsonValue'Field(..)
) where
-- Code generated by capnpc-haskell. DO NOT EDIT.
-- Generated from schema file: capnp/json.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.X8ef99297a43a5e34
import qualified Capnp.ById.Xbdf87d7bb8304e81.Pure
import qualified Capnp.ById.Xbdf87d7bb8304e81
data JsonValue
    = JsonValue'null
    | JsonValue'boolean (Bool)
    | JsonValue'number (Double)
    | JsonValue'string (Text)
    | JsonValue'array (PU'.ListOf (JsonValue))
    | JsonValue'object (PU'.ListOf (JsonValue'Field))
    | JsonValue'call (JsonValue'Call)
    | JsonValue'unknown' Word16
    deriving(Show,Read,Eq,Generic)
instance C'.Decerialize JsonValue where
    type Cerial msg JsonValue = Capnp.ById.X8ef99297a43a5e34.JsonValue msg
    decerialize raw = do
        raw <- Capnp.ById.X8ef99297a43a5e34.get_JsonValue' raw
        case raw of
            Capnp.ById.X8ef99297a43a5e34.JsonValue'null -> pure JsonValue'null
            Capnp.ById.X8ef99297a43a5e34.JsonValue'boolean val -> pure (JsonValue'boolean val)
            Capnp.ById.X8ef99297a43a5e34.JsonValue'number val -> pure (JsonValue'number val)
            Capnp.ById.X8ef99297a43a5e34.JsonValue'string val -> JsonValue'string <$> C'.decerialize val
            Capnp.ById.X8ef99297a43a5e34.JsonValue'array val -> JsonValue'array <$> C'.decerialize val
            Capnp.ById.X8ef99297a43a5e34.JsonValue'object val -> JsonValue'object <$> C'.decerialize val
            Capnp.ById.X8ef99297a43a5e34.JsonValue'call val -> JsonValue'call <$> C'.decerialize val
            Capnp.ById.X8ef99297a43a5e34.JsonValue'unknown' val -> pure $ JsonValue'unknown' val
instance C'.Marshal JsonValue where
    marshalInto raw value = do
        case value of
            JsonValue'null -> Capnp.ById.X8ef99297a43a5e34.set_JsonValue'null raw
            JsonValue'boolean arg_ -> Capnp.ById.X8ef99297a43a5e34.set_JsonValue'boolean raw arg_
            JsonValue'number arg_ -> Capnp.ById.X8ef99297a43a5e34.set_JsonValue'number raw arg_
            JsonValue'string arg_ -> do
                field_ <- C'.cerialize (U'.message raw) arg_
                Capnp.ById.X8ef99297a43a5e34.set_JsonValue'string raw field_
            JsonValue'array arg_ -> do
                let len_ = V.length arg_
                field_ <- Capnp.ById.X8ef99297a43a5e34.new_JsonValue'array len_ raw
                forM_ [0..len_ - 1] $ \i -> do
                    elt <- C'.index i field_
                    C'.marshalInto elt (arg_ V.! i)
            JsonValue'object arg_ -> do
                let len_ = V.length arg_
                field_ <- Capnp.ById.X8ef99297a43a5e34.new_JsonValue'object len_ raw
                forM_ [0..len_ - 1] $ \i -> do
                    elt <- C'.index i field_
                    C'.marshalInto elt (arg_ V.! i)
            JsonValue'call arg_ -> do
                field_ <- Capnp.ById.X8ef99297a43a5e34.new_JsonValue'call raw
                C'.marshalInto field_ arg_
            JsonValue'unknown' arg_ -> Capnp.ById.X8ef99297a43a5e34.set_JsonValue'unknown' raw arg_
instance C'.Cerialize s JsonValue
instance C'.FromStruct M'.ConstMsg JsonValue where
    fromStruct struct = do
        raw <- C'.fromStruct struct
        C'.decerialize (raw :: Capnp.ById.X8ef99297a43a5e34.JsonValue M'.ConstMsg)
instance Default JsonValue where
    def = PH'.defaultStruct
data JsonValue'Call
    = JsonValue'Call
        {function :: Text,
        params :: PU'.ListOf (JsonValue)}
    deriving(Show,Read,Eq,Generic)
instance C'.Decerialize JsonValue'Call where
    type Cerial msg JsonValue'Call = Capnp.ById.X8ef99297a43a5e34.JsonValue'Call msg
    decerialize raw = do
        JsonValue'Call <$>
            (Capnp.ById.X8ef99297a43a5e34.get_JsonValue'Call'function raw >>= C'.decerialize) <*>
            (Capnp.ById.X8ef99297a43a5e34.get_JsonValue'Call'params raw >>= C'.decerialize)
instance C'.Marshal JsonValue'Call where
    marshalInto raw value = do
        case value of
            JsonValue'Call{..} -> do
                field_ <- C'.cerialize (U'.message raw) function
                Capnp.ById.X8ef99297a43a5e34.set_JsonValue'Call'function raw field_
                let len_ = V.length params
                field_ <- Capnp.ById.X8ef99297a43a5e34.new_JsonValue'Call'params len_ raw
                forM_ [0..len_ - 1] $ \i -> do
                    elt <- C'.index i field_
                    C'.marshalInto elt (params V.! i)
instance C'.Cerialize s JsonValue'Call
instance C'.FromStruct M'.ConstMsg JsonValue'Call where
    fromStruct struct = do
        raw <- C'.fromStruct struct
        C'.decerialize (raw :: Capnp.ById.X8ef99297a43a5e34.JsonValue'Call M'.ConstMsg)
instance Default JsonValue'Call where
    def = PH'.defaultStruct
data JsonValue'Field
    = JsonValue'Field
        {name :: Text,
        value :: JsonValue}
    deriving(Show,Read,Eq,Generic)
instance C'.Decerialize JsonValue'Field where
    type Cerial msg JsonValue'Field = Capnp.ById.X8ef99297a43a5e34.JsonValue'Field msg
    decerialize raw = do
        JsonValue'Field <$>
            (Capnp.ById.X8ef99297a43a5e34.get_JsonValue'Field'name raw >>= C'.decerialize) <*>
            (Capnp.ById.X8ef99297a43a5e34.get_JsonValue'Field'value raw >>= C'.decerialize)
instance C'.Marshal JsonValue'Field where
    marshalInto raw value = do
        case value of
            JsonValue'Field{..} -> do
                field_ <- C'.cerialize (U'.message raw) name
                Capnp.ById.X8ef99297a43a5e34.set_JsonValue'Field'name raw field_
                field_ <- Capnp.ById.X8ef99297a43a5e34.new_JsonValue'Field'value raw
                C'.marshalInto field_ value
instance C'.Cerialize s JsonValue'Field
instance C'.FromStruct M'.ConstMsg JsonValue'Field where
    fromStruct struct = do
        raw <- C'.fromStruct struct
        C'.decerialize (raw :: Capnp.ById.X8ef99297a43a5e34.JsonValue'Field M'.ConstMsg)
instance Default JsonValue'Field where
    def = PH'.defaultStruct