module Network.GRPC.Common.Headers (
HasRequiredHeaders(..)
, RequiredHeaders(..)
, verifyRequired
, verifyAll
, verifyAllIf
) where
import Data.Functor.Identity
import Data.Kind
import Data.Void
import Network.GRPC.Spec
import Network.GRPC.Spec.Util.HKD (Undecorated, Checked)
import Network.GRPC.Spec.Util.HKD qualified as HKD
class HKD.Traversable h => h where
data h :: Type
:: h (Checked e) -> Either e (RequiredHeaders h)
requiredHeadersVerified ::
HasRequiredHeaders h
=> h Undecorated -> RequiredHeaders h
=
(Void -> RequiredHeaders h)
-> (RequiredHeaders h -> RequiredHeaders h)
-> Either Void (RequiredHeaders h)
-> RequiredHeaders h
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either Void -> RequiredHeaders h
forall a. Void -> a
absurd RequiredHeaders h -> RequiredHeaders h
forall a. a -> a
id (Either Void (RequiredHeaders h) -> RequiredHeaders h)
-> (h Undecorated -> Either Void (RequiredHeaders h))
-> h Undecorated
-> RequiredHeaders h
forall b c a. (b -> c) -> (a -> b) -> a -> c
. h (Checked Void) -> Either Void (RequiredHeaders h)
forall e. h (Checked e) -> Either e (RequiredHeaders h)
forall (h :: (* -> *) -> *) e.
HasRequiredHeaders h =>
h (Checked e) -> Either e (RequiredHeaders h)
requiredHeaders (h (Checked Void) -> Either Void (RequiredHeaders h))
-> (h Undecorated -> h (Checked Void))
-> h Undecorated
-> Either Void (RequiredHeaders h)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (forall a. Identity a -> Either Void a)
-> h (DecoratedWith Identity) -> h (Checked Void)
forall (t :: (* -> *) -> *) (f :: * -> *) (g :: * -> *).
Traversable t =>
(forall a. f a -> g a)
-> t (DecoratedWith f) -> t (DecoratedWith g)
HKD.map Identity a -> Either Void a
forall a. Identity a -> Either Void a
noError (h (DecoratedWith Identity) -> h (Checked Void))
-> (h Undecorated -> h (DecoratedWith Identity))
-> h Undecorated
-> h (Checked Void)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. h Undecorated -> h (DecoratedWith Identity)
forall (t :: (* -> *) -> *).
Coerce t =>
t Undecorated -> t (DecoratedWith Identity)
HKD.decorate
where
noError :: Identity a -> Either Void a
noError :: forall a. Identity a -> Either Void a
noError = a -> Either Void a
forall a b. b -> Either a b
Right (a -> Either Void a)
-> (Identity a -> a) -> Identity a -> Either Void a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Identity a -> a
forall a. Identity a -> a
runIdentity
verifyRequired ::
HasRequiredHeaders h
=> h (Checked (InvalidHeaders HandledSynthesized))
-> Either (InvalidHeaders HandledSynthesized) (RequiredHeaders h)
verifyRequired :: forall (h :: (* -> *) -> *).
HasRequiredHeaders h =>
h (Checked (InvalidHeaders HandledSynthesized))
-> Either (InvalidHeaders HandledSynthesized) (RequiredHeaders h)
verifyRequired = h (Checked (InvalidHeaders HandledSynthesized))
-> Either (InvalidHeaders HandledSynthesized) (RequiredHeaders h)
forall e. h (Checked e) -> Either e (RequiredHeaders h)
forall (h :: (* -> *) -> *) e.
HasRequiredHeaders h =>
h (Checked e) -> Either e (RequiredHeaders h)
requiredHeaders
verifyAll :: forall h.
HasRequiredHeaders h
=> h (Checked (InvalidHeaders HandledSynthesized))
-> Either (InvalidHeaders HandledSynthesized) (h Undecorated, RequiredHeaders h)
verifyAll :: forall (h :: (* -> *) -> *).
HasRequiredHeaders h =>
h (Checked (InvalidHeaders HandledSynthesized))
-> Either
(InvalidHeaders HandledSynthesized)
(h Undecorated, RequiredHeaders h)
verifyAll = (h Undecorated -> (h Undecorated, RequiredHeaders h))
-> Either (InvalidHeaders HandledSynthesized) (h Undecorated)
-> Either
(InvalidHeaders HandledSynthesized)
(h Undecorated, RequiredHeaders h)
forall a b.
(a -> b)
-> Either (InvalidHeaders HandledSynthesized) a
-> Either (InvalidHeaders HandledSynthesized) b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap h Undecorated -> (h Undecorated, RequiredHeaders h)
aux (Either (InvalidHeaders HandledSynthesized) (h Undecorated)
-> Either
(InvalidHeaders HandledSynthesized)
(h Undecorated, RequiredHeaders h))
-> (h (Checked (InvalidHeaders HandledSynthesized))
-> Either (InvalidHeaders HandledSynthesized) (h Undecorated))
-> h (Checked (InvalidHeaders HandledSynthesized))
-> Either
(InvalidHeaders HandledSynthesized)
(h Undecorated, RequiredHeaders h)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. h (Checked (InvalidHeaders HandledSynthesized))
-> Either (InvalidHeaders HandledSynthesized) (h Undecorated)
forall (t :: (* -> *) -> *) (m :: * -> *).
(Traversable t, Applicative m) =>
t (DecoratedWith m) -> m (t Undecorated)
HKD.sequence
where
aux :: h Undecorated -> (h Undecorated, RequiredHeaders h)
aux :: h Undecorated -> (h Undecorated, RequiredHeaders h)
aux h Undecorated
verifyd = (h Undecorated
verifyd, h Undecorated -> RequiredHeaders h
forall (h :: (* -> *) -> *).
HasRequiredHeaders h =>
h Undecorated -> RequiredHeaders h
requiredHeadersVerified h Undecorated
verifyd)
verifyAllIf ::
HasRequiredHeaders h
=> Bool
-> h (Checked (InvalidHeaders HandledSynthesized))
-> Either (InvalidHeaders HandledSynthesized) (RequiredHeaders h)
verifyAllIf :: forall (h :: (* -> *) -> *).
HasRequiredHeaders h =>
Bool
-> h (Checked (InvalidHeaders HandledSynthesized))
-> Either (InvalidHeaders HandledSynthesized) (RequiredHeaders h)
verifyAllIf Bool
False = h (Checked (InvalidHeaders HandledSynthesized))
-> Either (InvalidHeaders HandledSynthesized) (RequiredHeaders h)
forall (h :: (* -> *) -> *).
HasRequiredHeaders h =>
h (Checked (InvalidHeaders HandledSynthesized))
-> Either (InvalidHeaders HandledSynthesized) (RequiredHeaders h)
verifyRequired
verifyAllIf Bool
True = ((h Undecorated, RequiredHeaders h) -> RequiredHeaders h)
-> Either
(InvalidHeaders HandledSynthesized)
(h Undecorated, RequiredHeaders h)
-> Either (InvalidHeaders HandledSynthesized) (RequiredHeaders h)
forall a b.
(a -> b)
-> Either (InvalidHeaders HandledSynthesized) a
-> Either (InvalidHeaders HandledSynthesized) b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (h Undecorated, RequiredHeaders h) -> RequiredHeaders h
forall a b. (a, b) -> b
snd (Either
(InvalidHeaders HandledSynthesized)
(h Undecorated, RequiredHeaders h)
-> Either (InvalidHeaders HandledSynthesized) (RequiredHeaders h))
-> (h (Checked (InvalidHeaders HandledSynthesized))
-> Either
(InvalidHeaders HandledSynthesized)
(h Undecorated, RequiredHeaders h))
-> h (Checked (InvalidHeaders HandledSynthesized))
-> Either (InvalidHeaders HandledSynthesized) (RequiredHeaders h)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. h (Checked (InvalidHeaders HandledSynthesized))
-> Either
(InvalidHeaders HandledSynthesized)
(h Undecorated, RequiredHeaders h)
forall (h :: (* -> *) -> *).
HasRequiredHeaders h =>
h (Checked (InvalidHeaders HandledSynthesized))
-> Either
(InvalidHeaders HandledSynthesized)
(h Undecorated, RequiredHeaders h)
verifyAll
instance HasRequiredHeaders RequestHeaders_ where
data RequestHeaders_ = {
RequiredHeaders RequestHeaders_ -> Maybe CompressionId
requiredRequestCompression :: Maybe CompressionId
, RequiredHeaders RequestHeaders_ -> Maybe Timeout
requiredRequestTimeout :: Maybe Timeout
}
requiredHeaders :: forall e.
RequestHeaders_ (Checked e)
-> Either e (RequiredHeaders RequestHeaders_)
requiredHeaders RequestHeaders_ (Checked e)
requestHeaders =
Maybe CompressionId
-> Maybe Timeout -> RequiredHeaders RequestHeaders_
RequiredRequestHeaders
(Maybe CompressionId
-> Maybe Timeout -> RequiredHeaders RequestHeaders_)
-> Either e (Maybe CompressionId)
-> Either e (Maybe Timeout -> RequiredHeaders RequestHeaders_)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> RequestHeaders_ (Checked e)
-> HKD (Checked e) (Maybe CompressionId)
forall (f :: * -> *).
RequestHeaders_ f -> HKD f (Maybe CompressionId)
requestCompression RequestHeaders_ (Checked e)
requestHeaders
Either e (Maybe Timeout -> RequiredHeaders RequestHeaders_)
-> Either e (Maybe Timeout)
-> Either e (RequiredHeaders RequestHeaders_)
forall a b. Either e (a -> b) -> Either e a -> Either e b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> RequestHeaders_ (Checked e) -> HKD (Checked e) (Maybe Timeout)
forall (f :: * -> *). RequestHeaders_ f -> HKD f (Maybe Timeout)
requestTimeout RequestHeaders_ (Checked e)
requestHeaders
instance HasRequiredHeaders ResponseHeaders_ where
data ResponseHeaders_ = {
RequiredHeaders ResponseHeaders_ -> Maybe CompressionId
requiredResponseCompression :: Maybe CompressionId
}
requiredHeaders :: forall e.
ResponseHeaders_ (Checked e)
-> Either e (RequiredHeaders ResponseHeaders_)
requiredHeaders ResponseHeaders_ (Checked e)
responseHeaders =
Maybe CompressionId -> RequiredHeaders ResponseHeaders_
RequiredResponseHeaders
(Maybe CompressionId -> RequiredHeaders ResponseHeaders_)
-> Either e (Maybe CompressionId)
-> Either e (RequiredHeaders ResponseHeaders_)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ResponseHeaders_ (Checked e)
-> HKD (Checked e) (Maybe CompressionId)
forall (f :: * -> *).
ResponseHeaders_ f -> HKD f (Maybe CompressionId)
responseCompression ResponseHeaders_ (Checked e)
responseHeaders
instance HasRequiredHeaders TrailersOnly_ where
data TrailersOnly_ = NoRequiredTrailers
requiredHeaders :: forall e.
TrailersOnly_ (Checked e)
-> Either e (RequiredHeaders TrailersOnly_)
requiredHeaders TrailersOnly_ (Checked e)
_ = RequiredHeaders TrailersOnly_
-> Either e (RequiredHeaders TrailersOnly_)
forall a. a -> Either e a
forall (f :: * -> *) a. Applicative f => a -> f a
pure RequiredHeaders TrailersOnly_
NoRequiredTrailers