{-# OPTIONS_GHC -Wno-orphans #-}
{-# OPTIONS_GHC -fno-warn-name-shadowing #-}

module Data.OpenApi.Compare.Validate.Responses
  ( Behave (..),
  )
where

import Data.HList
import Data.HashMap.Strict.InsOrd as IOHM
import Data.Map.Strict as M
import Data.Maybe
import Data.OpenApi
import Data.OpenApi.Compare.Behavior
import Data.OpenApi.Compare.References
import Data.OpenApi.Compare.Subtree
import Data.OpenApi.Compare.Validate.Header ()
import Data.OpenApi.Compare.Validate.Link ()
import Data.OpenApi.Compare.Validate.MediaTypeObject
import Data.OpenApi.Compare.Validate.Products
import Data.OpenApi.Compare.Validate.Schema ()
import Data.OpenApi.Compare.Validate.Sums
import qualified Data.Text as T
import Network.HTTP.Media (MediaType)
import Text.Pandoc.Builder

tracedResponses :: Traced Responses -> IOHM.InsOrdHashMap HttpStatusCode (Traced (Referenced Response))
tracedResponses :: Traced Responses
-> InsOrdHashMap HttpStatusCode (Traced (Referenced Response))
tracedResponses Traced Responses
resp =
  (HttpStatusCode
 -> Referenced Response -> Traced (Referenced Response))
-> InsOrdHashMap HttpStatusCode (Referenced Response)
-> InsOrdHashMap HttpStatusCode (Traced (Referenced Response))
forall k v1 v2.
(k -> v1 -> v2) -> InsOrdHashMap k v1 -> InsOrdHashMap k v2
IOHM.mapWithKey (\HttpStatusCode
k -> Trace (Referenced Response)
-> Referenced Response -> Traced (Referenced Response)
forall a. Trace a -> a -> Traced a
traced (Traced Responses -> Paths Step TraceRoot Responses
forall e (w :: * -> *) a. ComonadEnv e w => w a -> e
ask Traced Responses
resp Paths Step TraceRoot Responses
-> Paths Step Responses (Referenced Response)
-> Trace (Referenced Response)
forall k (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> Step Responses (Referenced Response)
-> Paths Step Responses (Referenced Response)
forall k (q :: k -> k -> *) (a :: k) (b :: k).
NiceQuiver q a b =>
q a b -> Paths q a b
step (HttpStatusCode -> Step Responses (Referenced Response)
ResponseCodeStep HttpStatusCode
k))) (InsOrdHashMap HttpStatusCode (Referenced Response)
 -> InsOrdHashMap HttpStatusCode (Traced (Referenced Response)))
-> InsOrdHashMap HttpStatusCode (Referenced Response)
-> InsOrdHashMap HttpStatusCode (Traced (Referenced Response))
forall a b. (a -> b) -> a -> b
$
    Responses -> InsOrdHashMap HttpStatusCode (Referenced Response)
_responsesResponses (Responses -> InsOrdHashMap HttpStatusCode (Referenced Response))
-> Responses -> InsOrdHashMap HttpStatusCode (Referenced Response)
forall a b. (a -> b) -> a -> b
$ Traced Responses -> Responses
forall (w :: * -> *) a. Comonad w => w a -> a
extract Traced Responses
resp

instance Subtree Responses where
  type SubtreeLevel Responses = 'OperationLevel
  type
    CheckEnv Responses =
      '[ ProdCons (Traced (Definitions Response))
       , ProdCons (Traced (Definitions Header))
       , ProdCons (Traced (Definitions Schema))
       , ProdCons (Traced (Definitions Link))
       ]

  checkStructuralCompatibility :: HList (CheckEnv Responses)
-> ProdCons (Traced Responses) -> StructuralCompatFormula ()
checkStructuralCompatibility HList (CheckEnv Responses)
env ProdCons (Traced Responses)
pc = do
    HList
  '[ProdCons (Traced (Definitions Response)),
    ProdCons (Traced (Definitions Header)),
    ProdCons (Traced (Definitions Schema)),
    ProdCons (Traced (Definitions Link))]
-> ProdCons (Maybe (Traced (Referenced Response)))
-> StructuralCompatFormula ()
forall a (xs :: [*]).
(Subtree a, ReassembleHList xs (CheckEnv a)) =>
HList xs
-> ProdCons (Maybe (Traced a)) -> StructuralCompatFormula ()
structuralMaybe HList
  '[ProdCons (Traced (Definitions Response)),
    ProdCons (Traced (Definitions Header)),
    ProdCons (Traced (Definitions Schema)),
    ProdCons (Traced (Definitions Link))]
HList (CheckEnv Responses)
env (ProdCons (Maybe (Traced (Referenced Response)))
 -> StructuralCompatFormula ())
-> ProdCons (Maybe (Traced (Referenced Response)))
-> StructuralCompatFormula ()
forall a b. (a -> b) -> a -> b
$ EnvT
  (Trace (Referenced Response))
  Identity
  (Maybe (Referenced Response))
-> Maybe (Traced (Referenced Response))
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence (EnvT
   (Trace (Referenced Response))
   Identity
   (Maybe (Referenced Response))
 -> Maybe (Traced (Referenced Response)))
-> (Traced Responses
    -> EnvT
         (Trace (Referenced Response))
         Identity
         (Maybe (Referenced Response)))
-> Traced Responses
-> Maybe (Traced (Referenced Response))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Step Responses (Referenced Response)
-> Traced' Responses (Maybe (Referenced Response))
-> EnvT
     (Trace (Referenced Response))
     Identity
     (Maybe (Referenced Response))
forall a a' b.
Steppable a a' =>
Step a a' -> Traced' a b -> Traced' a' b
stepTraced Step Responses (Referenced Response)
ResponseDefaultStep (Traced' Responses (Maybe (Referenced Response))
 -> EnvT
      (Trace (Referenced Response))
      Identity
      (Maybe (Referenced Response)))
-> (Traced Responses
    -> Traced' Responses (Maybe (Referenced Response)))
-> Traced Responses
-> EnvT
     (Trace (Referenced Response))
     Identity
     (Maybe (Referenced Response))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Responses -> Maybe (Referenced Response))
-> Traced Responses
-> Traced' Responses (Maybe (Referenced Response))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Responses -> Maybe (Referenced Response)
_responsesDefault (Traced Responses -> Maybe (Traced (Referenced Response)))
-> ProdCons (Traced Responses)
-> ProdCons (Maybe (Traced (Referenced Response)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ProdCons (Traced Responses)
pc
    HList
  '[ProdCons (Traced (Definitions Response)),
    ProdCons (Traced (Definitions Header)),
    ProdCons (Traced (Definitions Schema)),
    ProdCons (Traced (Definitions Link))]
-> ProdCons
     (Traced (InsOrdHashMap HttpStatusCode (Referenced Response)))
-> StructuralCompatFormula ()
forall k (xs :: [*]) v.
(ReassembleHList (k : xs) (CheckEnv v), Ord k, Subtree v,
 Hashable k, Typeable k, Show k) =>
HList xs
-> ProdCons (Traced (InsOrdHashMap k v))
-> StructuralCompatFormula ()
iohmStructural HList
  '[ProdCons (Traced (Definitions Response)),
    ProdCons (Traced (Definitions Header)),
    ProdCons (Traced (Definitions Schema)),
    ProdCons (Traced (Definitions Link))]
HList (CheckEnv Responses)
env (ProdCons
   (Traced (InsOrdHashMap HttpStatusCode (Referenced Response)))
 -> StructuralCompatFormula ())
-> ProdCons
     (Traced (InsOrdHashMap HttpStatusCode (Referenced Response)))
-> StructuralCompatFormula ()
forall a b. (a -> b) -> a -> b
$ Step Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Traced'
     Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Traced (InsOrdHashMap HttpStatusCode (Referenced Response))
forall a a' b.
Steppable a a' =>
Step a a' -> Traced' a b -> Traced' a' b
stepTraced Step Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
ResponsesStep (Traced'
   Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
 -> Traced (InsOrdHashMap HttpStatusCode (Referenced Response)))
-> (Traced Responses
    -> Traced'
         Responses (InsOrdHashMap HttpStatusCode (Referenced Response)))
-> Traced Responses
-> Traced (InsOrdHashMap HttpStatusCode (Referenced Response))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Responses -> InsOrdHashMap HttpStatusCode (Referenced Response))
-> Traced Responses
-> Traced'
     Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Responses -> InsOrdHashMap HttpStatusCode (Referenced Response)
_responsesResponses (Traced Responses
 -> Traced (InsOrdHashMap HttpStatusCode (Referenced Response)))
-> ProdCons (Traced Responses)
-> ProdCons
     (Traced (InsOrdHashMap HttpStatusCode (Referenced Response)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ProdCons (Traced Responses)
pc
    pure ()

  -- Roles are already swapped. Producer is a server and consumer is a
  -- client. Response codes are sum-like entity because we can answer with only
  -- one element
  checkSemanticCompatibility :: HList (CheckEnv Responses)
-> Behavior (SubtreeLevel Responses)
-> ProdCons (Traced Responses)
-> SemanticCompatFormula ()
checkSemanticCompatibility HList (CheckEnv Responses)
env Behavior (SubtreeLevel Responses)
beh ProdCons (Traced Responses)
prodCons = do
    let defs :: ProdCons (Traced (Definitions Response))
defs = HList
  '[ProdCons (Traced (Definitions Response)),
    ProdCons (Traced (Definitions Header)),
    ProdCons (Traced (Definitions Schema)),
    ProdCons (Traced (Definitions Link))]
-> ProdCons (Traced (Definitions Response))
forall x (xs :: [*]) (t :: Bool). Has' x xs t => HList xs -> x
getH @(ProdCons (Traced (Definitions Response))) HList
  '[ProdCons (Traced (Definitions Response)),
    ProdCons (Traced (Definitions Header)),
    ProdCons (Traced (Definitions Schema)),
    ProdCons (Traced (Definitions Link))]
HList (CheckEnv Responses)
env
        check :: HttpStatusCode
-> ProdCons (Traced Response) -> SemanticCompatFormula ()
check HttpStatusCode
code ProdCons (Traced Response)
resps = Behavior (SubtreeLevel Response)
-> HList
     '[ProdCons (Traced (Definitions Response)),
       ProdCons (Traced (Definitions Header)),
       ProdCons (Traced (Definitions Schema)),
       ProdCons (Traced (Definitions Link))]
-> ProdCons (Traced Response)
-> SemanticCompatFormula ()
forall t (xs :: [*]).
(ReassembleHList xs (CheckEnv t), Subtree t) =>
Behavior (SubtreeLevel t)
-> HList xs -> ProdCons (Traced t) -> SemanticCompatFormula ()
checkCompatibility @Response (Paths Behave 'APILevel 'OperationLevel
Behavior (SubtreeLevel Responses)
beh Paths Behave 'APILevel 'OperationLevel
-> Paths Behave 'OperationLevel 'ResponseLevel
-> Paths Behave 'APILevel 'ResponseLevel
forall k (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> Behave 'OperationLevel 'ResponseLevel
-> Paths Behave 'OperationLevel 'ResponseLevel
forall k (q :: k -> k -> *) (a :: k) (b :: k).
NiceQuiver q a b =>
q a b -> Paths q a b
step (HttpStatusCode -> Behave 'OperationLevel 'ResponseLevel
WithStatusCode HttpStatusCode
code)) HList
  '[ProdCons (Traced (Definitions Response)),
    ProdCons (Traced (Definitions Header)),
    ProdCons (Traced (Definitions Schema)),
    ProdCons (Traced (Definitions Link))]
HList (CheckEnv Responses)
env ProdCons (Traced Response)
resps
        elements :: ProdCons (Map HttpStatusCode (Traced Response))
elements = Traced (Definitions Response)
-> Traced Responses -> Map HttpStatusCode (Traced Response)
getEls (Traced (Definitions Response)
 -> Traced Responses -> Map HttpStatusCode (Traced Response))
-> ProdCons (Traced (Definitions Response))
-> ProdCons
     (Traced Responses -> Map HttpStatusCode (Traced Response))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ProdCons (Traced (Definitions Response))
defs ProdCons (Traced Responses -> Map HttpStatusCode (Traced Response))
-> ProdCons (Traced Responses)
-> ProdCons (Map HttpStatusCode (Traced Response))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ProdCons (Traced Responses)
prodCons
        getEls :: Traced (Definitions Response)
-> Traced Responses -> Map HttpStatusCode (Traced Response)
getEls Traced (Definitions Response)
respDef Traced Responses
resps = [(HttpStatusCode, Traced Response)]
-> Map HttpStatusCode (Traced Response)
forall k a. Ord k => [(k, a)] -> Map k a
M.fromList ([(HttpStatusCode, Traced Response)]
 -> Map HttpStatusCode (Traced Response))
-> [(HttpStatusCode, Traced Response)]
-> Map HttpStatusCode (Traced Response)
forall a b. (a -> b) -> a -> b
$ do
          (HttpStatusCode
code, Traced (Referenced Response)
respRef) <- InsOrdHashMap HttpStatusCode (Traced (Referenced Response))
-> [(HttpStatusCode, Traced (Referenced Response))]
forall k v. InsOrdHashMap k v -> [(k, v)]
IOHM.toList (InsOrdHashMap HttpStatusCode (Traced (Referenced Response))
 -> [(HttpStatusCode, Traced (Referenced Response))])
-> InsOrdHashMap HttpStatusCode (Traced (Referenced Response))
-> [(HttpStatusCode, Traced (Referenced Response))]
forall a b. (a -> b) -> a -> b
$ Traced Responses
-> InsOrdHashMap HttpStatusCode (Traced (Referenced Response))
tracedResponses Traced Responses
resps
          (HttpStatusCode, Traced Response)
-> [(HttpStatusCode, Traced Response)]
forall (f :: * -> *) a. Applicative f => a -> f a
pure (HttpStatusCode
code, Traced (Definitions Response)
-> Traced (Referenced Response) -> Traced Response
forall a.
Typeable a =>
Traced (Definitions a) -> Traced (Referenced a) -> Traced a
dereference Traced (Definitions Response)
respDef Traced (Referenced Response)
respRef)
    Paths Behave 'APILevel 'OperationLevel
-> (HttpStatusCode -> Issue 'OperationLevel)
-> (HttpStatusCode
    -> ProdCons (Traced Response) -> SemanticCompatFormula ())
-> ProdCons (Map HttpStatusCode (Traced Response))
-> SemanticCompatFormula ()
forall k (l :: BehaviorLevel)
       (q :: BehaviorLevel -> BehaviorLevel -> *) (r :: BehaviorLevel) t.
(Ord k, Issuable l) =>
Paths q r l
-> (k -> Issue l)
-> (k -> ProdCons t -> CompatFormula' q AnIssue r ())
-> ProdCons (Map k t)
-> CompatFormula' q AnIssue r ()
checkSums Paths Behave 'APILevel 'OperationLevel
Behavior (SubtreeLevel Responses)
beh HttpStatusCode -> Issue 'OperationLevel
ConsumerDoesntHaveResponseCode HttpStatusCode
-> ProdCons (Traced Response) -> SemanticCompatFormula ()
check ProdCons (Map HttpStatusCode (Traced Response))
elements

tracedContent :: Traced Response -> IOHM.InsOrdHashMap MediaType (Traced MediaTypeObject)
tracedContent :: Traced Response -> InsOrdHashMap MediaType (Traced MediaTypeObject)
tracedContent Traced Response
resp =
  (MediaType -> MediaTypeObject -> Traced MediaTypeObject)
-> InsOrdHashMap MediaType MediaTypeObject
-> InsOrdHashMap MediaType (Traced MediaTypeObject)
forall k v1 v2.
(k -> v1 -> v2) -> InsOrdHashMap k v1 -> InsOrdHashMap k v2
IOHM.mapWithKey (\MediaType
k -> Trace MediaTypeObject -> MediaTypeObject -> Traced MediaTypeObject
forall a. Trace a -> a -> Traced a
traced (Traced Response -> Paths Step TraceRoot Response
forall e (w :: * -> *) a. ComonadEnv e w => w a -> e
ask Traced Response
resp Paths Step TraceRoot Response
-> Paths Step Response MediaTypeObject -> Trace MediaTypeObject
forall k (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> Step Response MediaTypeObject
-> Paths Step Response MediaTypeObject
forall k (q :: k -> k -> *) (a :: k) (b :: k).
NiceQuiver q a b =>
q a b -> Paths q a b
step (MediaType -> Step Response MediaTypeObject
ResponseMediaObject MediaType
k))) (InsOrdHashMap MediaType MediaTypeObject
 -> InsOrdHashMap MediaType (Traced MediaTypeObject))
-> InsOrdHashMap MediaType MediaTypeObject
-> InsOrdHashMap MediaType (Traced MediaTypeObject)
forall a b. (a -> b) -> a -> b
$
    Response -> InsOrdHashMap MediaType MediaTypeObject
_responseContent (Response -> InsOrdHashMap MediaType MediaTypeObject)
-> Response -> InsOrdHashMap MediaType MediaTypeObject
forall a b. (a -> b) -> a -> b
$ Traced Response -> Response
forall (w :: * -> *) a. Comonad w => w a -> a
extract Traced Response
resp

tracedHeaders :: Traced Response -> IOHM.InsOrdHashMap HeaderName (Traced (Referenced Header))
tracedHeaders :: Traced Response
-> InsOrdHashMap HeaderName (Traced (Referenced Header))
tracedHeaders Traced Response
resp =
  (HeaderName -> Referenced Header -> Traced (Referenced Header))
-> InsOrdHashMap HeaderName (Referenced Header)
-> InsOrdHashMap HeaderName (Traced (Referenced Header))
forall k v1 v2.
(k -> v1 -> v2) -> InsOrdHashMap k v1 -> InsOrdHashMap k v2
IOHM.mapWithKey (\HeaderName
k -> Trace (Referenced Header)
-> Referenced Header -> Traced (Referenced Header)
forall a. Trace a -> a -> Traced a
traced (Traced Response -> Paths Step TraceRoot Response
forall e (w :: * -> *) a. ComonadEnv e w => w a -> e
ask Traced Response
resp Paths Step TraceRoot Response
-> Paths Step Response (Referenced Header)
-> Trace (Referenced Header)
forall k (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> Step Response (Referenced Header)
-> Paths Step Response (Referenced Header)
forall k (q :: k -> k -> *) (a :: k) (b :: k).
NiceQuiver q a b =>
q a b -> Paths q a b
step (HeaderName -> Step Response (Referenced Header)
ResponseHeader HeaderName
k))) (InsOrdHashMap HeaderName (Referenced Header)
 -> InsOrdHashMap HeaderName (Traced (Referenced Header)))
-> InsOrdHashMap HeaderName (Referenced Header)
-> InsOrdHashMap HeaderName (Traced (Referenced Header))
forall a b. (a -> b) -> a -> b
$
    Response -> InsOrdHashMap HeaderName (Referenced Header)
_responseHeaders (Response -> InsOrdHashMap HeaderName (Referenced Header))
-> Response -> InsOrdHashMap HeaderName (Referenced Header)
forall a b. (a -> b) -> a -> b
$ Traced Response -> Response
forall (w :: * -> *) a. Comonad w => w a -> a
extract Traced Response
resp

instance Issuable 'ResponseLevel where
  data Issue 'ResponseLevel
    = ConsumerDoesntHaveMediaType MediaType
    | ProducerDoesntHaveResponseHeader HeaderName
    deriving stock (Issue 'ResponseLevel -> Issue 'ResponseLevel -> Bool
(Issue 'ResponseLevel -> Issue 'ResponseLevel -> Bool)
-> (Issue 'ResponseLevel -> Issue 'ResponseLevel -> Bool)
-> Eq (Issue 'ResponseLevel)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Issue 'ResponseLevel -> Issue 'ResponseLevel -> Bool
$c/= :: Issue 'ResponseLevel -> Issue 'ResponseLevel -> Bool
== :: Issue 'ResponseLevel -> Issue 'ResponseLevel -> Bool
$c== :: Issue 'ResponseLevel -> Issue 'ResponseLevel -> Bool
Eq, Eq (Issue 'ResponseLevel)
Eq (Issue 'ResponseLevel)
-> (Issue 'ResponseLevel -> Issue 'ResponseLevel -> Ordering)
-> (Issue 'ResponseLevel -> Issue 'ResponseLevel -> Bool)
-> (Issue 'ResponseLevel -> Issue 'ResponseLevel -> Bool)
-> (Issue 'ResponseLevel -> Issue 'ResponseLevel -> Bool)
-> (Issue 'ResponseLevel -> Issue 'ResponseLevel -> Bool)
-> (Issue 'ResponseLevel
    -> Issue 'ResponseLevel -> Issue 'ResponseLevel)
-> (Issue 'ResponseLevel
    -> Issue 'ResponseLevel -> Issue 'ResponseLevel)
-> Ord (Issue 'ResponseLevel)
Issue 'ResponseLevel -> Issue 'ResponseLevel -> Bool
Issue 'ResponseLevel -> Issue 'ResponseLevel -> Ordering
Issue 'ResponseLevel
-> Issue 'ResponseLevel -> Issue 'ResponseLevel
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Issue 'ResponseLevel
-> Issue 'ResponseLevel -> Issue 'ResponseLevel
$cmin :: Issue 'ResponseLevel
-> Issue 'ResponseLevel -> Issue 'ResponseLevel
max :: Issue 'ResponseLevel
-> Issue 'ResponseLevel -> Issue 'ResponseLevel
$cmax :: Issue 'ResponseLevel
-> Issue 'ResponseLevel -> Issue 'ResponseLevel
>= :: Issue 'ResponseLevel -> Issue 'ResponseLevel -> Bool
$c>= :: Issue 'ResponseLevel -> Issue 'ResponseLevel -> Bool
> :: Issue 'ResponseLevel -> Issue 'ResponseLevel -> Bool
$c> :: Issue 'ResponseLevel -> Issue 'ResponseLevel -> Bool
<= :: Issue 'ResponseLevel -> Issue 'ResponseLevel -> Bool
$c<= :: Issue 'ResponseLevel -> Issue 'ResponseLevel -> Bool
< :: Issue 'ResponseLevel -> Issue 'ResponseLevel -> Bool
$c< :: Issue 'ResponseLevel -> Issue 'ResponseLevel -> Bool
compare :: Issue 'ResponseLevel -> Issue 'ResponseLevel -> Ordering
$ccompare :: Issue 'ResponseLevel -> Issue 'ResponseLevel -> Ordering
$cp1Ord :: Eq (Issue 'ResponseLevel)
Ord, HttpStatusCode -> Issue 'ResponseLevel -> ShowS
[Issue 'ResponseLevel] -> ShowS
Issue 'ResponseLevel -> String
(HttpStatusCode -> Issue 'ResponseLevel -> ShowS)
-> (Issue 'ResponseLevel -> String)
-> ([Issue 'ResponseLevel] -> ShowS)
-> Show (Issue 'ResponseLevel)
forall a.
(HttpStatusCode -> a -> ShowS)
-> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Issue 'ResponseLevel] -> ShowS
$cshowList :: [Issue 'ResponseLevel] -> ShowS
show :: Issue 'ResponseLevel -> String
$cshow :: Issue 'ResponseLevel -> String
showsPrec :: HttpStatusCode -> Issue 'ResponseLevel -> ShowS
$cshowsPrec :: HttpStatusCode -> Issue 'ResponseLevel -> ShowS
Show)
  issueKind :: Issue 'ResponseLevel -> IssueKind
issueKind = \case
    Issue 'ResponseLevel
_ -> IssueKind
CertainIssue
  describeIssue :: Orientation -> Issue 'ResponseLevel -> Blocks
describeIssue Orientation
Forward (ConsumerDoesntHaveMediaType t) =
    Inlines -> Blocks
para (Inlines -> Blocks) -> Inlines -> Blocks
forall a b. (a -> b) -> a -> b
$ Inlines
"Media type was removed: " Inlines -> Inlines -> Inlines
forall a. Semigroup a => a -> a -> a
<> (HeaderName -> Inlines
code (HeaderName -> Inlines)
-> (MediaType -> HeaderName) -> MediaType -> Inlines
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> HeaderName
T.pack (String -> HeaderName)
-> (MediaType -> String) -> MediaType -> HeaderName
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MediaType -> String
forall a. Show a => a -> String
show (MediaType -> Inlines) -> MediaType -> Inlines
forall a b. (a -> b) -> a -> b
$ MediaType
t) Inlines -> Inlines -> Inlines
forall a. Semigroup a => a -> a -> a
<> Inlines
"."
  describeIssue Orientation
Backward (ConsumerDoesntHaveMediaType t) =
    Inlines -> Blocks
para (Inlines -> Blocks) -> Inlines -> Blocks
forall a b. (a -> b) -> a -> b
$ Inlines
"Media type was added: " Inlines -> Inlines -> Inlines
forall a. Semigroup a => a -> a -> a
<> (HeaderName -> Inlines
code (HeaderName -> Inlines)
-> (MediaType -> HeaderName) -> MediaType -> Inlines
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> HeaderName
T.pack (String -> HeaderName)
-> (MediaType -> String) -> MediaType -> HeaderName
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MediaType -> String
forall a. Show a => a -> String
show (MediaType -> Inlines) -> MediaType -> Inlines
forall a b. (a -> b) -> a -> b
$ MediaType
t) Inlines -> Inlines -> Inlines
forall a. Semigroup a => a -> a -> a
<> Inlines
"."
  describeIssue Orientation
Forward (ProducerDoesntHaveResponseHeader h) =
    Inlines -> Blocks
para (Inlines -> Blocks) -> Inlines -> Blocks
forall a b. (a -> b) -> a -> b
$ Inlines
"New header was added " Inlines -> Inlines -> Inlines
forall a. Semigroup a => a -> a -> a
<> HeaderName -> Inlines
code HeaderName
h Inlines -> Inlines -> Inlines
forall a. Semigroup a => a -> a -> a
<> Inlines
"."
  describeIssue Orientation
Backward (ProducerDoesntHaveResponseHeader h) =
    Inlines -> Blocks
para (Inlines -> Blocks) -> Inlines -> Blocks
forall a b. (a -> b) -> a -> b
$ Inlines
"Header was removed " Inlines -> Inlines -> Inlines
forall a. Semigroup a => a -> a -> a
<> HeaderName -> Inlines
code HeaderName
h Inlines -> Inlines -> Inlines
forall a. Semigroup a => a -> a -> a
<> Inlines
"."

instance Behavable 'ResponseLevel 'PayloadLevel where
  data Behave 'ResponseLevel 'PayloadLevel
    = ResponsePayload
    deriving stock (Behave 'ResponseLevel 'PayloadLevel
-> Behave 'ResponseLevel 'PayloadLevel -> Bool
(Behave 'ResponseLevel 'PayloadLevel
 -> Behave 'ResponseLevel 'PayloadLevel -> Bool)
-> (Behave 'ResponseLevel 'PayloadLevel
    -> Behave 'ResponseLevel 'PayloadLevel -> Bool)
-> Eq (Behave 'ResponseLevel 'PayloadLevel)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Behave 'ResponseLevel 'PayloadLevel
-> Behave 'ResponseLevel 'PayloadLevel -> Bool
$c/= :: Behave 'ResponseLevel 'PayloadLevel
-> Behave 'ResponseLevel 'PayloadLevel -> Bool
== :: Behave 'ResponseLevel 'PayloadLevel
-> Behave 'ResponseLevel 'PayloadLevel -> Bool
$c== :: Behave 'ResponseLevel 'PayloadLevel
-> Behave 'ResponseLevel 'PayloadLevel -> Bool
Eq, Eq (Behave 'ResponseLevel 'PayloadLevel)
Eq (Behave 'ResponseLevel 'PayloadLevel)
-> (Behave 'ResponseLevel 'PayloadLevel
    -> Behave 'ResponseLevel 'PayloadLevel -> Ordering)
-> (Behave 'ResponseLevel 'PayloadLevel
    -> Behave 'ResponseLevel 'PayloadLevel -> Bool)
-> (Behave 'ResponseLevel 'PayloadLevel
    -> Behave 'ResponseLevel 'PayloadLevel -> Bool)
-> (Behave 'ResponseLevel 'PayloadLevel
    -> Behave 'ResponseLevel 'PayloadLevel -> Bool)
-> (Behave 'ResponseLevel 'PayloadLevel
    -> Behave 'ResponseLevel 'PayloadLevel -> Bool)
-> (Behave 'ResponseLevel 'PayloadLevel
    -> Behave 'ResponseLevel 'PayloadLevel
    -> Behave 'ResponseLevel 'PayloadLevel)
-> (Behave 'ResponseLevel 'PayloadLevel
    -> Behave 'ResponseLevel 'PayloadLevel
    -> Behave 'ResponseLevel 'PayloadLevel)
-> Ord (Behave 'ResponseLevel 'PayloadLevel)
Behave 'ResponseLevel 'PayloadLevel
-> Behave 'ResponseLevel 'PayloadLevel -> Bool
Behave 'ResponseLevel 'PayloadLevel
-> Behave 'ResponseLevel 'PayloadLevel -> Ordering
Behave 'ResponseLevel 'PayloadLevel
-> Behave 'ResponseLevel 'PayloadLevel
-> Behave 'ResponseLevel 'PayloadLevel
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Behave 'ResponseLevel 'PayloadLevel
-> Behave 'ResponseLevel 'PayloadLevel
-> Behave 'ResponseLevel 'PayloadLevel
$cmin :: Behave 'ResponseLevel 'PayloadLevel
-> Behave 'ResponseLevel 'PayloadLevel
-> Behave 'ResponseLevel 'PayloadLevel
max :: Behave 'ResponseLevel 'PayloadLevel
-> Behave 'ResponseLevel 'PayloadLevel
-> Behave 'ResponseLevel 'PayloadLevel
$cmax :: Behave 'ResponseLevel 'PayloadLevel
-> Behave 'ResponseLevel 'PayloadLevel
-> Behave 'ResponseLevel 'PayloadLevel
>= :: Behave 'ResponseLevel 'PayloadLevel
-> Behave 'ResponseLevel 'PayloadLevel -> Bool
$c>= :: Behave 'ResponseLevel 'PayloadLevel
-> Behave 'ResponseLevel 'PayloadLevel -> Bool
> :: Behave 'ResponseLevel 'PayloadLevel
-> Behave 'ResponseLevel 'PayloadLevel -> Bool
$c> :: Behave 'ResponseLevel 'PayloadLevel
-> Behave 'ResponseLevel 'PayloadLevel -> Bool
<= :: Behave 'ResponseLevel 'PayloadLevel
-> Behave 'ResponseLevel 'PayloadLevel -> Bool
$c<= :: Behave 'ResponseLevel 'PayloadLevel
-> Behave 'ResponseLevel 'PayloadLevel -> Bool
< :: Behave 'ResponseLevel 'PayloadLevel
-> Behave 'ResponseLevel 'PayloadLevel -> Bool
$c< :: Behave 'ResponseLevel 'PayloadLevel
-> Behave 'ResponseLevel 'PayloadLevel -> Bool
compare :: Behave 'ResponseLevel 'PayloadLevel
-> Behave 'ResponseLevel 'PayloadLevel -> Ordering
$ccompare :: Behave 'ResponseLevel 'PayloadLevel
-> Behave 'ResponseLevel 'PayloadLevel -> Ordering
$cp1Ord :: Eq (Behave 'ResponseLevel 'PayloadLevel)
Ord, HttpStatusCode -> Behave 'ResponseLevel 'PayloadLevel -> ShowS
[Behave 'ResponseLevel 'PayloadLevel] -> ShowS
Behave 'ResponseLevel 'PayloadLevel -> String
(HttpStatusCode -> Behave 'ResponseLevel 'PayloadLevel -> ShowS)
-> (Behave 'ResponseLevel 'PayloadLevel -> String)
-> ([Behave 'ResponseLevel 'PayloadLevel] -> ShowS)
-> Show (Behave 'ResponseLevel 'PayloadLevel)
forall a.
(HttpStatusCode -> a -> ShowS)
-> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Behave 'ResponseLevel 'PayloadLevel] -> ShowS
$cshowList :: [Behave 'ResponseLevel 'PayloadLevel] -> ShowS
show :: Behave 'ResponseLevel 'PayloadLevel -> String
$cshow :: Behave 'ResponseLevel 'PayloadLevel -> String
showsPrec :: HttpStatusCode -> Behave 'ResponseLevel 'PayloadLevel -> ShowS
$cshowsPrec :: HttpStatusCode -> Behave 'ResponseLevel 'PayloadLevel -> ShowS
Show)

  describeBehavior :: Behave 'ResponseLevel 'PayloadLevel -> Inlines
describeBehavior Behave 'ResponseLevel 'PayloadLevel
ResponsePayload = Inlines
"Payload"

instance Behavable 'ResponseLevel 'HeaderLevel where
  data Behave 'ResponseLevel 'HeaderLevel
    = InHeader HeaderName
    deriving stock (Behave 'ResponseLevel 'HeaderLevel
-> Behave 'ResponseLevel 'HeaderLevel -> Bool
(Behave 'ResponseLevel 'HeaderLevel
 -> Behave 'ResponseLevel 'HeaderLevel -> Bool)
-> (Behave 'ResponseLevel 'HeaderLevel
    -> Behave 'ResponseLevel 'HeaderLevel -> Bool)
-> Eq (Behave 'ResponseLevel 'HeaderLevel)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Behave 'ResponseLevel 'HeaderLevel
-> Behave 'ResponseLevel 'HeaderLevel -> Bool
$c/= :: Behave 'ResponseLevel 'HeaderLevel
-> Behave 'ResponseLevel 'HeaderLevel -> Bool
== :: Behave 'ResponseLevel 'HeaderLevel
-> Behave 'ResponseLevel 'HeaderLevel -> Bool
$c== :: Behave 'ResponseLevel 'HeaderLevel
-> Behave 'ResponseLevel 'HeaderLevel -> Bool
Eq, Eq (Behave 'ResponseLevel 'HeaderLevel)
Eq (Behave 'ResponseLevel 'HeaderLevel)
-> (Behave 'ResponseLevel 'HeaderLevel
    -> Behave 'ResponseLevel 'HeaderLevel -> Ordering)
-> (Behave 'ResponseLevel 'HeaderLevel
    -> Behave 'ResponseLevel 'HeaderLevel -> Bool)
-> (Behave 'ResponseLevel 'HeaderLevel
    -> Behave 'ResponseLevel 'HeaderLevel -> Bool)
-> (Behave 'ResponseLevel 'HeaderLevel
    -> Behave 'ResponseLevel 'HeaderLevel -> Bool)
-> (Behave 'ResponseLevel 'HeaderLevel
    -> Behave 'ResponseLevel 'HeaderLevel -> Bool)
-> (Behave 'ResponseLevel 'HeaderLevel
    -> Behave 'ResponseLevel 'HeaderLevel
    -> Behave 'ResponseLevel 'HeaderLevel)
-> (Behave 'ResponseLevel 'HeaderLevel
    -> Behave 'ResponseLevel 'HeaderLevel
    -> Behave 'ResponseLevel 'HeaderLevel)
-> Ord (Behave 'ResponseLevel 'HeaderLevel)
Behave 'ResponseLevel 'HeaderLevel
-> Behave 'ResponseLevel 'HeaderLevel -> Bool
Behave 'ResponseLevel 'HeaderLevel
-> Behave 'ResponseLevel 'HeaderLevel -> Ordering
Behave 'ResponseLevel 'HeaderLevel
-> Behave 'ResponseLevel 'HeaderLevel
-> Behave 'ResponseLevel 'HeaderLevel
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Behave 'ResponseLevel 'HeaderLevel
-> Behave 'ResponseLevel 'HeaderLevel
-> Behave 'ResponseLevel 'HeaderLevel
$cmin :: Behave 'ResponseLevel 'HeaderLevel
-> Behave 'ResponseLevel 'HeaderLevel
-> Behave 'ResponseLevel 'HeaderLevel
max :: Behave 'ResponseLevel 'HeaderLevel
-> Behave 'ResponseLevel 'HeaderLevel
-> Behave 'ResponseLevel 'HeaderLevel
$cmax :: Behave 'ResponseLevel 'HeaderLevel
-> Behave 'ResponseLevel 'HeaderLevel
-> Behave 'ResponseLevel 'HeaderLevel
>= :: Behave 'ResponseLevel 'HeaderLevel
-> Behave 'ResponseLevel 'HeaderLevel -> Bool
$c>= :: Behave 'ResponseLevel 'HeaderLevel
-> Behave 'ResponseLevel 'HeaderLevel -> Bool
> :: Behave 'ResponseLevel 'HeaderLevel
-> Behave 'ResponseLevel 'HeaderLevel -> Bool
$c> :: Behave 'ResponseLevel 'HeaderLevel
-> Behave 'ResponseLevel 'HeaderLevel -> Bool
<= :: Behave 'ResponseLevel 'HeaderLevel
-> Behave 'ResponseLevel 'HeaderLevel -> Bool
$c<= :: Behave 'ResponseLevel 'HeaderLevel
-> Behave 'ResponseLevel 'HeaderLevel -> Bool
< :: Behave 'ResponseLevel 'HeaderLevel
-> Behave 'ResponseLevel 'HeaderLevel -> Bool
$c< :: Behave 'ResponseLevel 'HeaderLevel
-> Behave 'ResponseLevel 'HeaderLevel -> Bool
compare :: Behave 'ResponseLevel 'HeaderLevel
-> Behave 'ResponseLevel 'HeaderLevel -> Ordering
$ccompare :: Behave 'ResponseLevel 'HeaderLevel
-> Behave 'ResponseLevel 'HeaderLevel -> Ordering
$cp1Ord :: Eq (Behave 'ResponseLevel 'HeaderLevel)
Ord, HttpStatusCode -> Behave 'ResponseLevel 'HeaderLevel -> ShowS
[Behave 'ResponseLevel 'HeaderLevel] -> ShowS
Behave 'ResponseLevel 'HeaderLevel -> String
(HttpStatusCode -> Behave 'ResponseLevel 'HeaderLevel -> ShowS)
-> (Behave 'ResponseLevel 'HeaderLevel -> String)
-> ([Behave 'ResponseLevel 'HeaderLevel] -> ShowS)
-> Show (Behave 'ResponseLevel 'HeaderLevel)
forall a.
(HttpStatusCode -> a -> ShowS)
-> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Behave 'ResponseLevel 'HeaderLevel] -> ShowS
$cshowList :: [Behave 'ResponseLevel 'HeaderLevel] -> ShowS
show :: Behave 'ResponseLevel 'HeaderLevel -> String
$cshow :: Behave 'ResponseLevel 'HeaderLevel -> String
showsPrec :: HttpStatusCode -> Behave 'ResponseLevel 'HeaderLevel -> ShowS
$cshowsPrec :: HttpStatusCode -> Behave 'ResponseLevel 'HeaderLevel -> ShowS
Show)

  describeBehavior :: Behave 'ResponseLevel 'HeaderLevel -> Inlines
describeBehavior (InHeader name) = Inlines
"Header " Inlines -> Inlines -> Inlines
forall a. Semigroup a => a -> a -> a
<> HeaderName -> Inlines
code HeaderName
name

instance Subtree Response where
  type SubtreeLevel Response = 'ResponseLevel
  type
    CheckEnv Response =
      '[ ProdCons (Traced (Definitions Header))
       , ProdCons (Traced (Definitions Schema))
       , ProdCons (Traced (Definitions Link))
       ]
  checkStructuralCompatibility :: HList (CheckEnv Response)
-> ProdCons (Traced Response) -> StructuralCompatFormula ()
checkStructuralCompatibility HList (CheckEnv Response)
env ProdCons (Traced Response)
pc = do
    HList
  '[ProdCons (Traced (Definitions Header)),
    ProdCons (Traced (Definitions Schema)),
    ProdCons (Traced (Definitions Link))]
-> ProdCons (Traced (InsOrdHashMap MediaType MediaTypeObject))
-> StructuralCompatFormula ()
forall k (xs :: [*]) v.
(ReassembleHList (k : xs) (CheckEnv v), Ord k, Subtree v,
 Hashable k, Typeable k, Show k) =>
HList xs
-> ProdCons (Traced (InsOrdHashMap k v))
-> StructuralCompatFormula ()
iohmStructural HList
  '[ProdCons (Traced (Definitions Header)),
    ProdCons (Traced (Definitions Schema)),
    ProdCons (Traced (Definitions Link))]
HList (CheckEnv Response)
env (ProdCons (Traced (InsOrdHashMap MediaType MediaTypeObject))
 -> StructuralCompatFormula ())
-> ProdCons (Traced (InsOrdHashMap MediaType MediaTypeObject))
-> StructuralCompatFormula ()
forall a b. (a -> b) -> a -> b
$ Step Response (InsOrdHashMap MediaType MediaTypeObject)
-> Traced' Response (InsOrdHashMap MediaType MediaTypeObject)
-> Traced (InsOrdHashMap MediaType MediaTypeObject)
forall a a' b.
Steppable a a' =>
Step a a' -> Traced' a b -> Traced' a' b
stepTraced Step Response (InsOrdHashMap MediaType MediaTypeObject)
ResponseMediaObjects (Traced' Response (InsOrdHashMap MediaType MediaTypeObject)
 -> Traced (InsOrdHashMap MediaType MediaTypeObject))
-> (Traced Response
    -> Traced' Response (InsOrdHashMap MediaType MediaTypeObject))
-> Traced Response
-> Traced (InsOrdHashMap MediaType MediaTypeObject)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Response -> InsOrdHashMap MediaType MediaTypeObject)
-> Traced Response
-> Traced' Response (InsOrdHashMap MediaType MediaTypeObject)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Response -> InsOrdHashMap MediaType MediaTypeObject
_responseContent (Traced Response
 -> Traced (InsOrdHashMap MediaType MediaTypeObject))
-> ProdCons (Traced Response)
-> ProdCons (Traced (InsOrdHashMap MediaType MediaTypeObject))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ProdCons (Traced Response)
pc
    HList
  '[ProdCons (Traced (Definitions Header)),
    ProdCons (Traced (Definitions Schema)),
    ProdCons (Traced (Definitions Link))]
-> ProdCons (Traced (InsOrdHashMap HeaderName (Referenced Header)))
-> StructuralCompatFormula ()
forall k (xs :: [*]) v.
(ReassembleHList (k : xs) (CheckEnv v), Ord k, Subtree v,
 Hashable k, Typeable k, Show k) =>
HList xs
-> ProdCons (Traced (InsOrdHashMap k v))
-> StructuralCompatFormula ()
iohmStructural HList
  '[ProdCons (Traced (Definitions Header)),
    ProdCons (Traced (Definitions Schema)),
    ProdCons (Traced (Definitions Link))]
HList (CheckEnv Response)
env (ProdCons (Traced (InsOrdHashMap HeaderName (Referenced Header)))
 -> StructuralCompatFormula ())
-> ProdCons (Traced (InsOrdHashMap HeaderName (Referenced Header)))
-> StructuralCompatFormula ()
forall a b. (a -> b) -> a -> b
$ Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Traced' Response (InsOrdHashMap HeaderName (Referenced Header))
-> Traced (InsOrdHashMap HeaderName (Referenced Header))
forall a a' b.
Steppable a a' =>
Step a a' -> Traced' a b -> Traced' a' b
stepTraced Step Response (InsOrdHashMap HeaderName (Referenced Header))
ResponseHeaders (Traced' Response (InsOrdHashMap HeaderName (Referenced Header))
 -> Traced (InsOrdHashMap HeaderName (Referenced Header)))
-> (Traced Response
    -> Traced' Response (InsOrdHashMap HeaderName (Referenced Header)))
-> Traced Response
-> Traced (InsOrdHashMap HeaderName (Referenced Header))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Response -> InsOrdHashMap HeaderName (Referenced Header))
-> Traced Response
-> Traced' Response (InsOrdHashMap HeaderName (Referenced Header))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Response -> InsOrdHashMap HeaderName (Referenced Header)
_responseHeaders (Traced Response
 -> Traced (InsOrdHashMap HeaderName (Referenced Header)))
-> ProdCons (Traced Response)
-> ProdCons (Traced (InsOrdHashMap HeaderName (Referenced Header)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ProdCons (Traced Response)
pc
    HList
  '[ProdCons (Traced (Definitions Header)),
    ProdCons (Traced (Definitions Schema)),
    ProdCons (Traced (Definitions Link))]
-> ProdCons (Traced (InsOrdHashMap HeaderName (Referenced Link)))
-> StructuralCompatFormula ()
forall k (xs :: [*]) v.
(ReassembleHList (k : xs) (CheckEnv v), Ord k, Subtree v,
 Hashable k, Typeable k, Show k) =>
HList xs
-> ProdCons (Traced (InsOrdHashMap k v))
-> StructuralCompatFormula ()
iohmStructural HList
  '[ProdCons (Traced (Definitions Header)),
    ProdCons (Traced (Definitions Schema)),
    ProdCons (Traced (Definitions Link))]
HList (CheckEnv Response)
env (ProdCons (Traced (InsOrdHashMap HeaderName (Referenced Link)))
 -> StructuralCompatFormula ())
-> ProdCons (Traced (InsOrdHashMap HeaderName (Referenced Link)))
-> StructuralCompatFormula ()
forall a b. (a -> b) -> a -> b
$ Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Traced' Response (InsOrdHashMap HeaderName (Referenced Link))
-> Traced (InsOrdHashMap HeaderName (Referenced Link))
forall a a' b.
Steppable a a' =>
Step a a' -> Traced' a b -> Traced' a' b
stepTraced Step Response (InsOrdHashMap HeaderName (Referenced Link))
ResponseLinks (Traced' Response (InsOrdHashMap HeaderName (Referenced Link))
 -> Traced (InsOrdHashMap HeaderName (Referenced Link)))
-> (Traced Response
    -> Traced' Response (InsOrdHashMap HeaderName (Referenced Link)))
-> Traced Response
-> Traced (InsOrdHashMap HeaderName (Referenced Link))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Response -> InsOrdHashMap HeaderName (Referenced Link))
-> Traced Response
-> Traced' Response (InsOrdHashMap HeaderName (Referenced Link))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Response -> InsOrdHashMap HeaderName (Referenced Link)
_responseLinks (Traced Response
 -> Traced (InsOrdHashMap HeaderName (Referenced Link)))
-> ProdCons (Traced Response)
-> ProdCons (Traced (InsOrdHashMap HeaderName (Referenced Link)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ProdCons (Traced Response)
pc
    pure ()
  checkSemanticCompatibility :: HList (CheckEnv Response)
-> Behavior (SubtreeLevel Response)
-> ProdCons (Traced Response)
-> SemanticCompatFormula ()
checkSemanticCompatibility HList (CheckEnv Response)
env Behavior (SubtreeLevel Response)
beh ProdCons (Traced Response)
prodCons = do
    -- Roles are already swapped. Producer is a server and consumer is a client
    SemanticCompatFormula ()
checkMediaTypes
    SemanticCompatFormula ()
checkHeaders
    pure ()
    where
      checkMediaTypes :: SemanticCompatFormula ()
checkMediaTypes = do
        -- Media types are sum-like entity
        let check :: MediaType
-> ProdCons (Traced MediaTypeObject) -> SemanticCompatFormula ()
check MediaType
mediaType ProdCons (Traced MediaTypeObject)
mtObj =
              let mtEnv :: HList
  '[MediaType, ProdCons (Traced (Definitions Header)),
    ProdCons (Traced (Definitions Schema)),
    ProdCons (Traced (Definitions Link))]
mtEnv = MediaType
-> HList
     '[ProdCons (Traced (Definitions Header)),
       ProdCons (Traced (Definitions Schema)),
       ProdCons (Traced (Definitions Link))]
-> HList
     '[MediaType, ProdCons (Traced (Definitions Header)),
       ProdCons (Traced (Definitions Schema)),
       ProdCons (Traced (Definitions Link))]
forall x (xs :: [*]). x -> HList xs -> HList (x : xs)
HCons MediaType
mediaType HList
  '[ProdCons (Traced (Definitions Header)),
    ProdCons (Traced (Definitions Schema)),
    ProdCons (Traced (Definitions Link))]
HList (CheckEnv Response)
env
               in Behavior (SubtreeLevel MediaTypeObject)
-> HList
     '[MediaType, ProdCons (Traced (Definitions Header)),
       ProdCons (Traced (Definitions Schema)),
       ProdCons (Traced (Definitions Link))]
-> ProdCons (Traced MediaTypeObject)
-> SemanticCompatFormula ()
forall t (xs :: [*]).
(ReassembleHList xs (CheckEnv t), Subtree t) =>
Behavior (SubtreeLevel t)
-> HList xs -> ProdCons (Traced t) -> SemanticCompatFormula ()
checkCompatibility @MediaTypeObject (Paths Behave 'APILevel 'ResponseLevel
Behavior (SubtreeLevel Response)
beh Paths Behave 'APILevel 'ResponseLevel
-> Paths Behave 'ResponseLevel 'PayloadLevel
-> Paths Behave 'APILevel 'PayloadLevel
forall k (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> Behave 'ResponseLevel 'PayloadLevel
-> Paths Behave 'ResponseLevel 'PayloadLevel
forall k (q :: k -> k -> *) (a :: k) (b :: k).
NiceQuiver q a b =>
q a b -> Paths q a b
step Behave 'ResponseLevel 'PayloadLevel
ResponsePayload) HList
  '[MediaType, ProdCons (Traced (Definitions Header)),
    ProdCons (Traced (Definitions Schema)),
    ProdCons (Traced (Definitions Link))]
mtEnv ProdCons (Traced MediaTypeObject)
mtObj
            elements :: ProdCons (Map MediaType (Traced MediaTypeObject))
elements = Traced Response -> Map MediaType (Traced MediaTypeObject)
getEls (Traced Response -> Map MediaType (Traced MediaTypeObject))
-> ProdCons (Traced Response)
-> ProdCons (Map MediaType (Traced MediaTypeObject))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ProdCons (Traced Response)
prodCons
            getEls :: Traced Response -> Map MediaType (Traced MediaTypeObject)
getEls Traced Response
resp = [(MediaType, Traced MediaTypeObject)]
-> Map MediaType (Traced MediaTypeObject)
forall k a. Ord k => [(k, a)] -> Map k a
M.fromList ([(MediaType, Traced MediaTypeObject)]
 -> Map MediaType (Traced MediaTypeObject))
-> (InsOrdHashMap MediaType (Traced MediaTypeObject)
    -> [(MediaType, Traced MediaTypeObject)])
-> InsOrdHashMap MediaType (Traced MediaTypeObject)
-> Map MediaType (Traced MediaTypeObject)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. InsOrdHashMap MediaType (Traced MediaTypeObject)
-> [(MediaType, Traced MediaTypeObject)]
forall k v. InsOrdHashMap k v -> [(k, v)]
IOHM.toList (InsOrdHashMap MediaType (Traced MediaTypeObject)
 -> Map MediaType (Traced MediaTypeObject))
-> InsOrdHashMap MediaType (Traced MediaTypeObject)
-> Map MediaType (Traced MediaTypeObject)
forall a b. (a -> b) -> a -> b
$ Traced Response -> InsOrdHashMap MediaType (Traced MediaTypeObject)
tracedContent Traced Response
resp
        Paths Behave 'APILevel 'ResponseLevel
-> (MediaType -> Issue 'ResponseLevel)
-> (MediaType
    -> ProdCons (Traced MediaTypeObject) -> SemanticCompatFormula ())
-> ProdCons (Map MediaType (Traced MediaTypeObject))
-> SemanticCompatFormula ()
forall k (l :: BehaviorLevel)
       (q :: BehaviorLevel -> BehaviorLevel -> *) (r :: BehaviorLevel) t.
(Ord k, Issuable l) =>
Paths q r l
-> (k -> Issue l)
-> (k -> ProdCons t -> CompatFormula' q AnIssue r ())
-> ProdCons (Map k t)
-> CompatFormula' q AnIssue r ()
checkSums Paths Behave 'APILevel 'ResponseLevel
Behavior (SubtreeLevel Response)
beh MediaType -> Issue 'ResponseLevel
ConsumerDoesntHaveMediaType MediaType
-> ProdCons (Traced MediaTypeObject) -> SemanticCompatFormula ()
check ProdCons (Map MediaType (Traced MediaTypeObject))
elements

      checkHeaders :: SemanticCompatFormula ()
checkHeaders = do
        -- Headers are product-like entities
        let check :: HeaderName -> ProdCons (Traced Header) -> SemanticCompatFormula ()
check HeaderName
name ProdCons (Traced Header)
hdrs = Behavior (SubtreeLevel Header)
-> HList
     '[ProdCons (Traced (Definitions Header)),
       ProdCons (Traced (Definitions Schema)),
       ProdCons (Traced (Definitions Link))]
-> ProdCons (Traced Header)
-> SemanticCompatFormula ()
forall t (xs :: [*]).
(ReassembleHList xs (CheckEnv t), Subtree t) =>
Behavior (SubtreeLevel t)
-> HList xs -> ProdCons (Traced t) -> SemanticCompatFormula ()
checkCompatibility @Header (Paths Behave 'APILevel 'ResponseLevel
Behavior (SubtreeLevel Response)
beh Paths Behave 'APILevel 'ResponseLevel
-> Paths Behave 'ResponseLevel 'HeaderLevel
-> Paths Behave 'APILevel 'HeaderLevel
forall k (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> Behave 'ResponseLevel 'HeaderLevel
-> Paths Behave 'ResponseLevel 'HeaderLevel
forall k (q :: k -> k -> *) (a :: k) (b :: k).
NiceQuiver q a b =>
q a b -> Paths q a b
step (HeaderName -> Behave 'ResponseLevel 'HeaderLevel
InHeader HeaderName
name)) HList
  '[ProdCons (Traced (Definitions Header)),
    ProdCons (Traced (Definitions Schema)),
    ProdCons (Traced (Definitions Link))]
HList (CheckEnv Response)
env ProdCons (Traced Header)
hdrs
            elements :: ProdCons (Map HeaderName (ProductLike (Traced Header)))
elements = Traced (Definitions Header)
-> Traced Response -> Map HeaderName (ProductLike (Traced Header))
getEls (Traced (Definitions Header)
 -> Traced Response -> Map HeaderName (ProductLike (Traced Header)))
-> ProdCons (Traced (Definitions Header))
-> ProdCons
     (Traced Response -> Map HeaderName (ProductLike (Traced Header)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ProdCons (Traced (Definitions Header))
headerDefs ProdCons
  (Traced Response -> Map HeaderName (ProductLike (Traced Header)))
-> ProdCons (Traced Response)
-> ProdCons (Map HeaderName (ProductLike (Traced Header)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ProdCons (Traced Response)
prodCons
            getEls :: Traced (Definitions Header)
-> Traced Response -> Map HeaderName (ProductLike (Traced Header))
getEls Traced (Definitions Header)
headerDef Traced Response
resp = [(HeaderName, ProductLike (Traced Header))]
-> Map HeaderName (ProductLike (Traced Header))
forall k a. Ord k => [(k, a)] -> Map k a
M.fromList ([(HeaderName, ProductLike (Traced Header))]
 -> Map HeaderName (ProductLike (Traced Header)))
-> [(HeaderName, ProductLike (Traced Header))]
-> Map HeaderName (ProductLike (Traced Header))
forall a b. (a -> b) -> a -> b
$ do
              (HeaderName
hname, Traced (Referenced Header)
headerRef) <- InsOrdHashMap HeaderName (Traced (Referenced Header))
-> [(HeaderName, Traced (Referenced Header))]
forall k v. InsOrdHashMap k v -> [(k, v)]
IOHM.toList (InsOrdHashMap HeaderName (Traced (Referenced Header))
 -> [(HeaderName, Traced (Referenced Header))])
-> InsOrdHashMap HeaderName (Traced (Referenced Header))
-> [(HeaderName, Traced (Referenced Header))]
forall a b. (a -> b) -> a -> b
$ Traced Response
-> InsOrdHashMap HeaderName (Traced (Referenced Header))
tracedHeaders Traced Response
resp
              let header :: Traced Header
header = Traced (Definitions Header)
-> Traced (Referenced Header) -> Traced Header
forall a.
Typeable a =>
Traced (Definitions a) -> Traced (Referenced a) -> Traced a
dereference Traced (Definitions Header)
headerDef Traced (Referenced Header)
headerRef
              (HeaderName, ProductLike (Traced Header))
-> [(HeaderName, ProductLike (Traced Header))]
forall (f :: * -> *) a. Applicative f => a -> f a
pure
                ( HeaderName
hname
                , ProductLike :: forall a. a -> Bool -> ProductLike a
ProductLike
                    { $sel:productValue:ProductLike :: Traced Header
productValue = Traced Header
header
                    , $sel:required:ProductLike :: Bool
required = Bool -> Maybe Bool -> Bool
forall a. a -> Maybe a -> a
fromMaybe Bool
False (Maybe Bool -> Bool)
-> (Traced Header -> Maybe Bool) -> Traced Header -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Header -> Maybe Bool
_headerRequired (Header -> Maybe Bool)
-> (Traced Header -> Header) -> Traced Header -> Maybe Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Traced Header -> Header
forall (w :: * -> *) a. Comonad w => w a -> a
extract (Traced Header -> Bool) -> Traced Header -> Bool
forall a b. (a -> b) -> a -> b
$ Traced Header
header
                    }
                )
        Paths Behave 'APILevel 'ResponseLevel
-> (HeaderName -> Issue 'ResponseLevel)
-> (HeaderName
    -> ProdCons (Traced Header) -> SemanticCompatFormula ())
-> ProdCons (Map HeaderName (ProductLike (Traced Header)))
-> SemanticCompatFormula ()
forall k (l :: BehaviorLevel)
       (q :: BehaviorLevel -> BehaviorLevel -> *) (r :: BehaviorLevel) t.
(Ord k, Issuable l) =>
Paths q r l
-> (k -> Issue l)
-> (k -> ProdCons t -> CompatFormula' q AnIssue r ())
-> ProdCons (Map k (ProductLike t))
-> CompatFormula' q AnIssue r ()
checkProducts Paths Behave 'APILevel 'ResponseLevel
Behavior (SubtreeLevel Response)
beh HeaderName -> Issue 'ResponseLevel
ProducerDoesntHaveResponseHeader HeaderName -> ProdCons (Traced Header) -> SemanticCompatFormula ()
check ProdCons (Map HeaderName (ProductLike (Traced Header)))
elements
      headerDefs :: ProdCons (Traced (Definitions Header))
headerDefs = HList
  '[ProdCons (Traced (Definitions Header)),
    ProdCons (Traced (Definitions Schema)),
    ProdCons (Traced (Definitions Link))]
-> ProdCons (Traced (Definitions Header))
forall x (xs :: [*]) (t :: Bool). Has' x xs t => HList xs -> x
getH @(ProdCons (Traced (Definitions Header))) HList
  '[ProdCons (Traced (Definitions Header)),
    ProdCons (Traced (Definitions Schema)),
    ProdCons (Traced (Definitions Link))]
HList (CheckEnv Response)
env

instance Steppable Responses (Referenced Response) where
  data Step Responses (Referenced Response)
    = ResponseCodeStep HttpStatusCode
    | ResponseDefaultStep
    deriving stock (Step Responses (Referenced Response)
-> Step Responses (Referenced Response) -> Bool
(Step Responses (Referenced Response)
 -> Step Responses (Referenced Response) -> Bool)
-> (Step Responses (Referenced Response)
    -> Step Responses (Referenced Response) -> Bool)
-> Eq (Step Responses (Referenced Response))
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Step Responses (Referenced Response)
-> Step Responses (Referenced Response) -> Bool
$c/= :: Step Responses (Referenced Response)
-> Step Responses (Referenced Response) -> Bool
== :: Step Responses (Referenced Response)
-> Step Responses (Referenced Response) -> Bool
$c== :: Step Responses (Referenced Response)
-> Step Responses (Referenced Response) -> Bool
Eq, Eq (Step Responses (Referenced Response))
Eq (Step Responses (Referenced Response))
-> (Step Responses (Referenced Response)
    -> Step Responses (Referenced Response) -> Ordering)
-> (Step Responses (Referenced Response)
    -> Step Responses (Referenced Response) -> Bool)
-> (Step Responses (Referenced Response)
    -> Step Responses (Referenced Response) -> Bool)
-> (Step Responses (Referenced Response)
    -> Step Responses (Referenced Response) -> Bool)
-> (Step Responses (Referenced Response)
    -> Step Responses (Referenced Response) -> Bool)
-> (Step Responses (Referenced Response)
    -> Step Responses (Referenced Response)
    -> Step Responses (Referenced Response))
-> (Step Responses (Referenced Response)
    -> Step Responses (Referenced Response)
    -> Step Responses (Referenced Response))
-> Ord (Step Responses (Referenced Response))
Step Responses (Referenced Response)
-> Step Responses (Referenced Response) -> Bool
Step Responses (Referenced Response)
-> Step Responses (Referenced Response) -> Ordering
Step Responses (Referenced Response)
-> Step Responses (Referenced Response)
-> Step Responses (Referenced Response)
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Step Responses (Referenced Response)
-> Step Responses (Referenced Response)
-> Step Responses (Referenced Response)
$cmin :: Step Responses (Referenced Response)
-> Step Responses (Referenced Response)
-> Step Responses (Referenced Response)
max :: Step Responses (Referenced Response)
-> Step Responses (Referenced Response)
-> Step Responses (Referenced Response)
$cmax :: Step Responses (Referenced Response)
-> Step Responses (Referenced Response)
-> Step Responses (Referenced Response)
>= :: Step Responses (Referenced Response)
-> Step Responses (Referenced Response) -> Bool
$c>= :: Step Responses (Referenced Response)
-> Step Responses (Referenced Response) -> Bool
> :: Step Responses (Referenced Response)
-> Step Responses (Referenced Response) -> Bool
$c> :: Step Responses (Referenced Response)
-> Step Responses (Referenced Response) -> Bool
<= :: Step Responses (Referenced Response)
-> Step Responses (Referenced Response) -> Bool
$c<= :: Step Responses (Referenced Response)
-> Step Responses (Referenced Response) -> Bool
< :: Step Responses (Referenced Response)
-> Step Responses (Referenced Response) -> Bool
$c< :: Step Responses (Referenced Response)
-> Step Responses (Referenced Response) -> Bool
compare :: Step Responses (Referenced Response)
-> Step Responses (Referenced Response) -> Ordering
$ccompare :: Step Responses (Referenced Response)
-> Step Responses (Referenced Response) -> Ordering
$cp1Ord :: Eq (Step Responses (Referenced Response))
Ord, HttpStatusCode -> Step Responses (Referenced Response) -> ShowS
[Step Responses (Referenced Response)] -> ShowS
Step Responses (Referenced Response) -> String
(HttpStatusCode -> Step Responses (Referenced Response) -> ShowS)
-> (Step Responses (Referenced Response) -> String)
-> ([Step Responses (Referenced Response)] -> ShowS)
-> Show (Step Responses (Referenced Response))
forall a.
(HttpStatusCode -> a -> ShowS)
-> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Step Responses (Referenced Response)] -> ShowS
$cshowList :: [Step Responses (Referenced Response)] -> ShowS
show :: Step Responses (Referenced Response) -> String
$cshow :: Step Responses (Referenced Response) -> String
showsPrec :: HttpStatusCode -> Step Responses (Referenced Response) -> ShowS
$cshowsPrec :: HttpStatusCode -> Step Responses (Referenced Response) -> ShowS
Show)

instance Steppable Response MediaTypeObject where
  data Step Response MediaTypeObject = ResponseMediaObject MediaType
    deriving stock (Step Response MediaTypeObject
-> Step Response MediaTypeObject -> Bool
(Step Response MediaTypeObject
 -> Step Response MediaTypeObject -> Bool)
-> (Step Response MediaTypeObject
    -> Step Response MediaTypeObject -> Bool)
-> Eq (Step Response MediaTypeObject)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Step Response MediaTypeObject
-> Step Response MediaTypeObject -> Bool
$c/= :: Step Response MediaTypeObject
-> Step Response MediaTypeObject -> Bool
== :: Step Response MediaTypeObject
-> Step Response MediaTypeObject -> Bool
$c== :: Step Response MediaTypeObject
-> Step Response MediaTypeObject -> Bool
Eq, Eq (Step Response MediaTypeObject)
Eq (Step Response MediaTypeObject)
-> (Step Response MediaTypeObject
    -> Step Response MediaTypeObject -> Ordering)
-> (Step Response MediaTypeObject
    -> Step Response MediaTypeObject -> Bool)
-> (Step Response MediaTypeObject
    -> Step Response MediaTypeObject -> Bool)
-> (Step Response MediaTypeObject
    -> Step Response MediaTypeObject -> Bool)
-> (Step Response MediaTypeObject
    -> Step Response MediaTypeObject -> Bool)
-> (Step Response MediaTypeObject
    -> Step Response MediaTypeObject -> Step Response MediaTypeObject)
-> (Step Response MediaTypeObject
    -> Step Response MediaTypeObject -> Step Response MediaTypeObject)
-> Ord (Step Response MediaTypeObject)
Step Response MediaTypeObject
-> Step Response MediaTypeObject -> Bool
Step Response MediaTypeObject
-> Step Response MediaTypeObject -> Ordering
Step Response MediaTypeObject
-> Step Response MediaTypeObject -> Step Response MediaTypeObject
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Step Response MediaTypeObject
-> Step Response MediaTypeObject -> Step Response MediaTypeObject
$cmin :: Step Response MediaTypeObject
-> Step Response MediaTypeObject -> Step Response MediaTypeObject
max :: Step Response MediaTypeObject
-> Step Response MediaTypeObject -> Step Response MediaTypeObject
$cmax :: Step Response MediaTypeObject
-> Step Response MediaTypeObject -> Step Response MediaTypeObject
>= :: Step Response MediaTypeObject
-> Step Response MediaTypeObject -> Bool
$c>= :: Step Response MediaTypeObject
-> Step Response MediaTypeObject -> Bool
> :: Step Response MediaTypeObject
-> Step Response MediaTypeObject -> Bool
$c> :: Step Response MediaTypeObject
-> Step Response MediaTypeObject -> Bool
<= :: Step Response MediaTypeObject
-> Step Response MediaTypeObject -> Bool
$c<= :: Step Response MediaTypeObject
-> Step Response MediaTypeObject -> Bool
< :: Step Response MediaTypeObject
-> Step Response MediaTypeObject -> Bool
$c< :: Step Response MediaTypeObject
-> Step Response MediaTypeObject -> Bool
compare :: Step Response MediaTypeObject
-> Step Response MediaTypeObject -> Ordering
$ccompare :: Step Response MediaTypeObject
-> Step Response MediaTypeObject -> Ordering
$cp1Ord :: Eq (Step Response MediaTypeObject)
Ord, HttpStatusCode -> Step Response MediaTypeObject -> ShowS
[Step Response MediaTypeObject] -> ShowS
Step Response MediaTypeObject -> String
(HttpStatusCode -> Step Response MediaTypeObject -> ShowS)
-> (Step Response MediaTypeObject -> String)
-> ([Step Response MediaTypeObject] -> ShowS)
-> Show (Step Response MediaTypeObject)
forall a.
(HttpStatusCode -> a -> ShowS)
-> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Step Response MediaTypeObject] -> ShowS
$cshowList :: [Step Response MediaTypeObject] -> ShowS
show :: Step Response MediaTypeObject -> String
$cshow :: Step Response MediaTypeObject -> String
showsPrec :: HttpStatusCode -> Step Response MediaTypeObject -> ShowS
$cshowsPrec :: HttpStatusCode -> Step Response MediaTypeObject -> ShowS
Show)

instance Steppable Response (IOHM.InsOrdHashMap MediaType MediaTypeObject) where
  data Step Response (IOHM.InsOrdHashMap MediaType MediaTypeObject) = ResponseMediaObjects
    deriving stock (Step Response (InsOrdHashMap MediaType MediaTypeObject)
-> Step Response (InsOrdHashMap MediaType MediaTypeObject) -> Bool
(Step Response (InsOrdHashMap MediaType MediaTypeObject)
 -> Step Response (InsOrdHashMap MediaType MediaTypeObject) -> Bool)
-> (Step Response (InsOrdHashMap MediaType MediaTypeObject)
    -> Step Response (InsOrdHashMap MediaType MediaTypeObject) -> Bool)
-> Eq (Step Response (InsOrdHashMap MediaType MediaTypeObject))
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Step Response (InsOrdHashMap MediaType MediaTypeObject)
-> Step Response (InsOrdHashMap MediaType MediaTypeObject) -> Bool
$c/= :: Step Response (InsOrdHashMap MediaType MediaTypeObject)
-> Step Response (InsOrdHashMap MediaType MediaTypeObject) -> Bool
== :: Step Response (InsOrdHashMap MediaType MediaTypeObject)
-> Step Response (InsOrdHashMap MediaType MediaTypeObject) -> Bool
$c== :: Step Response (InsOrdHashMap MediaType MediaTypeObject)
-> Step Response (InsOrdHashMap MediaType MediaTypeObject) -> Bool
Eq, Eq (Step Response (InsOrdHashMap MediaType MediaTypeObject))
Eq (Step Response (InsOrdHashMap MediaType MediaTypeObject))
-> (Step Response (InsOrdHashMap MediaType MediaTypeObject)
    -> Step Response (InsOrdHashMap MediaType MediaTypeObject)
    -> Ordering)
-> (Step Response (InsOrdHashMap MediaType MediaTypeObject)
    -> Step Response (InsOrdHashMap MediaType MediaTypeObject) -> Bool)
-> (Step Response (InsOrdHashMap MediaType MediaTypeObject)
    -> Step Response (InsOrdHashMap MediaType MediaTypeObject) -> Bool)
-> (Step Response (InsOrdHashMap MediaType MediaTypeObject)
    -> Step Response (InsOrdHashMap MediaType MediaTypeObject) -> Bool)
-> (Step Response (InsOrdHashMap MediaType MediaTypeObject)
    -> Step Response (InsOrdHashMap MediaType MediaTypeObject) -> Bool)
-> (Step Response (InsOrdHashMap MediaType MediaTypeObject)
    -> Step Response (InsOrdHashMap MediaType MediaTypeObject)
    -> Step Response (InsOrdHashMap MediaType MediaTypeObject))
-> (Step Response (InsOrdHashMap MediaType MediaTypeObject)
    -> Step Response (InsOrdHashMap MediaType MediaTypeObject)
    -> Step Response (InsOrdHashMap MediaType MediaTypeObject))
-> Ord (Step Response (InsOrdHashMap MediaType MediaTypeObject))
Step Response (InsOrdHashMap MediaType MediaTypeObject)
-> Step Response (InsOrdHashMap MediaType MediaTypeObject) -> Bool
Step Response (InsOrdHashMap MediaType MediaTypeObject)
-> Step Response (InsOrdHashMap MediaType MediaTypeObject)
-> Ordering
Step Response (InsOrdHashMap MediaType MediaTypeObject)
-> Step Response (InsOrdHashMap MediaType MediaTypeObject)
-> Step Response (InsOrdHashMap MediaType MediaTypeObject)
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Step Response (InsOrdHashMap MediaType MediaTypeObject)
-> Step Response (InsOrdHashMap MediaType MediaTypeObject)
-> Step Response (InsOrdHashMap MediaType MediaTypeObject)
$cmin :: Step Response (InsOrdHashMap MediaType MediaTypeObject)
-> Step Response (InsOrdHashMap MediaType MediaTypeObject)
-> Step Response (InsOrdHashMap MediaType MediaTypeObject)
max :: Step Response (InsOrdHashMap MediaType MediaTypeObject)
-> Step Response (InsOrdHashMap MediaType MediaTypeObject)
-> Step Response (InsOrdHashMap MediaType MediaTypeObject)
$cmax :: Step Response (InsOrdHashMap MediaType MediaTypeObject)
-> Step Response (InsOrdHashMap MediaType MediaTypeObject)
-> Step Response (InsOrdHashMap MediaType MediaTypeObject)
>= :: Step Response (InsOrdHashMap MediaType MediaTypeObject)
-> Step Response (InsOrdHashMap MediaType MediaTypeObject) -> Bool
$c>= :: Step Response (InsOrdHashMap MediaType MediaTypeObject)
-> Step Response (InsOrdHashMap MediaType MediaTypeObject) -> Bool
> :: Step Response (InsOrdHashMap MediaType MediaTypeObject)
-> Step Response (InsOrdHashMap MediaType MediaTypeObject) -> Bool
$c> :: Step Response (InsOrdHashMap MediaType MediaTypeObject)
-> Step Response (InsOrdHashMap MediaType MediaTypeObject) -> Bool
<= :: Step Response (InsOrdHashMap MediaType MediaTypeObject)
-> Step Response (InsOrdHashMap MediaType MediaTypeObject) -> Bool
$c<= :: Step Response (InsOrdHashMap MediaType MediaTypeObject)
-> Step Response (InsOrdHashMap MediaType MediaTypeObject) -> Bool
< :: Step Response (InsOrdHashMap MediaType MediaTypeObject)
-> Step Response (InsOrdHashMap MediaType MediaTypeObject) -> Bool
$c< :: Step Response (InsOrdHashMap MediaType MediaTypeObject)
-> Step Response (InsOrdHashMap MediaType MediaTypeObject) -> Bool
compare :: Step Response (InsOrdHashMap MediaType MediaTypeObject)
-> Step Response (InsOrdHashMap MediaType MediaTypeObject)
-> Ordering
$ccompare :: Step Response (InsOrdHashMap MediaType MediaTypeObject)
-> Step Response (InsOrdHashMap MediaType MediaTypeObject)
-> Ordering
$cp1Ord :: Eq (Step Response (InsOrdHashMap MediaType MediaTypeObject))
Ord, HttpStatusCode
-> Step Response (InsOrdHashMap MediaType MediaTypeObject) -> ShowS
[Step Response (InsOrdHashMap MediaType MediaTypeObject)] -> ShowS
Step Response (InsOrdHashMap MediaType MediaTypeObject) -> String
(HttpStatusCode
 -> Step Response (InsOrdHashMap MediaType MediaTypeObject)
 -> ShowS)
-> (Step Response (InsOrdHashMap MediaType MediaTypeObject)
    -> String)
-> ([Step Response (InsOrdHashMap MediaType MediaTypeObject)]
    -> ShowS)
-> Show (Step Response (InsOrdHashMap MediaType MediaTypeObject))
forall a.
(HttpStatusCode -> a -> ShowS)
-> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Step Response (InsOrdHashMap MediaType MediaTypeObject)] -> ShowS
$cshowList :: [Step Response (InsOrdHashMap MediaType MediaTypeObject)] -> ShowS
show :: Step Response (InsOrdHashMap MediaType MediaTypeObject) -> String
$cshow :: Step Response (InsOrdHashMap MediaType MediaTypeObject) -> String
showsPrec :: HttpStatusCode
-> Step Response (InsOrdHashMap MediaType MediaTypeObject) -> ShowS
$cshowsPrec :: HttpStatusCode
-> Step Response (InsOrdHashMap MediaType MediaTypeObject) -> ShowS
Show)

instance Steppable Response (Definitions (Referenced Header)) where
  data Step Response (Definitions (Referenced Header)) = ResponseHeaders
    deriving stock (Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Bool
(Step Response (InsOrdHashMap HeaderName (Referenced Header))
 -> Step Response (InsOrdHashMap HeaderName (Referenced Header))
 -> Bool)
-> (Step Response (InsOrdHashMap HeaderName (Referenced Header))
    -> Step Response (InsOrdHashMap HeaderName (Referenced Header))
    -> Bool)
-> Eq
     (Step Response (InsOrdHashMap HeaderName (Referenced Header)))
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Bool
$c/= :: Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Bool
== :: Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Bool
$c== :: Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Bool
Eq, Eq (Step Response (InsOrdHashMap HeaderName (Referenced Header)))
Eq (Step Response (InsOrdHashMap HeaderName (Referenced Header)))
-> (Step Response (InsOrdHashMap HeaderName (Referenced Header))
    -> Step Response (InsOrdHashMap HeaderName (Referenced Header))
    -> Ordering)
-> (Step Response (InsOrdHashMap HeaderName (Referenced Header))
    -> Step Response (InsOrdHashMap HeaderName (Referenced Header))
    -> Bool)
-> (Step Response (InsOrdHashMap HeaderName (Referenced Header))
    -> Step Response (InsOrdHashMap HeaderName (Referenced Header))
    -> Bool)
-> (Step Response (InsOrdHashMap HeaderName (Referenced Header))
    -> Step Response (InsOrdHashMap HeaderName (Referenced Header))
    -> Bool)
-> (Step Response (InsOrdHashMap HeaderName (Referenced Header))
    -> Step Response (InsOrdHashMap HeaderName (Referenced Header))
    -> Bool)
-> (Step Response (InsOrdHashMap HeaderName (Referenced Header))
    -> Step Response (InsOrdHashMap HeaderName (Referenced Header))
    -> Step Response (InsOrdHashMap HeaderName (Referenced Header)))
-> (Step Response (InsOrdHashMap HeaderName (Referenced Header))
    -> Step Response (InsOrdHashMap HeaderName (Referenced Header))
    -> Step Response (InsOrdHashMap HeaderName (Referenced Header)))
-> Ord
     (Step Response (InsOrdHashMap HeaderName (Referenced Header)))
Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Bool
Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Ordering
Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Step Response (InsOrdHashMap HeaderName (Referenced Header))
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Step Response (InsOrdHashMap HeaderName (Referenced Header))
$cmin :: Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Step Response (InsOrdHashMap HeaderName (Referenced Header))
max :: Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Step Response (InsOrdHashMap HeaderName (Referenced Header))
$cmax :: Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Step Response (InsOrdHashMap HeaderName (Referenced Header))
>= :: Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Bool
$c>= :: Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Bool
> :: Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Bool
$c> :: Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Bool
<= :: Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Bool
$c<= :: Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Bool
< :: Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Bool
$c< :: Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Bool
compare :: Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Ordering
$ccompare :: Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> Ordering
$cp1Ord :: Eq (Step Response (InsOrdHashMap HeaderName (Referenced Header)))
Ord, HttpStatusCode
-> Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> ShowS
[Step Response (InsOrdHashMap HeaderName (Referenced Header))]
-> ShowS
Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> String
(HttpStatusCode
 -> Step Response (InsOrdHashMap HeaderName (Referenced Header))
 -> ShowS)
-> (Step Response (InsOrdHashMap HeaderName (Referenced Header))
    -> String)
-> ([Step Response (InsOrdHashMap HeaderName (Referenced Header))]
    -> ShowS)
-> Show
     (Step Response (InsOrdHashMap HeaderName (Referenced Header)))
forall a.
(HttpStatusCode -> a -> ShowS)
-> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Step Response (InsOrdHashMap HeaderName (Referenced Header))]
-> ShowS
$cshowList :: [Step Response (InsOrdHashMap HeaderName (Referenced Header))]
-> ShowS
show :: Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> String
$cshow :: Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> String
showsPrec :: HttpStatusCode
-> Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> ShowS
$cshowsPrec :: HttpStatusCode
-> Step Response (InsOrdHashMap HeaderName (Referenced Header))
-> ShowS
Show)

instance Steppable Response (Definitions (Referenced Link)) where
  data Step Response (Definitions (Referenced Link)) = ResponseLinks
    deriving stock (Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Bool
(Step Response (InsOrdHashMap HeaderName (Referenced Link))
 -> Step Response (InsOrdHashMap HeaderName (Referenced Link))
 -> Bool)
-> (Step Response (InsOrdHashMap HeaderName (Referenced Link))
    -> Step Response (InsOrdHashMap HeaderName (Referenced Link))
    -> Bool)
-> Eq (Step Response (InsOrdHashMap HeaderName (Referenced Link)))
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Bool
$c/= :: Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Bool
== :: Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Bool
$c== :: Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Bool
Eq, Eq (Step Response (InsOrdHashMap HeaderName (Referenced Link)))
Eq (Step Response (InsOrdHashMap HeaderName (Referenced Link)))
-> (Step Response (InsOrdHashMap HeaderName (Referenced Link))
    -> Step Response (InsOrdHashMap HeaderName (Referenced Link))
    -> Ordering)
-> (Step Response (InsOrdHashMap HeaderName (Referenced Link))
    -> Step Response (InsOrdHashMap HeaderName (Referenced Link))
    -> Bool)
-> (Step Response (InsOrdHashMap HeaderName (Referenced Link))
    -> Step Response (InsOrdHashMap HeaderName (Referenced Link))
    -> Bool)
-> (Step Response (InsOrdHashMap HeaderName (Referenced Link))
    -> Step Response (InsOrdHashMap HeaderName (Referenced Link))
    -> Bool)
-> (Step Response (InsOrdHashMap HeaderName (Referenced Link))
    -> Step Response (InsOrdHashMap HeaderName (Referenced Link))
    -> Bool)
-> (Step Response (InsOrdHashMap HeaderName (Referenced Link))
    -> Step Response (InsOrdHashMap HeaderName (Referenced Link))
    -> Step Response (InsOrdHashMap HeaderName (Referenced Link)))
-> (Step Response (InsOrdHashMap HeaderName (Referenced Link))
    -> Step Response (InsOrdHashMap HeaderName (Referenced Link))
    -> Step Response (InsOrdHashMap HeaderName (Referenced Link)))
-> Ord (Step Response (InsOrdHashMap HeaderName (Referenced Link)))
Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Bool
Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Ordering
Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Step Response (InsOrdHashMap HeaderName (Referenced Link))
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Step Response (InsOrdHashMap HeaderName (Referenced Link))
$cmin :: Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Step Response (InsOrdHashMap HeaderName (Referenced Link))
max :: Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Step Response (InsOrdHashMap HeaderName (Referenced Link))
$cmax :: Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Step Response (InsOrdHashMap HeaderName (Referenced Link))
>= :: Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Bool
$c>= :: Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Bool
> :: Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Bool
$c> :: Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Bool
<= :: Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Bool
$c<= :: Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Bool
< :: Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Bool
$c< :: Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Bool
compare :: Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Ordering
$ccompare :: Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> Ordering
$cp1Ord :: Eq (Step Response (InsOrdHashMap HeaderName (Referenced Link)))
Ord, HttpStatusCode
-> Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> ShowS
[Step Response (InsOrdHashMap HeaderName (Referenced Link))]
-> ShowS
Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> String
(HttpStatusCode
 -> Step Response (InsOrdHashMap HeaderName (Referenced Link))
 -> ShowS)
-> (Step Response (InsOrdHashMap HeaderName (Referenced Link))
    -> String)
-> ([Step Response (InsOrdHashMap HeaderName (Referenced Link))]
    -> ShowS)
-> Show
     (Step Response (InsOrdHashMap HeaderName (Referenced Link)))
forall a.
(HttpStatusCode -> a -> ShowS)
-> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Step Response (InsOrdHashMap HeaderName (Referenced Link))]
-> ShowS
$cshowList :: [Step Response (InsOrdHashMap HeaderName (Referenced Link))]
-> ShowS
show :: Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> String
$cshow :: Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> String
showsPrec :: HttpStatusCode
-> Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> ShowS
$cshowsPrec :: HttpStatusCode
-> Step Response (InsOrdHashMap HeaderName (Referenced Link))
-> ShowS
Show)

instance Steppable Response (Referenced Header) where
  data Step Response (Referenced Header) = ResponseHeader HeaderName
    deriving stock (Step Response (Referenced Header)
-> Step Response (Referenced Header) -> Bool
(Step Response (Referenced Header)
 -> Step Response (Referenced Header) -> Bool)
-> (Step Response (Referenced Header)
    -> Step Response (Referenced Header) -> Bool)
-> Eq (Step Response (Referenced Header))
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Step Response (Referenced Header)
-> Step Response (Referenced Header) -> Bool
$c/= :: Step Response (Referenced Header)
-> Step Response (Referenced Header) -> Bool
== :: Step Response (Referenced Header)
-> Step Response (Referenced Header) -> Bool
$c== :: Step Response (Referenced Header)
-> Step Response (Referenced Header) -> Bool
Eq, Eq (Step Response (Referenced Header))
Eq (Step Response (Referenced Header))
-> (Step Response (Referenced Header)
    -> Step Response (Referenced Header) -> Ordering)
-> (Step Response (Referenced Header)
    -> Step Response (Referenced Header) -> Bool)
-> (Step Response (Referenced Header)
    -> Step Response (Referenced Header) -> Bool)
-> (Step Response (Referenced Header)
    -> Step Response (Referenced Header) -> Bool)
-> (Step Response (Referenced Header)
    -> Step Response (Referenced Header) -> Bool)
-> (Step Response (Referenced Header)
    -> Step Response (Referenced Header)
    -> Step Response (Referenced Header))
-> (Step Response (Referenced Header)
    -> Step Response (Referenced Header)
    -> Step Response (Referenced Header))
-> Ord (Step Response (Referenced Header))
Step Response (Referenced Header)
-> Step Response (Referenced Header) -> Bool
Step Response (Referenced Header)
-> Step Response (Referenced Header) -> Ordering
Step Response (Referenced Header)
-> Step Response (Referenced Header)
-> Step Response (Referenced Header)
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Step Response (Referenced Header)
-> Step Response (Referenced Header)
-> Step Response (Referenced Header)
$cmin :: Step Response (Referenced Header)
-> Step Response (Referenced Header)
-> Step Response (Referenced Header)
max :: Step Response (Referenced Header)
-> Step Response (Referenced Header)
-> Step Response (Referenced Header)
$cmax :: Step Response (Referenced Header)
-> Step Response (Referenced Header)
-> Step Response (Referenced Header)
>= :: Step Response (Referenced Header)
-> Step Response (Referenced Header) -> Bool
$c>= :: Step Response (Referenced Header)
-> Step Response (Referenced Header) -> Bool
> :: Step Response (Referenced Header)
-> Step Response (Referenced Header) -> Bool
$c> :: Step Response (Referenced Header)
-> Step Response (Referenced Header) -> Bool
<= :: Step Response (Referenced Header)
-> Step Response (Referenced Header) -> Bool
$c<= :: Step Response (Referenced Header)
-> Step Response (Referenced Header) -> Bool
< :: Step Response (Referenced Header)
-> Step Response (Referenced Header) -> Bool
$c< :: Step Response (Referenced Header)
-> Step Response (Referenced Header) -> Bool
compare :: Step Response (Referenced Header)
-> Step Response (Referenced Header) -> Ordering
$ccompare :: Step Response (Referenced Header)
-> Step Response (Referenced Header) -> Ordering
$cp1Ord :: Eq (Step Response (Referenced Header))
Ord, HttpStatusCode -> Step Response (Referenced Header) -> ShowS
[Step Response (Referenced Header)] -> ShowS
Step Response (Referenced Header) -> String
(HttpStatusCode -> Step Response (Referenced Header) -> ShowS)
-> (Step Response (Referenced Header) -> String)
-> ([Step Response (Referenced Header)] -> ShowS)
-> Show (Step Response (Referenced Header))
forall a.
(HttpStatusCode -> a -> ShowS)
-> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Step Response (Referenced Header)] -> ShowS
$cshowList :: [Step Response (Referenced Header)] -> ShowS
show :: Step Response (Referenced Header) -> String
$cshow :: Step Response (Referenced Header) -> String
showsPrec :: HttpStatusCode -> Step Response (Referenced Header) -> ShowS
$cshowsPrec :: HttpStatusCode -> Step Response (Referenced Header) -> ShowS
Show)

instance Steppable Responses (IOHM.InsOrdHashMap HttpStatusCode (Referenced Response)) where
  data Step Responses (IOHM.InsOrdHashMap HttpStatusCode (Referenced Response)) = ResponsesStep
    deriving stock (Step Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Step
     Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Bool
(Step
   Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
 -> Step
      Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
 -> Bool)
-> (Step
      Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
    -> Step
         Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
    -> Bool)
-> Eq
     (Step
        Responses (InsOrdHashMap HttpStatusCode (Referenced Response)))
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Step Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Step
     Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Bool
$c/= :: Step Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Step
     Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Bool
== :: Step Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Step
     Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Bool
$c== :: Step Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Step
     Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Bool
Eq, Eq
  (Step
     Responses (InsOrdHashMap HttpStatusCode (Referenced Response)))
Eq
  (Step
     Responses (InsOrdHashMap HttpStatusCode (Referenced Response)))
-> (Step
      Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
    -> Step
         Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
    -> Ordering)
-> (Step
      Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
    -> Step
         Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
    -> Bool)
-> (Step
      Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
    -> Step
         Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
    -> Bool)
-> (Step
      Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
    -> Step
         Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
    -> Bool)
-> (Step
      Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
    -> Step
         Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
    -> Bool)
-> (Step
      Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
    -> Step
         Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
    -> Step
         Responses (InsOrdHashMap HttpStatusCode (Referenced Response)))
-> (Step
      Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
    -> Step
         Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
    -> Step
         Responses (InsOrdHashMap HttpStatusCode (Referenced Response)))
-> Ord
     (Step
        Responses (InsOrdHashMap HttpStatusCode (Referenced Response)))
Step Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Step
     Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Bool
Step Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Step
     Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Ordering
Step Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Step
     Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Step
     Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Step Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Step
     Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Step
     Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
$cmin :: Step Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Step
     Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Step
     Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
max :: Step Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Step
     Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Step
     Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
$cmax :: Step Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Step
     Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Step
     Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
>= :: Step Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Step
     Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Bool
$c>= :: Step Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Step
     Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Bool
> :: Step Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Step
     Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Bool
$c> :: Step Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Step
     Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Bool
<= :: Step Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Step
     Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Bool
$c<= :: Step Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Step
     Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Bool
< :: Step Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Step
     Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Bool
$c< :: Step Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Step
     Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Bool
compare :: Step Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Step
     Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Ordering
$ccompare :: Step Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Step
     Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> Ordering
$cp1Ord :: Eq
  (Step
     Responses (InsOrdHashMap HttpStatusCode (Referenced Response)))
Ord, HttpStatusCode
-> Step
     Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> ShowS
[Step
   Responses (InsOrdHashMap HttpStatusCode (Referenced Response))]
-> ShowS
Step Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> String
(HttpStatusCode
 -> Step
      Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
 -> ShowS)
-> (Step
      Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
    -> String)
-> ([Step
       Responses (InsOrdHashMap HttpStatusCode (Referenced Response))]
    -> ShowS)
-> Show
     (Step
        Responses (InsOrdHashMap HttpStatusCode (Referenced Response)))
forall a.
(HttpStatusCode -> a -> ShowS)
-> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Step
   Responses (InsOrdHashMap HttpStatusCode (Referenced Response))]
-> ShowS
$cshowList :: [Step
   Responses (InsOrdHashMap HttpStatusCode (Referenced Response))]
-> ShowS
show :: Step Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> String
$cshow :: Step Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> String
showsPrec :: HttpStatusCode
-> Step
     Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> ShowS
$cshowsPrec :: HttpStatusCode
-> Step
     Responses (InsOrdHashMap HttpStatusCode (Referenced Response))
-> ShowS
Show)