module Network.GRPC.Util.Session.API (
RequestInfo(..)
, ResponseInfo(..)
, DataFlow(..)
, FlowStart(..)
, IsSession(..)
, InitiateSession(..)
, PeerException(..)
) where
import Control.Exception
import Data.ByteString.Builder (Builder)
import Data.ByteString.Lazy qualified as Lazy (ByteString)
import Data.Kind
import Network.HTTP.Types qualified as HTTP
import Network.HTTP2.Client qualified as HTTP2 (Path)
import Network.GRPC.Spec.Util.Parser (Parser)
data RequestInfo = RequestInfo {
RequestInfo -> Method
requestMethod :: HTTP.Method
, RequestInfo -> Method
requestPath :: HTTP2.Path
, :: [HTTP.Header]
}
deriving (Int -> RequestInfo -> ShowS
[RequestInfo] -> ShowS
RequestInfo -> String
(Int -> RequestInfo -> ShowS)
-> (RequestInfo -> String)
-> ([RequestInfo] -> ShowS)
-> Show RequestInfo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> RequestInfo -> ShowS
showsPrec :: Int -> RequestInfo -> ShowS
$cshow :: RequestInfo -> String
show :: RequestInfo -> String
$cshowList :: [RequestInfo] -> ShowS
showList :: [RequestInfo] -> ShowS
Show)
data ResponseInfo = ResponseInfo {
ResponseInfo -> Status
responseStatus :: HTTP.Status
, :: [HTTP.Header]
, ResponseInfo -> Maybe ByteString
responseBody :: Maybe Lazy.ByteString
}
deriving (Int -> ResponseInfo -> ShowS
[ResponseInfo] -> ShowS
ResponseInfo -> String
(Int -> ResponseInfo -> ShowS)
-> (ResponseInfo -> String)
-> ([ResponseInfo] -> ShowS)
-> Show ResponseInfo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ResponseInfo -> ShowS
showsPrec :: Int -> ResponseInfo -> ShowS
$cshow :: ResponseInfo -> String
show :: ResponseInfo -> String
$cshowList :: [ResponseInfo] -> ShowS
showList :: [ResponseInfo] -> ShowS
Show)
class ( Show (Headers flow)
, Show (Message flow)
, Show (Trailers flow)
, Show (NoMessages flow)
) => DataFlow flow where
data flow :: Type
type Message flow :: Type
type Trailers flow :: Type
type NoMessages flow :: Type
data FlowStart flow =
FlowStartRegular (Headers flow)
| FlowStartNoMessages (NoMessages flow)
deriving instance DataFlow flow => Show (FlowStart flow)
class ( DataFlow (Inbound sess)
, DataFlow (Outbound sess)
) => IsSession sess where
type Inbound sess :: Type
type Outbound sess :: Type
parseInboundTrailers ::
sess
-> [HTTP.Header]
-> IO (Trailers (Inbound sess))
buildOutboundTrailers ::
sess
-> Trailers (Outbound sess)
-> [HTTP.Header]
parseMsg ::
sess
-> Headers (Inbound sess)
-> Parser String (Message (Inbound sess))
buildMsg ::
sess
-> Headers (Outbound sess)
-> Message (Outbound sess)
-> Builder
class IsSession sess => InitiateSession sess where
buildRequestInfo ::
sess
-> FlowStart (Outbound sess) -> RequestInfo
parseResponse ::
sess
-> ResponseInfo
-> IO (FlowStart (Inbound sess))
data PeerException =
PeerSentMalformedMessage String
| PeerSentIncompleteMessage
|
deriving stock (Int -> PeerException -> ShowS
[PeerException] -> ShowS
PeerException -> String
(Int -> PeerException -> ShowS)
-> (PeerException -> String)
-> ([PeerException] -> ShowS)
-> Show PeerException
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> PeerException -> ShowS
showsPrec :: Int -> PeerException -> ShowS
$cshow :: PeerException -> String
show :: PeerException -> String
$cshowList :: [PeerException] -> ShowS
showList :: [PeerException] -> ShowS
Show)
deriving anyclass (Show PeerException
Typeable PeerException
(Typeable PeerException, Show PeerException) =>
(PeerException -> SomeException)
-> (SomeException -> Maybe PeerException)
-> (PeerException -> String)
-> (PeerException -> Bool)
-> Exception PeerException
SomeException -> Maybe PeerException
PeerException -> Bool
PeerException -> String
PeerException -> SomeException
forall e.
(Typeable e, Show e) =>
(e -> SomeException)
-> (SomeException -> Maybe e)
-> (e -> String)
-> (e -> Bool)
-> Exception e
$ctoException :: PeerException -> SomeException
toException :: PeerException -> SomeException
$cfromException :: SomeException -> Maybe PeerException
fromException :: SomeException -> Maybe PeerException
$cdisplayException :: PeerException -> String
displayException :: PeerException -> String
$cbacktraceDesired :: PeerException -> Bool
backtraceDesired :: PeerException -> Bool
Exception)