{-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE TypeFamilies #-} module Capnp.GenHelpers.New.Rpc ( module Capnp.New.Rpc.Server , module Capnp.Repr.Methods , parseCap , encodeCap ) where import Capnp.Message (Mutability(..)) import qualified Capnp.Message as M import Capnp.New.Rpc.Server import qualified Capnp.Repr as R import Capnp.Repr.Methods import qualified Capnp.Untyped as U parseCap :: (R.IsCap a, U.ReadCtx m 'Const) => R.Raw 'Const a -> m (Client a) parseCap :: Raw 'Const a -> m (Client a) parseCap (R.Raw Untyped 'Const (ReprFor a) cap) = Client -> Client a forall a. Client -> Client a Client (Client -> Client a) -> m Client -> m (Client a) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Cap 'Const -> m Client forall (m :: * -> *) (mut :: Mutability). ReadCtx m mut => Cap mut -> m Client U.getClient Cap 'Const Untyped 'Const (ReprFor a) cap encodeCap :: (R.IsCap a, U.RWCtx m s) => M.Message ('Mut s) -> Client a -> m (R.Raw ('Mut s) a) encodeCap :: Message ('Mut s) -> Client a -> m (Raw ('Mut s) a) encodeCap Message ('Mut s) msg (Client Client c) = Cap ('Mut s) -> Raw ('Mut s) a forall (mut :: Mutability) a. Untyped mut (ReprFor a) -> Raw mut a R.Raw (Cap ('Mut s) -> Raw ('Mut s) a) -> m (Cap ('Mut s)) -> m (Raw ('Mut s) a) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Message ('Mut s) -> Client -> m (Cap ('Mut s)) forall (m :: * -> *) s. WriteCtx m s => Message ('Mut s) -> Client -> m (Cap ('Mut s)) U.appendCap Message ('Mut s) msg Client c