otel-effectful-1.0.0: src/Effectful/OpenTelemetry/Protocol/Transport.hs
module Effectful.OpenTelemetry.Protocol.Transport {-# WARNING in "x-unstable-interface" "This is an unstable interface." #-} where
import Data.Char (toLower)
import Effectful.Http2Client (HostName, PortNumber)
import Network.GRPC.HTTP2.Proto3Wire (RPC)
import Network.HTTP.Types.Header (Header, hContentEncoding, hContentType)
import Network.URI (URI)
import Numeric.Natural
import Prelude
data Compression = NoCompression | GZip
deriving stock (Show, Eq, Bounded, Enum)
instance Read Compression where
readsPrec _ s =
case toLower <$> s of
"" -> [(NoCompression, "")]
"none" -> [(NoCompression, "")]
"nocompression" -> [(NoCompression, "")]
"gzip" -> [(GZip, "")]
_ -> []
contentEncoding :: Compression -> Maybe Header
contentEncoding NoCompression = Nothing
contentEncoding GZip = Just (hContentEncoding, "gzip")
data Encoding = Json | Proto
deriving stock (Show, Eq)
contentType :: Encoding -> Header
contentType Json = (hContentType, "application/json")
contentType Proto = (hContentType, "application/x-protobuf")
data Protocol
= HTTP Encoding URI
| GRPC HostName PortNumber RPC
data Transport = Transport
{ protocol :: Protocol
, compression :: Compression
, timeoutMs :: Natural
}