{-# OPTIONS_GHC -Wno-orphans #-}

module Data.OpenApi.Compare.Validate.MediaTypeObject
  ( Issue (..),
    Behave (..),
  )
where

import Data.Foldable as F
import Data.Functor
import Data.HList
import Data.HashMap.Strict.InsOrd as IOHM
import Data.Map.Strict as M
import Data.OpenApi
import Data.OpenApi.Compare.Behavior
import Data.OpenApi.Compare.Subtree
import Data.OpenApi.Compare.Validate.Header ()
import Data.OpenApi.Compare.Validate.Products
import Data.OpenApi.Compare.Validate.Schema ()
import Data.String
import Data.Text (Text)
import qualified Data.Text as T
import Network.HTTP.Media (MediaType, mainType, subType)
import Text.Pandoc.Builder

tracedSchema :: Traced MediaTypeObject -> Maybe (Traced (Referenced Schema))
tracedSchema :: Traced MediaTypeObject -> Maybe (Traced (Referenced Schema))
tracedSchema Traced MediaTypeObject
mto = MediaTypeObject -> Maybe (Referenced Schema)
_mediaTypeObjectSchema (Traced MediaTypeObject -> MediaTypeObject
forall (w :: * -> *) a. Comonad w => w a -> a
extract Traced MediaTypeObject
mto) Maybe (Referenced Schema)
-> (Referenced Schema -> Traced (Referenced Schema))
-> Maybe (Traced (Referenced Schema))
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> Trace (Referenced Schema)
-> Referenced Schema -> Traced (Referenced Schema)
forall a. Trace a -> a -> Traced a
traced (Traced MediaTypeObject -> Paths Step TraceRoot MediaTypeObject
forall e (w :: * -> *) a. ComonadEnv e w => w a -> e
ask Traced MediaTypeObject
mto Paths Step TraceRoot MediaTypeObject
-> Paths Step MediaTypeObject (Referenced Schema)
-> Trace (Referenced Schema)
forall k (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> Step MediaTypeObject (Referenced Schema)
-> Paths Step MediaTypeObject (Referenced Schema)
forall k (q :: k -> k -> *) (a :: k) (b :: k).
NiceQuiver q a b =>
q a b -> Paths q a b
step Step MediaTypeObject (Referenced Schema)
MediaTypeSchema)

-- FIXME: This should be done through 'MediaTypeEncodingMapping'
tracedEncoding :: Traced MediaTypeObject -> InsOrdHashMap Text (Traced Encoding)
tracedEncoding :: Traced MediaTypeObject -> InsOrdHashMap Text (Traced Encoding)
tracedEncoding Traced MediaTypeObject
mto =
  (Text -> Encoding -> Traced Encoding)
-> InsOrdHashMap Text Encoding
-> InsOrdHashMap Text (Traced Encoding)
forall k v1 v2.
(k -> v1 -> v2) -> InsOrdHashMap k v1 -> InsOrdHashMap k v2
IOHM.mapWithKey (\Text
k -> Trace Encoding -> Encoding -> Traced Encoding
forall a. Trace a -> a -> Traced a
traced (Traced MediaTypeObject -> Paths Step TraceRoot MediaTypeObject
forall e (w :: * -> *) a. ComonadEnv e w => w a -> e
ask Traced MediaTypeObject
mto Paths Step TraceRoot MediaTypeObject
-> Paths Step MediaTypeObject Encoding -> Trace Encoding
forall k (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> Step MediaTypeObject Encoding
-> Paths Step MediaTypeObject Encoding
forall k (q :: k -> k -> *) (a :: k) (b :: k).
NiceQuiver q a b =>
q a b -> Paths q a b
step (Text -> Step MediaTypeObject Encoding
MediaTypeParamEncoding Text
k))) (InsOrdHashMap Text Encoding
 -> InsOrdHashMap Text (Traced Encoding))
-> InsOrdHashMap Text Encoding
-> InsOrdHashMap Text (Traced Encoding)
forall a b. (a -> b) -> a -> b
$
    MediaTypeObject -> InsOrdHashMap Text Encoding
_mediaTypeObjectEncoding (MediaTypeObject -> InsOrdHashMap Text Encoding)
-> MediaTypeObject -> InsOrdHashMap Text Encoding
forall a b. (a -> b) -> a -> b
$ Traced MediaTypeObject -> MediaTypeObject
forall (w :: * -> *) a. Comonad w => w a -> a
extract Traced MediaTypeObject
mto

instance Issuable 'PayloadLevel where
  data Issue 'PayloadLevel
    = MediaTypeSchemaRequired
    | MediaEncodingMissing Text
    | EncodingNotSupported
    deriving stock (Issue 'PayloadLevel -> Issue 'PayloadLevel -> Bool
(Issue 'PayloadLevel -> Issue 'PayloadLevel -> Bool)
-> (Issue 'PayloadLevel -> Issue 'PayloadLevel -> Bool)
-> Eq (Issue 'PayloadLevel)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Issue 'PayloadLevel -> Issue 'PayloadLevel -> Bool
$c/= :: Issue 'PayloadLevel -> Issue 'PayloadLevel -> Bool
== :: Issue 'PayloadLevel -> Issue 'PayloadLevel -> Bool
$c== :: Issue 'PayloadLevel -> Issue 'PayloadLevel -> Bool
Eq, Eq (Issue 'PayloadLevel)
Eq (Issue 'PayloadLevel)
-> (Issue 'PayloadLevel -> Issue 'PayloadLevel -> Ordering)
-> (Issue 'PayloadLevel -> Issue 'PayloadLevel -> Bool)
-> (Issue 'PayloadLevel -> Issue 'PayloadLevel -> Bool)
-> (Issue 'PayloadLevel -> Issue 'PayloadLevel -> Bool)
-> (Issue 'PayloadLevel -> Issue 'PayloadLevel -> Bool)
-> (Issue 'PayloadLevel
    -> Issue 'PayloadLevel -> Issue 'PayloadLevel)
-> (Issue 'PayloadLevel
    -> Issue 'PayloadLevel -> Issue 'PayloadLevel)
-> Ord (Issue 'PayloadLevel)
Issue 'PayloadLevel -> Issue 'PayloadLevel -> Bool
Issue 'PayloadLevel -> Issue 'PayloadLevel -> Ordering
Issue 'PayloadLevel -> Issue 'PayloadLevel -> Issue '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 :: Issue 'PayloadLevel -> Issue 'PayloadLevel -> Issue 'PayloadLevel
$cmin :: Issue 'PayloadLevel -> Issue 'PayloadLevel -> Issue 'PayloadLevel
max :: Issue 'PayloadLevel -> Issue 'PayloadLevel -> Issue 'PayloadLevel
$cmax :: Issue 'PayloadLevel -> Issue 'PayloadLevel -> Issue 'PayloadLevel
>= :: Issue 'PayloadLevel -> Issue 'PayloadLevel -> Bool
$c>= :: Issue 'PayloadLevel -> Issue 'PayloadLevel -> Bool
> :: Issue 'PayloadLevel -> Issue 'PayloadLevel -> Bool
$c> :: Issue 'PayloadLevel -> Issue 'PayloadLevel -> Bool
<= :: Issue 'PayloadLevel -> Issue 'PayloadLevel -> Bool
$c<= :: Issue 'PayloadLevel -> Issue 'PayloadLevel -> Bool
< :: Issue 'PayloadLevel -> Issue 'PayloadLevel -> Bool
$c< :: Issue 'PayloadLevel -> Issue 'PayloadLevel -> Bool
compare :: Issue 'PayloadLevel -> Issue 'PayloadLevel -> Ordering
$ccompare :: Issue 'PayloadLevel -> Issue 'PayloadLevel -> Ordering
$cp1Ord :: Eq (Issue 'PayloadLevel)
Ord, Int -> Issue 'PayloadLevel -> ShowS
[Issue 'PayloadLevel] -> ShowS
Issue 'PayloadLevel -> String
(Int -> Issue 'PayloadLevel -> ShowS)
-> (Issue 'PayloadLevel -> String)
-> ([Issue 'PayloadLevel] -> ShowS)
-> Show (Issue 'PayloadLevel)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Issue 'PayloadLevel] -> ShowS
$cshowList :: [Issue 'PayloadLevel] -> ShowS
show :: Issue 'PayloadLevel -> String
$cshow :: Issue 'PayloadLevel -> String
showsPrec :: Int -> Issue 'PayloadLevel -> ShowS
$cshowsPrec :: Int -> Issue 'PayloadLevel -> ShowS
Show)
  issueKind :: Issue 'PayloadLevel -> IssueKind
issueKind = \case
    Issue 'PayloadLevel
EncodingNotSupported -> IssueKind
Unsupported
    Issue 'PayloadLevel
_ -> IssueKind
CertainIssue

  describeIssue :: Orientation -> Issue 'PayloadLevel -> Blocks
describeIssue Orientation
_ Issue 'PayloadLevel
MediaTypeSchemaRequired = Inlines -> Blocks
para Inlines
"Media type expected, but was not specified."
  describeIssue Orientation
Forward (MediaEncodingMissing enc) = Inlines -> Blocks
para (Inlines -> Blocks) -> Inlines -> Blocks
forall a b. (a -> b) -> a -> b
$ Inlines
"Media encoding " Inlines -> Inlines -> Inlines
forall a. Semigroup a => a -> a -> a
<> Text -> Inlines
str Text
enc Inlines -> Inlines -> Inlines
forall a. Semigroup a => a -> a -> a
<> Inlines
" has been removed."
  describeIssue Orientation
Backward (MediaEncodingMissing enc) = Inlines -> Blocks
para (Inlines -> Blocks) -> Inlines -> Blocks
forall a b. (a -> b) -> a -> b
$ Inlines
"Media encoding " Inlines -> Inlines -> Inlines
forall a. Semigroup a => a -> a -> a
<> Text -> Inlines
str Text
enc Inlines -> Inlines -> Inlines
forall a. Semigroup a => a -> a -> a
<> Inlines
" added."
  describeIssue Orientation
_ Issue 'PayloadLevel
EncodingNotSupported = Inlines -> Blocks
para Inlines
"CompaREST does not currently support media encodings other than JSON."

instance Behavable 'PayloadLevel 'SchemaLevel where
  data Behave 'PayloadLevel 'SchemaLevel
    = PayloadSchema
    deriving stock (Behave 'PayloadLevel 'SchemaLevel
-> Behave 'PayloadLevel 'SchemaLevel -> Bool
(Behave 'PayloadLevel 'SchemaLevel
 -> Behave 'PayloadLevel 'SchemaLevel -> Bool)
-> (Behave 'PayloadLevel 'SchemaLevel
    -> Behave 'PayloadLevel 'SchemaLevel -> Bool)
-> Eq (Behave 'PayloadLevel 'SchemaLevel)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Behave 'PayloadLevel 'SchemaLevel
-> Behave 'PayloadLevel 'SchemaLevel -> Bool
$c/= :: Behave 'PayloadLevel 'SchemaLevel
-> Behave 'PayloadLevel 'SchemaLevel -> Bool
== :: Behave 'PayloadLevel 'SchemaLevel
-> Behave 'PayloadLevel 'SchemaLevel -> Bool
$c== :: Behave 'PayloadLevel 'SchemaLevel
-> Behave 'PayloadLevel 'SchemaLevel -> Bool
Eq, Eq (Behave 'PayloadLevel 'SchemaLevel)
Eq (Behave 'PayloadLevel 'SchemaLevel)
-> (Behave 'PayloadLevel 'SchemaLevel
    -> Behave 'PayloadLevel 'SchemaLevel -> Ordering)
-> (Behave 'PayloadLevel 'SchemaLevel
    -> Behave 'PayloadLevel 'SchemaLevel -> Bool)
-> (Behave 'PayloadLevel 'SchemaLevel
    -> Behave 'PayloadLevel 'SchemaLevel -> Bool)
-> (Behave 'PayloadLevel 'SchemaLevel
    -> Behave 'PayloadLevel 'SchemaLevel -> Bool)
-> (Behave 'PayloadLevel 'SchemaLevel
    -> Behave 'PayloadLevel 'SchemaLevel -> Bool)
-> (Behave 'PayloadLevel 'SchemaLevel
    -> Behave 'PayloadLevel 'SchemaLevel
    -> Behave 'PayloadLevel 'SchemaLevel)
-> (Behave 'PayloadLevel 'SchemaLevel
    -> Behave 'PayloadLevel 'SchemaLevel
    -> Behave 'PayloadLevel 'SchemaLevel)
-> Ord (Behave 'PayloadLevel 'SchemaLevel)
Behave 'PayloadLevel 'SchemaLevel
-> Behave 'PayloadLevel 'SchemaLevel -> Bool
Behave 'PayloadLevel 'SchemaLevel
-> Behave 'PayloadLevel 'SchemaLevel -> Ordering
Behave 'PayloadLevel 'SchemaLevel
-> Behave 'PayloadLevel 'SchemaLevel
-> Behave 'PayloadLevel 'SchemaLevel
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 'PayloadLevel 'SchemaLevel
-> Behave 'PayloadLevel 'SchemaLevel
-> Behave 'PayloadLevel 'SchemaLevel
$cmin :: Behave 'PayloadLevel 'SchemaLevel
-> Behave 'PayloadLevel 'SchemaLevel
-> Behave 'PayloadLevel 'SchemaLevel
max :: Behave 'PayloadLevel 'SchemaLevel
-> Behave 'PayloadLevel 'SchemaLevel
-> Behave 'PayloadLevel 'SchemaLevel
$cmax :: Behave 'PayloadLevel 'SchemaLevel
-> Behave 'PayloadLevel 'SchemaLevel
-> Behave 'PayloadLevel 'SchemaLevel
>= :: Behave 'PayloadLevel 'SchemaLevel
-> Behave 'PayloadLevel 'SchemaLevel -> Bool
$c>= :: Behave 'PayloadLevel 'SchemaLevel
-> Behave 'PayloadLevel 'SchemaLevel -> Bool
> :: Behave 'PayloadLevel 'SchemaLevel
-> Behave 'PayloadLevel 'SchemaLevel -> Bool
$c> :: Behave 'PayloadLevel 'SchemaLevel
-> Behave 'PayloadLevel 'SchemaLevel -> Bool
<= :: Behave 'PayloadLevel 'SchemaLevel
-> Behave 'PayloadLevel 'SchemaLevel -> Bool
$c<= :: Behave 'PayloadLevel 'SchemaLevel
-> Behave 'PayloadLevel 'SchemaLevel -> Bool
< :: Behave 'PayloadLevel 'SchemaLevel
-> Behave 'PayloadLevel 'SchemaLevel -> Bool
$c< :: Behave 'PayloadLevel 'SchemaLevel
-> Behave 'PayloadLevel 'SchemaLevel -> Bool
compare :: Behave 'PayloadLevel 'SchemaLevel
-> Behave 'PayloadLevel 'SchemaLevel -> Ordering
$ccompare :: Behave 'PayloadLevel 'SchemaLevel
-> Behave 'PayloadLevel 'SchemaLevel -> Ordering
$cp1Ord :: Eq (Behave 'PayloadLevel 'SchemaLevel)
Ord, Int -> Behave 'PayloadLevel 'SchemaLevel -> ShowS
[Behave 'PayloadLevel 'SchemaLevel] -> ShowS
Behave 'PayloadLevel 'SchemaLevel -> String
(Int -> Behave 'PayloadLevel 'SchemaLevel -> ShowS)
-> (Behave 'PayloadLevel 'SchemaLevel -> String)
-> ([Behave 'PayloadLevel 'SchemaLevel] -> ShowS)
-> Show (Behave 'PayloadLevel 'SchemaLevel)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Behave 'PayloadLevel 'SchemaLevel] -> ShowS
$cshowList :: [Behave 'PayloadLevel 'SchemaLevel] -> ShowS
show :: Behave 'PayloadLevel 'SchemaLevel -> String
$cshow :: Behave 'PayloadLevel 'SchemaLevel -> String
showsPrec :: Int -> Behave 'PayloadLevel 'SchemaLevel -> ShowS
$cshowsPrec :: Int -> Behave 'PayloadLevel 'SchemaLevel -> ShowS
Show)
  describeBehavior :: Behave 'PayloadLevel 'SchemaLevel -> Inlines
describeBehavior Behave 'PayloadLevel 'SchemaLevel
PayloadSchema = Inlines
"JSON Schema"

instance Subtree MediaTypeObject where
  type SubtreeLevel MediaTypeObject = 'PayloadLevel
  type
    CheckEnv MediaTypeObject =
      '[ MediaType
       , ProdCons (Traced (Definitions Schema))
       , ProdCons (Traced (Definitions Header))
       ]
  checkStructuralCompatibility :: HList (CheckEnv MediaTypeObject)
-> ProdCons (Traced MediaTypeObject) -> StructuralCompatFormula ()
checkStructuralCompatibility HList (CheckEnv MediaTypeObject)
env ProdCons (Traced MediaTypeObject)
pc = do
    HList
  '[MediaType, ProdCons (Traced (Definitions Schema)),
    ProdCons (Traced (Definitions Header))]
-> ProdCons (Maybe (Traced (Referenced Schema)))
-> StructuralCompatFormula ()
forall a (xs :: [*]).
(Subtree a, ReassembleHList xs (CheckEnv a)) =>
HList xs
-> ProdCons (Maybe (Traced a)) -> StructuralCompatFormula ()
structuralMaybe HList
  '[MediaType, ProdCons (Traced (Definitions Schema)),
    ProdCons (Traced (Definitions Header))]
HList (CheckEnv MediaTypeObject)
env (ProdCons (Maybe (Traced (Referenced Schema)))
 -> StructuralCompatFormula ())
-> ProdCons (Maybe (Traced (Referenced Schema)))
-> StructuralCompatFormula ()
forall a b. (a -> b) -> a -> b
$ Traced MediaTypeObject -> Maybe (Traced (Referenced Schema))
tracedSchema (Traced MediaTypeObject -> Maybe (Traced (Referenced Schema)))
-> ProdCons (Traced MediaTypeObject)
-> ProdCons (Maybe (Traced (Referenced Schema)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ProdCons (Traced MediaTypeObject)
pc
    ProdCons
  (EnvT
     (Paths Step TraceRoot MediaTypeObject) Identity (Maybe Value))
-> StructuralCompatFormula ()
forall a (w :: * -> *).
(Eq a, Comonad w) =>
ProdCons (w a) -> StructuralCompatFormula ()
structuralEq (ProdCons
   (EnvT
      (Paths Step TraceRoot MediaTypeObject) Identity (Maybe Value))
 -> StructuralCompatFormula ())
-> ProdCons
     (EnvT
        (Paths Step TraceRoot MediaTypeObject) Identity (Maybe Value))
-> StructuralCompatFormula ()
forall a b. (a -> b) -> a -> b
$ (MediaTypeObject -> Maybe Value)
-> Traced MediaTypeObject
-> EnvT
     (Paths Step TraceRoot MediaTypeObject) Identity (Maybe Value)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap MediaTypeObject -> Maybe Value
_mediaTypeObjectExample (Traced MediaTypeObject
 -> EnvT
      (Paths Step TraceRoot MediaTypeObject) Identity (Maybe Value))
-> ProdCons (Traced MediaTypeObject)
-> ProdCons
     (EnvT
        (Paths Step TraceRoot MediaTypeObject) Identity (Maybe Value))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ProdCons (Traced MediaTypeObject)
pc
    HList
  '[MediaType, ProdCons (Traced (Definitions Schema)),
    ProdCons (Traced (Definitions Header))]
-> ProdCons (Traced (InsOrdHashMap Text Encoding))
-> 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
  '[MediaType, ProdCons (Traced (Definitions Schema)),
    ProdCons (Traced (Definitions Header))]
HList (CheckEnv MediaTypeObject)
env (ProdCons (Traced (InsOrdHashMap Text Encoding))
 -> StructuralCompatFormula ())
-> ProdCons (Traced (InsOrdHashMap Text Encoding))
-> StructuralCompatFormula ()
forall a b. (a -> b) -> a -> b
$ Step MediaTypeObject (InsOrdHashMap Text Encoding)
-> Traced' MediaTypeObject (InsOrdHashMap Text Encoding)
-> Traced (InsOrdHashMap Text Encoding)
forall a a' b.
Steppable a a' =>
Step a a' -> Traced' a b -> Traced' a' b
stepTraced Step MediaTypeObject (InsOrdHashMap Text Encoding)
MediaTypeEncodingMapping (Traced' MediaTypeObject (InsOrdHashMap Text Encoding)
 -> Traced (InsOrdHashMap Text Encoding))
-> (Traced MediaTypeObject
    -> Traced' MediaTypeObject (InsOrdHashMap Text Encoding))
-> Traced MediaTypeObject
-> Traced (InsOrdHashMap Text Encoding)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (MediaTypeObject -> InsOrdHashMap Text Encoding)
-> Traced MediaTypeObject
-> Traced' MediaTypeObject (InsOrdHashMap Text Encoding)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap MediaTypeObject -> InsOrdHashMap Text Encoding
_mediaTypeObjectEncoding (Traced MediaTypeObject -> Traced (InsOrdHashMap Text Encoding))
-> ProdCons (Traced MediaTypeObject)
-> ProdCons (Traced (InsOrdHashMap Text Encoding))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ProdCons (Traced MediaTypeObject)
pc
    pure ()
  checkSemanticCompatibility :: HList (CheckEnv MediaTypeObject)
-> Behavior (SubtreeLevel MediaTypeObject)
-> ProdCons (Traced MediaTypeObject)
-> SemanticCompatFormula ()
checkSemanticCompatibility HList (CheckEnv MediaTypeObject)
env Behavior (SubtreeLevel MediaTypeObject)
beh prodCons :: ProdCons (Traced MediaTypeObject)
prodCons@(ProdCons Traced MediaTypeObject
p Traced MediaTypeObject
c) = do
    if
        | CI ByteString
"multipart" CI ByteString -> CI ByteString -> Bool
forall a. Eq a => a -> a -> Bool
== MediaType -> CI ByteString
mainType MediaType
mediaType -> SemanticCompatFormula ()
checkEncoding
        | CI ByteString
"application" CI ByteString -> CI ByteString -> Bool
forall a. Eq a => a -> a -> Bool
== MediaType -> CI ByteString
mainType MediaType
mediaType
            Bool -> Bool -> Bool
&& CI ByteString
"x-www-form-urlencoded" CI ByteString -> CI ByteString -> Bool
forall a. Eq a => a -> a -> Bool
== MediaType -> CI ByteString
subType MediaType
mediaType ->
          SemanticCompatFormula ()
checkEncoding
        | Bool
otherwise -> () -> SemanticCompatFormula ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
    -- If consumer requires schema then producer must produce compatible
    -- request
    Maybe (Traced (Referenced Schema))
-> (Traced (Referenced Schema) -> SemanticCompatFormula ())
-> SemanticCompatFormula ()
forall (t :: * -> *) (f :: * -> *) a b.
(Foldable t, Applicative f) =>
t a -> (a -> f b) -> f ()
for_ (Traced MediaTypeObject -> Maybe (Traced (Referenced Schema))
tracedSchema Traced MediaTypeObject
c) ((Traced (Referenced Schema) -> SemanticCompatFormula ())
 -> SemanticCompatFormula ())
-> (Traced (Referenced Schema) -> SemanticCompatFormula ())
-> SemanticCompatFormula ()
forall a b. (a -> b) -> a -> b
$ \Traced (Referenced Schema)
consRef ->
      case Traced MediaTypeObject -> Maybe (Traced (Referenced Schema))
tracedSchema Traced MediaTypeObject
p of
        Maybe (Traced (Referenced Schema))
Nothing -> Paths Behave 'APILevel 'PayloadLevel
-> Issue 'PayloadLevel -> SemanticCompatFormula ()
forall (l :: BehaviorLevel)
       (q :: BehaviorLevel -> BehaviorLevel -> *) (r :: BehaviorLevel) a.
Issuable l =>
Paths q r l -> Issue l -> CompatFormula' q AnIssue r a
issueAt Paths Behave 'APILevel 'PayloadLevel
Behavior (SubtreeLevel MediaTypeObject)
beh Issue 'PayloadLevel
MediaTypeSchemaRequired
        Just Traced (Referenced Schema)
prodRef ->
          Behavior (SubtreeLevel (Referenced Schema))
-> HList
     '[MediaType, ProdCons (Traced (Definitions Schema)),
       ProdCons (Traced (Definitions Header))]
-> ProdCons (Traced (Referenced Schema))
-> SemanticCompatFormula ()
forall t (xs :: [*]).
(ReassembleHList xs (CheckEnv t), Subtree t) =>
Behavior (SubtreeLevel t)
-> HList xs -> ProdCons (Traced t) -> SemanticCompatFormula ()
checkCompatibility (Paths Behave 'APILevel 'PayloadLevel
Behavior (SubtreeLevel MediaTypeObject)
beh Paths Behave 'APILevel 'PayloadLevel
-> Paths Behave 'PayloadLevel 'SchemaLevel
-> Paths Behave 'APILevel 'SchemaLevel
forall k (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> Behave 'PayloadLevel 'SchemaLevel
-> Paths Behave 'PayloadLevel 'SchemaLevel
forall k (q :: k -> k -> *) (a :: k) (b :: k).
NiceQuiver q a b =>
q a b -> Paths q a b
step Behave 'PayloadLevel 'SchemaLevel
PayloadSchema) HList
  '[MediaType, ProdCons (Traced (Definitions Schema)),
    ProdCons (Traced (Definitions Header))]
HList (CheckEnv MediaTypeObject)
env (ProdCons (Traced (Referenced Schema)) -> SemanticCompatFormula ())
-> ProdCons (Traced (Referenced Schema))
-> SemanticCompatFormula ()
forall a b. (a -> b) -> a -> b
$
            Traced (Referenced Schema)
-> Traced (Referenced Schema)
-> ProdCons (Traced (Referenced Schema))
forall a. a -> a -> ProdCons a
ProdCons Traced (Referenced Schema)
prodRef Traced (Referenced Schema)
consRef
    pure ()
    where
      mediaType :: MediaType
mediaType = HList
  '[MediaType, ProdCons (Traced (Definitions Schema)),
    ProdCons (Traced (Definitions Header))]
-> MediaType
forall x (xs :: [*]) (t :: Bool). Has' x xs t => HList xs -> x
getH @MediaType HList
  '[MediaType, ProdCons (Traced (Definitions Schema)),
    ProdCons (Traced (Definitions Header))]
HList (CheckEnv MediaTypeObject)
env
      checkEncoding :: SemanticCompatFormula ()
checkEncoding =
        let -- Parameters of the media type are product-like entities
            getEncoding :: Traced MediaTypeObject -> Map Text (ProductLike (Traced Encoding))
getEncoding Traced MediaTypeObject
mt =
              [(Text, ProductLike (Traced Encoding))]
-> Map Text (ProductLike (Traced Encoding))
forall k a. Ord k => [(k, a)] -> Map k a
M.fromList ([(Text, ProductLike (Traced Encoding))]
 -> Map Text (ProductLike (Traced Encoding)))
-> [(Text, ProductLike (Traced Encoding))]
-> Map Text (ProductLike (Traced Encoding))
forall a b. (a -> b) -> a -> b
$
                (InsOrdHashMap Text (Traced Encoding) -> [(Text, Traced Encoding)]
forall k v. InsOrdHashMap k v -> [(k, v)]
IOHM.toList (InsOrdHashMap Text (Traced Encoding) -> [(Text, Traced Encoding)])
-> InsOrdHashMap Text (Traced Encoding)
-> [(Text, Traced Encoding)]
forall a b. (a -> b) -> a -> b
$ Traced MediaTypeObject -> InsOrdHashMap Text (Traced Encoding)
tracedEncoding Traced MediaTypeObject
mt) [(Text, Traced Encoding)]
-> ((Text, Traced Encoding)
    -> (Text, ProductLike (Traced Encoding)))
-> [(Text, ProductLike (Traced Encoding))]
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> \(Text
k, Traced Encoding
enc) ->
                  ( Text
k
                  , ProductLike :: forall a. a -> Bool -> ProductLike a
ProductLike
                      { $sel:productValue:ProductLike :: Traced Encoding
productValue = Traced Encoding
enc
                      , $sel:required:ProductLike :: Bool
required = Bool
True
                      }
                  )
            encProdCons :: ProdCons (Map Text (ProductLike (Traced Encoding)))
encProdCons = Traced MediaTypeObject -> Map Text (ProductLike (Traced Encoding))
getEncoding (Traced MediaTypeObject
 -> Map Text (ProductLike (Traced Encoding)))
-> ProdCons (Traced MediaTypeObject)
-> ProdCons (Map Text (ProductLike (Traced Encoding)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ProdCons (Traced MediaTypeObject)
prodCons
         in Paths Behave 'APILevel 'PayloadLevel
-> (Text -> Issue 'PayloadLevel)
-> (Text -> ProdCons (Traced Encoding) -> SemanticCompatFormula ())
-> ProdCons (Map Text (ProductLike (Traced Encoding)))
-> 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 'PayloadLevel
Behavior (SubtreeLevel MediaTypeObject)
beh
              Text -> Issue 'PayloadLevel
MediaEncodingMissing
              ((ProdCons (Traced Encoding) -> SemanticCompatFormula ())
-> Text -> ProdCons (Traced Encoding) -> SemanticCompatFormula ()
forall a b. a -> b -> a
const ((ProdCons (Traced Encoding) -> SemanticCompatFormula ())
 -> Text -> ProdCons (Traced Encoding) -> SemanticCompatFormula ())
-> (ProdCons (Traced Encoding) -> SemanticCompatFormula ())
-> Text
-> ProdCons (Traced Encoding)
-> SemanticCompatFormula ()
forall a b. (a -> b) -> a -> b
$ Behavior (SubtreeLevel Encoding)
-> HList
     '[MediaType, ProdCons (Traced (Definitions Schema)),
       ProdCons (Traced (Definitions Header))]
-> ProdCons (Traced Encoding)
-> SemanticCompatFormula ()
forall t (xs :: [*]).
(ReassembleHList xs (CheckEnv t), Subtree t) =>
Behavior (SubtreeLevel t)
-> HList xs -> ProdCons (Traced t) -> SemanticCompatFormula ()
checkCompatibility Behavior (SubtreeLevel MediaTypeObject)
Behavior (SubtreeLevel Encoding)
beh HList
  '[MediaType, ProdCons (Traced (Definitions Schema)),
    ProdCons (Traced (Definitions Header))]
HList (CheckEnv MediaTypeObject)
env)
              ProdCons (Map Text (ProductLike (Traced Encoding)))
encProdCons

instance Subtree Encoding where
  type SubtreeLevel Encoding = 'PayloadLevel
  type
    CheckEnv Encoding =
      '[ ProdCons (Traced (Definitions Header))
       , ProdCons (Traced (Definitions Schema))
       ]
  checkStructuralCompatibility :: HList (CheckEnv Encoding)
-> ProdCons (Traced Encoding) -> StructuralCompatFormula ()
checkStructuralCompatibility HList (CheckEnv Encoding)
env ProdCons (Traced Encoding)
pc = do
    ProdCons (EnvT (Trace Encoding) Identity (Maybe MediaType))
-> StructuralCompatFormula ()
forall a (w :: * -> *).
(Eq a, Comonad w) =>
ProdCons (w a) -> StructuralCompatFormula ()
structuralEq (ProdCons (EnvT (Trace Encoding) Identity (Maybe MediaType))
 -> StructuralCompatFormula ())
-> ProdCons (EnvT (Trace Encoding) Identity (Maybe MediaType))
-> StructuralCompatFormula ()
forall a b. (a -> b) -> a -> b
$ (Encoding -> Maybe MediaType)
-> Traced Encoding
-> EnvT (Trace Encoding) Identity (Maybe MediaType)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Encoding -> Maybe MediaType
_encodingContentType (Traced Encoding
 -> EnvT (Trace Encoding) Identity (Maybe MediaType))
-> ProdCons (Traced Encoding)
-> ProdCons (EnvT (Trace Encoding) Identity (Maybe MediaType))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ProdCons (Traced Encoding)
pc
    HList
  '[ProdCons (Traced (Definitions Header)),
    ProdCons (Traced (Definitions Schema))]
-> ProdCons (Traced (InsOrdHashMap Text (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))]
HList (CheckEnv Encoding)
env (ProdCons (Traced (InsOrdHashMap Text (Referenced Header)))
 -> StructuralCompatFormula ())
-> ProdCons (Traced (InsOrdHashMap Text (Referenced Header)))
-> StructuralCompatFormula ()
forall a b. (a -> b) -> a -> b
$ Step Encoding (InsOrdHashMap Text (Referenced Header))
-> Traced' Encoding (InsOrdHashMap Text (Referenced Header))
-> Traced (InsOrdHashMap Text (Referenced Header))
forall a a' b.
Steppable a a' =>
Step a a' -> Traced' a b -> Traced' a' b
stepTraced Step Encoding (InsOrdHashMap Text (Referenced Header))
EncodingHeaderStep (Traced' Encoding (InsOrdHashMap Text (Referenced Header))
 -> Traced (InsOrdHashMap Text (Referenced Header)))
-> (Traced Encoding
    -> Traced' Encoding (InsOrdHashMap Text (Referenced Header)))
-> Traced Encoding
-> Traced (InsOrdHashMap Text (Referenced Header))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Encoding -> InsOrdHashMap Text (Referenced Header))
-> Traced Encoding
-> Traced' Encoding (InsOrdHashMap Text (Referenced Header))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Encoding -> InsOrdHashMap Text (Referenced Header)
_encodingHeaders (Traced Encoding
 -> Traced (InsOrdHashMap Text (Referenced Header)))
-> ProdCons (Traced Encoding)
-> ProdCons (Traced (InsOrdHashMap Text (Referenced Header)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ProdCons (Traced Encoding)
pc
    ProdCons (EnvT (Trace Encoding) Identity (Maybe Style))
-> StructuralCompatFormula ()
forall a (w :: * -> *).
(Eq a, Comonad w) =>
ProdCons (w a) -> StructuralCompatFormula ()
structuralEq (ProdCons (EnvT (Trace Encoding) Identity (Maybe Style))
 -> StructuralCompatFormula ())
-> ProdCons (EnvT (Trace Encoding) Identity (Maybe Style))
-> StructuralCompatFormula ()
forall a b. (a -> b) -> a -> b
$ (Encoding -> Maybe Style)
-> Traced Encoding -> EnvT (Trace Encoding) Identity (Maybe Style)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Encoding -> Maybe Style
_encodingStyle (Traced Encoding -> EnvT (Trace Encoding) Identity (Maybe Style))
-> ProdCons (Traced Encoding)
-> ProdCons (EnvT (Trace Encoding) Identity (Maybe Style))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ProdCons (Traced Encoding)
pc
    ProdCons (EnvT (Trace Encoding) Identity (Maybe Bool))
-> StructuralCompatFormula ()
forall a (w :: * -> *).
(Eq a, Comonad w) =>
ProdCons (w a) -> StructuralCompatFormula ()
structuralEq (ProdCons (EnvT (Trace Encoding) Identity (Maybe Bool))
 -> StructuralCompatFormula ())
-> ProdCons (EnvT (Trace Encoding) Identity (Maybe Bool))
-> StructuralCompatFormula ()
forall a b. (a -> b) -> a -> b
$ (Encoding -> Maybe Bool)
-> Traced Encoding -> EnvT (Trace Encoding) Identity (Maybe Bool)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Encoding -> Maybe Bool
_encodingExplode (Traced Encoding -> EnvT (Trace Encoding) Identity (Maybe Bool))
-> ProdCons (Traced Encoding)
-> ProdCons (EnvT (Trace Encoding) Identity (Maybe Bool))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ProdCons (Traced Encoding)
pc
    ProdCons (EnvT (Trace Encoding) Identity (Maybe Bool))
-> StructuralCompatFormula ()
forall a (w :: * -> *).
(Eq a, Comonad w) =>
ProdCons (w a) -> StructuralCompatFormula ()
structuralEq (ProdCons (EnvT (Trace Encoding) Identity (Maybe Bool))
 -> StructuralCompatFormula ())
-> ProdCons (EnvT (Trace Encoding) Identity (Maybe Bool))
-> StructuralCompatFormula ()
forall a b. (a -> b) -> a -> b
$ (Encoding -> Maybe Bool)
-> Traced Encoding -> EnvT (Trace Encoding) Identity (Maybe Bool)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Encoding -> Maybe Bool
_encodingAllowReserved (Traced Encoding -> EnvT (Trace Encoding) Identity (Maybe Bool))
-> ProdCons (Traced Encoding)
-> ProdCons (EnvT (Trace Encoding) Identity (Maybe Bool))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ProdCons (Traced Encoding)
pc
    pure ()

  --  FIXME: Support only JSON body for now. Then Encoding is checked only for
  --  multipart/form-url-encoded
  --  #54
  checkSemanticCompatibility :: HList (CheckEnv Encoding)
-> Behavior (SubtreeLevel Encoding)
-> ProdCons (Traced Encoding)
-> SemanticCompatFormula ()
checkSemanticCompatibility HList (CheckEnv Encoding)
_env Behavior (SubtreeLevel Encoding)
beh ProdCons (Traced Encoding)
_pc =
    Paths Behave 'APILevel 'PayloadLevel
-> Issue 'PayloadLevel -> SemanticCompatFormula ()
forall (l :: BehaviorLevel)
       (q :: BehaviorLevel -> BehaviorLevel -> *) (r :: BehaviorLevel) a.
Issuable l =>
Paths q r l -> Issue l -> CompatFormula' q AnIssue r a
issueAt Paths Behave 'APILevel 'PayloadLevel
Behavior (SubtreeLevel Encoding)
beh Issue 'PayloadLevel
EncodingNotSupported

instance Steppable MediaTypeObject (Referenced Schema) where
  data Step MediaTypeObject (Referenced Schema) = MediaTypeSchema
    deriving stock (Step MediaTypeObject (Referenced Schema)
-> Step MediaTypeObject (Referenced Schema) -> Bool
(Step MediaTypeObject (Referenced Schema)
 -> Step MediaTypeObject (Referenced Schema) -> Bool)
-> (Step MediaTypeObject (Referenced Schema)
    -> Step MediaTypeObject (Referenced Schema) -> Bool)
-> Eq (Step MediaTypeObject (Referenced Schema))
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Step MediaTypeObject (Referenced Schema)
-> Step MediaTypeObject (Referenced Schema) -> Bool
$c/= :: Step MediaTypeObject (Referenced Schema)
-> Step MediaTypeObject (Referenced Schema) -> Bool
== :: Step MediaTypeObject (Referenced Schema)
-> Step MediaTypeObject (Referenced Schema) -> Bool
$c== :: Step MediaTypeObject (Referenced Schema)
-> Step MediaTypeObject (Referenced Schema) -> Bool
Eq, Eq (Step MediaTypeObject (Referenced Schema))
Eq (Step MediaTypeObject (Referenced Schema))
-> (Step MediaTypeObject (Referenced Schema)
    -> Step MediaTypeObject (Referenced Schema) -> Ordering)
-> (Step MediaTypeObject (Referenced Schema)
    -> Step MediaTypeObject (Referenced Schema) -> Bool)
-> (Step MediaTypeObject (Referenced Schema)
    -> Step MediaTypeObject (Referenced Schema) -> Bool)
-> (Step MediaTypeObject (Referenced Schema)
    -> Step MediaTypeObject (Referenced Schema) -> Bool)
-> (Step MediaTypeObject (Referenced Schema)
    -> Step MediaTypeObject (Referenced Schema) -> Bool)
-> (Step MediaTypeObject (Referenced Schema)
    -> Step MediaTypeObject (Referenced Schema)
    -> Step MediaTypeObject (Referenced Schema))
-> (Step MediaTypeObject (Referenced Schema)
    -> Step MediaTypeObject (Referenced Schema)
    -> Step MediaTypeObject (Referenced Schema))
-> Ord (Step MediaTypeObject (Referenced Schema))
Step MediaTypeObject (Referenced Schema)
-> Step MediaTypeObject (Referenced Schema) -> Bool
Step MediaTypeObject (Referenced Schema)
-> Step MediaTypeObject (Referenced Schema) -> Ordering
Step MediaTypeObject (Referenced Schema)
-> Step MediaTypeObject (Referenced Schema)
-> Step MediaTypeObject (Referenced Schema)
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 MediaTypeObject (Referenced Schema)
-> Step MediaTypeObject (Referenced Schema)
-> Step MediaTypeObject (Referenced Schema)
$cmin :: Step MediaTypeObject (Referenced Schema)
-> Step MediaTypeObject (Referenced Schema)
-> Step MediaTypeObject (Referenced Schema)
max :: Step MediaTypeObject (Referenced Schema)
-> Step MediaTypeObject (Referenced Schema)
-> Step MediaTypeObject (Referenced Schema)
$cmax :: Step MediaTypeObject (Referenced Schema)
-> Step MediaTypeObject (Referenced Schema)
-> Step MediaTypeObject (Referenced Schema)
>= :: Step MediaTypeObject (Referenced Schema)
-> Step MediaTypeObject (Referenced Schema) -> Bool
$c>= :: Step MediaTypeObject (Referenced Schema)
-> Step MediaTypeObject (Referenced Schema) -> Bool
> :: Step MediaTypeObject (Referenced Schema)
-> Step MediaTypeObject (Referenced Schema) -> Bool
$c> :: Step MediaTypeObject (Referenced Schema)
-> Step MediaTypeObject (Referenced Schema) -> Bool
<= :: Step MediaTypeObject (Referenced Schema)
-> Step MediaTypeObject (Referenced Schema) -> Bool
$c<= :: Step MediaTypeObject (Referenced Schema)
-> Step MediaTypeObject (Referenced Schema) -> Bool
< :: Step MediaTypeObject (Referenced Schema)
-> Step MediaTypeObject (Referenced Schema) -> Bool
$c< :: Step MediaTypeObject (Referenced Schema)
-> Step MediaTypeObject (Referenced Schema) -> Bool
compare :: Step MediaTypeObject (Referenced Schema)
-> Step MediaTypeObject (Referenced Schema) -> Ordering
$ccompare :: Step MediaTypeObject (Referenced Schema)
-> Step MediaTypeObject (Referenced Schema) -> Ordering
$cp1Ord :: Eq (Step MediaTypeObject (Referenced Schema))
Ord, Int -> Step MediaTypeObject (Referenced Schema) -> ShowS
[Step MediaTypeObject (Referenced Schema)] -> ShowS
Step MediaTypeObject (Referenced Schema) -> String
(Int -> Step MediaTypeObject (Referenced Schema) -> ShowS)
-> (Step MediaTypeObject (Referenced Schema) -> String)
-> ([Step MediaTypeObject (Referenced Schema)] -> ShowS)
-> Show (Step MediaTypeObject (Referenced Schema))
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Step MediaTypeObject (Referenced Schema)] -> ShowS
$cshowList :: [Step MediaTypeObject (Referenced Schema)] -> ShowS
show :: Step MediaTypeObject (Referenced Schema) -> String
$cshow :: Step MediaTypeObject (Referenced Schema) -> String
showsPrec :: Int -> Step MediaTypeObject (Referenced Schema) -> ShowS
$cshowsPrec :: Int -> Step MediaTypeObject (Referenced Schema) -> ShowS
Show)

instance Steppable MediaTypeObject (Definitions Encoding) where
  data Step MediaTypeObject (Definitions Encoding) = MediaTypeEncodingMapping
    deriving stock (Step MediaTypeObject (InsOrdHashMap Text Encoding)
-> Step MediaTypeObject (InsOrdHashMap Text Encoding) -> Bool
(Step MediaTypeObject (InsOrdHashMap Text Encoding)
 -> Step MediaTypeObject (InsOrdHashMap Text Encoding) -> Bool)
-> (Step MediaTypeObject (InsOrdHashMap Text Encoding)
    -> Step MediaTypeObject (InsOrdHashMap Text Encoding) -> Bool)
-> Eq (Step MediaTypeObject (InsOrdHashMap Text Encoding))
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Step MediaTypeObject (InsOrdHashMap Text Encoding)
-> Step MediaTypeObject (InsOrdHashMap Text Encoding) -> Bool
$c/= :: Step MediaTypeObject (InsOrdHashMap Text Encoding)
-> Step MediaTypeObject (InsOrdHashMap Text Encoding) -> Bool
== :: Step MediaTypeObject (InsOrdHashMap Text Encoding)
-> Step MediaTypeObject (InsOrdHashMap Text Encoding) -> Bool
$c== :: Step MediaTypeObject (InsOrdHashMap Text Encoding)
-> Step MediaTypeObject (InsOrdHashMap Text Encoding) -> Bool
Eq, Eq (Step MediaTypeObject (InsOrdHashMap Text Encoding))
Eq (Step MediaTypeObject (InsOrdHashMap Text Encoding))
-> (Step MediaTypeObject (InsOrdHashMap Text Encoding)
    -> Step MediaTypeObject (InsOrdHashMap Text Encoding) -> Ordering)
-> (Step MediaTypeObject (InsOrdHashMap Text Encoding)
    -> Step MediaTypeObject (InsOrdHashMap Text Encoding) -> Bool)
-> (Step MediaTypeObject (InsOrdHashMap Text Encoding)
    -> Step MediaTypeObject (InsOrdHashMap Text Encoding) -> Bool)
-> (Step MediaTypeObject (InsOrdHashMap Text Encoding)
    -> Step MediaTypeObject (InsOrdHashMap Text Encoding) -> Bool)
-> (Step MediaTypeObject (InsOrdHashMap Text Encoding)
    -> Step MediaTypeObject (InsOrdHashMap Text Encoding) -> Bool)
-> (Step MediaTypeObject (InsOrdHashMap Text Encoding)
    -> Step MediaTypeObject (InsOrdHashMap Text Encoding)
    -> Step MediaTypeObject (InsOrdHashMap Text Encoding))
-> (Step MediaTypeObject (InsOrdHashMap Text Encoding)
    -> Step MediaTypeObject (InsOrdHashMap Text Encoding)
    -> Step MediaTypeObject (InsOrdHashMap Text Encoding))
-> Ord (Step MediaTypeObject (InsOrdHashMap Text Encoding))
Step MediaTypeObject (InsOrdHashMap Text Encoding)
-> Step MediaTypeObject (InsOrdHashMap Text Encoding) -> Bool
Step MediaTypeObject (InsOrdHashMap Text Encoding)
-> Step MediaTypeObject (InsOrdHashMap Text Encoding) -> Ordering
Step MediaTypeObject (InsOrdHashMap Text Encoding)
-> Step MediaTypeObject (InsOrdHashMap Text Encoding)
-> Step MediaTypeObject (InsOrdHashMap Text Encoding)
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 MediaTypeObject (InsOrdHashMap Text Encoding)
-> Step MediaTypeObject (InsOrdHashMap Text Encoding)
-> Step MediaTypeObject (InsOrdHashMap Text Encoding)
$cmin :: Step MediaTypeObject (InsOrdHashMap Text Encoding)
-> Step MediaTypeObject (InsOrdHashMap Text Encoding)
-> Step MediaTypeObject (InsOrdHashMap Text Encoding)
max :: Step MediaTypeObject (InsOrdHashMap Text Encoding)
-> Step MediaTypeObject (InsOrdHashMap Text Encoding)
-> Step MediaTypeObject (InsOrdHashMap Text Encoding)
$cmax :: Step MediaTypeObject (InsOrdHashMap Text Encoding)
-> Step MediaTypeObject (InsOrdHashMap Text Encoding)
-> Step MediaTypeObject (InsOrdHashMap Text Encoding)
>= :: Step MediaTypeObject (InsOrdHashMap Text Encoding)
-> Step MediaTypeObject (InsOrdHashMap Text Encoding) -> Bool
$c>= :: Step MediaTypeObject (InsOrdHashMap Text Encoding)
-> Step MediaTypeObject (InsOrdHashMap Text Encoding) -> Bool
> :: Step MediaTypeObject (InsOrdHashMap Text Encoding)
-> Step MediaTypeObject (InsOrdHashMap Text Encoding) -> Bool
$c> :: Step MediaTypeObject (InsOrdHashMap Text Encoding)
-> Step MediaTypeObject (InsOrdHashMap Text Encoding) -> Bool
<= :: Step MediaTypeObject (InsOrdHashMap Text Encoding)
-> Step MediaTypeObject (InsOrdHashMap Text Encoding) -> Bool
$c<= :: Step MediaTypeObject (InsOrdHashMap Text Encoding)
-> Step MediaTypeObject (InsOrdHashMap Text Encoding) -> Bool
< :: Step MediaTypeObject (InsOrdHashMap Text Encoding)
-> Step MediaTypeObject (InsOrdHashMap Text Encoding) -> Bool
$c< :: Step MediaTypeObject (InsOrdHashMap Text Encoding)
-> Step MediaTypeObject (InsOrdHashMap Text Encoding) -> Bool
compare :: Step MediaTypeObject (InsOrdHashMap Text Encoding)
-> Step MediaTypeObject (InsOrdHashMap Text Encoding) -> Ordering
$ccompare :: Step MediaTypeObject (InsOrdHashMap Text Encoding)
-> Step MediaTypeObject (InsOrdHashMap Text Encoding) -> Ordering
$cp1Ord :: Eq (Step MediaTypeObject (InsOrdHashMap Text Encoding))
Ord, Int -> Step MediaTypeObject (InsOrdHashMap Text Encoding) -> ShowS
[Step MediaTypeObject (InsOrdHashMap Text Encoding)] -> ShowS
Step MediaTypeObject (InsOrdHashMap Text Encoding) -> String
(Int
 -> Step MediaTypeObject (InsOrdHashMap Text Encoding) -> ShowS)
-> (Step MediaTypeObject (InsOrdHashMap Text Encoding) -> String)
-> ([Step MediaTypeObject (InsOrdHashMap Text Encoding)] -> ShowS)
-> Show (Step MediaTypeObject (InsOrdHashMap Text Encoding))
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Step MediaTypeObject (InsOrdHashMap Text Encoding)] -> ShowS
$cshowList :: [Step MediaTypeObject (InsOrdHashMap Text Encoding)] -> ShowS
show :: Step MediaTypeObject (InsOrdHashMap Text Encoding) -> String
$cshow :: Step MediaTypeObject (InsOrdHashMap Text Encoding) -> String
showsPrec :: Int -> Step MediaTypeObject (InsOrdHashMap Text Encoding) -> ShowS
$cshowsPrec :: Int -> Step MediaTypeObject (InsOrdHashMap Text Encoding) -> ShowS
Show)

instance Steppable MediaTypeObject Encoding where
  data Step MediaTypeObject Encoding = MediaTypeParamEncoding Text
    deriving stock (Step MediaTypeObject Encoding
-> Step MediaTypeObject Encoding -> Bool
(Step MediaTypeObject Encoding
 -> Step MediaTypeObject Encoding -> Bool)
-> (Step MediaTypeObject Encoding
    -> Step MediaTypeObject Encoding -> Bool)
-> Eq (Step MediaTypeObject Encoding)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Step MediaTypeObject Encoding
-> Step MediaTypeObject Encoding -> Bool
$c/= :: Step MediaTypeObject Encoding
-> Step MediaTypeObject Encoding -> Bool
== :: Step MediaTypeObject Encoding
-> Step MediaTypeObject Encoding -> Bool
$c== :: Step MediaTypeObject Encoding
-> Step MediaTypeObject Encoding -> Bool
Eq, Eq (Step MediaTypeObject Encoding)
Eq (Step MediaTypeObject Encoding)
-> (Step MediaTypeObject Encoding
    -> Step MediaTypeObject Encoding -> Ordering)
-> (Step MediaTypeObject Encoding
    -> Step MediaTypeObject Encoding -> Bool)
-> (Step MediaTypeObject Encoding
    -> Step MediaTypeObject Encoding -> Bool)
-> (Step MediaTypeObject Encoding
    -> Step MediaTypeObject Encoding -> Bool)
-> (Step MediaTypeObject Encoding
    -> Step MediaTypeObject Encoding -> Bool)
-> (Step MediaTypeObject Encoding
    -> Step MediaTypeObject Encoding -> Step MediaTypeObject Encoding)
-> (Step MediaTypeObject Encoding
    -> Step MediaTypeObject Encoding -> Step MediaTypeObject Encoding)
-> Ord (Step MediaTypeObject Encoding)
Step MediaTypeObject Encoding
-> Step MediaTypeObject Encoding -> Bool
Step MediaTypeObject Encoding
-> Step MediaTypeObject Encoding -> Ordering
Step MediaTypeObject Encoding
-> Step MediaTypeObject Encoding -> Step MediaTypeObject Encoding
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 MediaTypeObject Encoding
-> Step MediaTypeObject Encoding -> Step MediaTypeObject Encoding
$cmin :: Step MediaTypeObject Encoding
-> Step MediaTypeObject Encoding -> Step MediaTypeObject Encoding
max :: Step MediaTypeObject Encoding
-> Step MediaTypeObject Encoding -> Step MediaTypeObject Encoding
$cmax :: Step MediaTypeObject Encoding
-> Step MediaTypeObject Encoding -> Step MediaTypeObject Encoding
>= :: Step MediaTypeObject Encoding
-> Step MediaTypeObject Encoding -> Bool
$c>= :: Step MediaTypeObject Encoding
-> Step MediaTypeObject Encoding -> Bool
> :: Step MediaTypeObject Encoding
-> Step MediaTypeObject Encoding -> Bool
$c> :: Step MediaTypeObject Encoding
-> Step MediaTypeObject Encoding -> Bool
<= :: Step MediaTypeObject Encoding
-> Step MediaTypeObject Encoding -> Bool
$c<= :: Step MediaTypeObject Encoding
-> Step MediaTypeObject Encoding -> Bool
< :: Step MediaTypeObject Encoding
-> Step MediaTypeObject Encoding -> Bool
$c< :: Step MediaTypeObject Encoding
-> Step MediaTypeObject Encoding -> Bool
compare :: Step MediaTypeObject Encoding
-> Step MediaTypeObject Encoding -> Ordering
$ccompare :: Step MediaTypeObject Encoding
-> Step MediaTypeObject Encoding -> Ordering
$cp1Ord :: Eq (Step MediaTypeObject Encoding)
Ord, Int -> Step MediaTypeObject Encoding -> ShowS
[Step MediaTypeObject Encoding] -> ShowS
Step MediaTypeObject Encoding -> String
(Int -> Step MediaTypeObject Encoding -> ShowS)
-> (Step MediaTypeObject Encoding -> String)
-> ([Step MediaTypeObject Encoding] -> ShowS)
-> Show (Step MediaTypeObject Encoding)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Step MediaTypeObject Encoding] -> ShowS
$cshowList :: [Step MediaTypeObject Encoding] -> ShowS
show :: Step MediaTypeObject Encoding -> String
$cshow :: Step MediaTypeObject Encoding -> String
showsPrec :: Int -> Step MediaTypeObject Encoding -> ShowS
$cshowsPrec :: Int -> Step MediaTypeObject Encoding -> ShowS
Show)

instance Steppable Encoding (Definitions (Referenced Header)) where
  data Step Encoding (Definitions (Referenced Header)) = EncodingHeaderStep
    deriving stock (Step Encoding (InsOrdHashMap Text (Referenced Header))
-> Step Encoding (InsOrdHashMap Text (Referenced Header)) -> Bool
(Step Encoding (InsOrdHashMap Text (Referenced Header))
 -> Step Encoding (InsOrdHashMap Text (Referenced Header)) -> Bool)
-> (Step Encoding (InsOrdHashMap Text (Referenced Header))
    -> Step Encoding (InsOrdHashMap Text (Referenced Header)) -> Bool)
-> Eq (Step Encoding (InsOrdHashMap Text (Referenced Header)))
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Step Encoding (InsOrdHashMap Text (Referenced Header))
-> Step Encoding (InsOrdHashMap Text (Referenced Header)) -> Bool
$c/= :: Step Encoding (InsOrdHashMap Text (Referenced Header))
-> Step Encoding (InsOrdHashMap Text (Referenced Header)) -> Bool
== :: Step Encoding (InsOrdHashMap Text (Referenced Header))
-> Step Encoding (InsOrdHashMap Text (Referenced Header)) -> Bool
$c== :: Step Encoding (InsOrdHashMap Text (Referenced Header))
-> Step Encoding (InsOrdHashMap Text (Referenced Header)) -> Bool
Eq, Eq (Step Encoding (InsOrdHashMap Text (Referenced Header)))
Eq (Step Encoding (InsOrdHashMap Text (Referenced Header)))
-> (Step Encoding (InsOrdHashMap Text (Referenced Header))
    -> Step Encoding (InsOrdHashMap Text (Referenced Header))
    -> Ordering)
-> (Step Encoding (InsOrdHashMap Text (Referenced Header))
    -> Step Encoding (InsOrdHashMap Text (Referenced Header)) -> Bool)
-> (Step Encoding (InsOrdHashMap Text (Referenced Header))
    -> Step Encoding (InsOrdHashMap Text (Referenced Header)) -> Bool)
-> (Step Encoding (InsOrdHashMap Text (Referenced Header))
    -> Step Encoding (InsOrdHashMap Text (Referenced Header)) -> Bool)
-> (Step Encoding (InsOrdHashMap Text (Referenced Header))
    -> Step Encoding (InsOrdHashMap Text (Referenced Header)) -> Bool)
-> (Step Encoding (InsOrdHashMap Text (Referenced Header))
    -> Step Encoding (InsOrdHashMap Text (Referenced Header))
    -> Step Encoding (InsOrdHashMap Text (Referenced Header)))
-> (Step Encoding (InsOrdHashMap Text (Referenced Header))
    -> Step Encoding (InsOrdHashMap Text (Referenced Header))
    -> Step Encoding (InsOrdHashMap Text (Referenced Header)))
-> Ord (Step Encoding (InsOrdHashMap Text (Referenced Header)))
Step Encoding (InsOrdHashMap Text (Referenced Header))
-> Step Encoding (InsOrdHashMap Text (Referenced Header)) -> Bool
Step Encoding (InsOrdHashMap Text (Referenced Header))
-> Step Encoding (InsOrdHashMap Text (Referenced Header))
-> Ordering
Step Encoding (InsOrdHashMap Text (Referenced Header))
-> Step Encoding (InsOrdHashMap Text (Referenced Header))
-> Step Encoding (InsOrdHashMap Text (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 Encoding (InsOrdHashMap Text (Referenced Header))
-> Step Encoding (InsOrdHashMap Text (Referenced Header))
-> Step Encoding (InsOrdHashMap Text (Referenced Header))
$cmin :: Step Encoding (InsOrdHashMap Text (Referenced Header))
-> Step Encoding (InsOrdHashMap Text (Referenced Header))
-> Step Encoding (InsOrdHashMap Text (Referenced Header))
max :: Step Encoding (InsOrdHashMap Text (Referenced Header))
-> Step Encoding (InsOrdHashMap Text (Referenced Header))
-> Step Encoding (InsOrdHashMap Text (Referenced Header))
$cmax :: Step Encoding (InsOrdHashMap Text (Referenced Header))
-> Step Encoding (InsOrdHashMap Text (Referenced Header))
-> Step Encoding (InsOrdHashMap Text (Referenced Header))
>= :: Step Encoding (InsOrdHashMap Text (Referenced Header))
-> Step Encoding (InsOrdHashMap Text (Referenced Header)) -> Bool
$c>= :: Step Encoding (InsOrdHashMap Text (Referenced Header))
-> Step Encoding (InsOrdHashMap Text (Referenced Header)) -> Bool
> :: Step Encoding (InsOrdHashMap Text (Referenced Header))
-> Step Encoding (InsOrdHashMap Text (Referenced Header)) -> Bool
$c> :: Step Encoding (InsOrdHashMap Text (Referenced Header))
-> Step Encoding (InsOrdHashMap Text (Referenced Header)) -> Bool
<= :: Step Encoding (InsOrdHashMap Text (Referenced Header))
-> Step Encoding (InsOrdHashMap Text (Referenced Header)) -> Bool
$c<= :: Step Encoding (InsOrdHashMap Text (Referenced Header))
-> Step Encoding (InsOrdHashMap Text (Referenced Header)) -> Bool
< :: Step Encoding (InsOrdHashMap Text (Referenced Header))
-> Step Encoding (InsOrdHashMap Text (Referenced Header)) -> Bool
$c< :: Step Encoding (InsOrdHashMap Text (Referenced Header))
-> Step Encoding (InsOrdHashMap Text (Referenced Header)) -> Bool
compare :: Step Encoding (InsOrdHashMap Text (Referenced Header))
-> Step Encoding (InsOrdHashMap Text (Referenced Header))
-> Ordering
$ccompare :: Step Encoding (InsOrdHashMap Text (Referenced Header))
-> Step Encoding (InsOrdHashMap Text (Referenced Header))
-> Ordering
$cp1Ord :: Eq (Step Encoding (InsOrdHashMap Text (Referenced Header)))
Ord, Int
-> Step Encoding (InsOrdHashMap Text (Referenced Header)) -> ShowS
[Step Encoding (InsOrdHashMap Text (Referenced Header))] -> ShowS
Step Encoding (InsOrdHashMap Text (Referenced Header)) -> String
(Int
 -> Step Encoding (InsOrdHashMap Text (Referenced Header)) -> ShowS)
-> (Step Encoding (InsOrdHashMap Text (Referenced Header))
    -> String)
-> ([Step Encoding (InsOrdHashMap Text (Referenced Header))]
    -> ShowS)
-> Show (Step Encoding (InsOrdHashMap Text (Referenced Header)))
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Step Encoding (InsOrdHashMap Text (Referenced Header))] -> ShowS
$cshowList :: [Step Encoding (InsOrdHashMap Text (Referenced Header))] -> ShowS
show :: Step Encoding (InsOrdHashMap Text (Referenced Header)) -> String
$cshow :: Step Encoding (InsOrdHashMap Text (Referenced Header)) -> String
showsPrec :: Int
-> Step Encoding (InsOrdHashMap Text (Referenced Header)) -> ShowS
$cshowsPrec :: Int
-> Step Encoding (InsOrdHashMap Text (Referenced Header)) -> ShowS
Show)

instance Behavable 'OperationLevel 'ResponseLevel where
  data Behave 'OperationLevel 'ResponseLevel
    = WithStatusCode HttpStatusCode
    deriving stock (Behave 'OperationLevel 'ResponseLevel
-> Behave 'OperationLevel 'ResponseLevel -> Bool
(Behave 'OperationLevel 'ResponseLevel
 -> Behave 'OperationLevel 'ResponseLevel -> Bool)
-> (Behave 'OperationLevel 'ResponseLevel
    -> Behave 'OperationLevel 'ResponseLevel -> Bool)
-> Eq (Behave 'OperationLevel 'ResponseLevel)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Behave 'OperationLevel 'ResponseLevel
-> Behave 'OperationLevel 'ResponseLevel -> Bool
$c/= :: Behave 'OperationLevel 'ResponseLevel
-> Behave 'OperationLevel 'ResponseLevel -> Bool
== :: Behave 'OperationLevel 'ResponseLevel
-> Behave 'OperationLevel 'ResponseLevel -> Bool
$c== :: Behave 'OperationLevel 'ResponseLevel
-> Behave 'OperationLevel 'ResponseLevel -> Bool
Eq, Eq (Behave 'OperationLevel 'ResponseLevel)
Eq (Behave 'OperationLevel 'ResponseLevel)
-> (Behave 'OperationLevel 'ResponseLevel
    -> Behave 'OperationLevel 'ResponseLevel -> Ordering)
-> (Behave 'OperationLevel 'ResponseLevel
    -> Behave 'OperationLevel 'ResponseLevel -> Bool)
-> (Behave 'OperationLevel 'ResponseLevel
    -> Behave 'OperationLevel 'ResponseLevel -> Bool)
-> (Behave 'OperationLevel 'ResponseLevel
    -> Behave 'OperationLevel 'ResponseLevel -> Bool)
-> (Behave 'OperationLevel 'ResponseLevel
    -> Behave 'OperationLevel 'ResponseLevel -> Bool)
-> (Behave 'OperationLevel 'ResponseLevel
    -> Behave 'OperationLevel 'ResponseLevel
    -> Behave 'OperationLevel 'ResponseLevel)
-> (Behave 'OperationLevel 'ResponseLevel
    -> Behave 'OperationLevel 'ResponseLevel
    -> Behave 'OperationLevel 'ResponseLevel)
-> Ord (Behave 'OperationLevel 'ResponseLevel)
Behave 'OperationLevel 'ResponseLevel
-> Behave 'OperationLevel 'ResponseLevel -> Bool
Behave 'OperationLevel 'ResponseLevel
-> Behave 'OperationLevel 'ResponseLevel -> Ordering
Behave 'OperationLevel 'ResponseLevel
-> Behave 'OperationLevel 'ResponseLevel
-> Behave 'OperationLevel '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 :: Behave 'OperationLevel 'ResponseLevel
-> Behave 'OperationLevel 'ResponseLevel
-> Behave 'OperationLevel 'ResponseLevel
$cmin :: Behave 'OperationLevel 'ResponseLevel
-> Behave 'OperationLevel 'ResponseLevel
-> Behave 'OperationLevel 'ResponseLevel
max :: Behave 'OperationLevel 'ResponseLevel
-> Behave 'OperationLevel 'ResponseLevel
-> Behave 'OperationLevel 'ResponseLevel
$cmax :: Behave 'OperationLevel 'ResponseLevel
-> Behave 'OperationLevel 'ResponseLevel
-> Behave 'OperationLevel 'ResponseLevel
>= :: Behave 'OperationLevel 'ResponseLevel
-> Behave 'OperationLevel 'ResponseLevel -> Bool
$c>= :: Behave 'OperationLevel 'ResponseLevel
-> Behave 'OperationLevel 'ResponseLevel -> Bool
> :: Behave 'OperationLevel 'ResponseLevel
-> Behave 'OperationLevel 'ResponseLevel -> Bool
$c> :: Behave 'OperationLevel 'ResponseLevel
-> Behave 'OperationLevel 'ResponseLevel -> Bool
<= :: Behave 'OperationLevel 'ResponseLevel
-> Behave 'OperationLevel 'ResponseLevel -> Bool
$c<= :: Behave 'OperationLevel 'ResponseLevel
-> Behave 'OperationLevel 'ResponseLevel -> Bool
< :: Behave 'OperationLevel 'ResponseLevel
-> Behave 'OperationLevel 'ResponseLevel -> Bool
$c< :: Behave 'OperationLevel 'ResponseLevel
-> Behave 'OperationLevel 'ResponseLevel -> Bool
compare :: Behave 'OperationLevel 'ResponseLevel
-> Behave 'OperationLevel 'ResponseLevel -> Ordering
$ccompare :: Behave 'OperationLevel 'ResponseLevel
-> Behave 'OperationLevel 'ResponseLevel -> Ordering
$cp1Ord :: Eq (Behave 'OperationLevel 'ResponseLevel)
Ord, Int -> Behave 'OperationLevel 'ResponseLevel -> ShowS
[Behave 'OperationLevel 'ResponseLevel] -> ShowS
Behave 'OperationLevel 'ResponseLevel -> String
(Int -> Behave 'OperationLevel 'ResponseLevel -> ShowS)
-> (Behave 'OperationLevel 'ResponseLevel -> String)
-> ([Behave 'OperationLevel 'ResponseLevel] -> ShowS)
-> Show (Behave 'OperationLevel 'ResponseLevel)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Behave 'OperationLevel 'ResponseLevel] -> ShowS
$cshowList :: [Behave 'OperationLevel 'ResponseLevel] -> ShowS
show :: Behave 'OperationLevel 'ResponseLevel -> String
$cshow :: Behave 'OperationLevel 'ResponseLevel -> String
showsPrec :: Int -> Behave 'OperationLevel 'ResponseLevel -> ShowS
$cshowsPrec :: Int -> Behave 'OperationLevel 'ResponseLevel -> ShowS
Show)
  describeBehavior :: Behave 'OperationLevel 'ResponseLevel -> Inlines
describeBehavior (WithStatusCode c) = Inlines
"Response code " Inlines -> Inlines -> Inlines
forall a. Semigroup a => a -> a -> a
<> (String -> Inlines
forall a. IsString a => String -> a
fromString (String -> Inlines) -> (Int -> String) -> Int -> Inlines
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> String
forall a. Show a => a -> String
show (Int -> Inlines) -> Int -> Inlines
forall a b. (a -> b) -> a -> b
$ Int
c)

instance Issuable 'OperationLevel where
  data Issue 'OperationLevel
    = ConsumerDoesntHaveResponseCode HttpStatusCode
    | ParamNotMatched Text
    | PathFragmentNotMatched Int
    | NoRequestBody
    deriving stock (Issue 'OperationLevel -> Issue 'OperationLevel -> Bool
(Issue 'OperationLevel -> Issue 'OperationLevel -> Bool)
-> (Issue 'OperationLevel -> Issue 'OperationLevel -> Bool)
-> Eq (Issue 'OperationLevel)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Issue 'OperationLevel -> Issue 'OperationLevel -> Bool
$c/= :: Issue 'OperationLevel -> Issue 'OperationLevel -> Bool
== :: Issue 'OperationLevel -> Issue 'OperationLevel -> Bool
$c== :: Issue 'OperationLevel -> Issue 'OperationLevel -> Bool
Eq, Eq (Issue 'OperationLevel)
Eq (Issue 'OperationLevel)
-> (Issue 'OperationLevel -> Issue 'OperationLevel -> Ordering)
-> (Issue 'OperationLevel -> Issue 'OperationLevel -> Bool)
-> (Issue 'OperationLevel -> Issue 'OperationLevel -> Bool)
-> (Issue 'OperationLevel -> Issue 'OperationLevel -> Bool)
-> (Issue 'OperationLevel -> Issue 'OperationLevel -> Bool)
-> (Issue 'OperationLevel
    -> Issue 'OperationLevel -> Issue 'OperationLevel)
-> (Issue 'OperationLevel
    -> Issue 'OperationLevel -> Issue 'OperationLevel)
-> Ord (Issue 'OperationLevel)
Issue 'OperationLevel -> Issue 'OperationLevel -> Bool
Issue 'OperationLevel -> Issue 'OperationLevel -> Ordering
Issue 'OperationLevel
-> Issue 'OperationLevel -> Issue 'OperationLevel
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 'OperationLevel
-> Issue 'OperationLevel -> Issue 'OperationLevel
$cmin :: Issue 'OperationLevel
-> Issue 'OperationLevel -> Issue 'OperationLevel
max :: Issue 'OperationLevel
-> Issue 'OperationLevel -> Issue 'OperationLevel
$cmax :: Issue 'OperationLevel
-> Issue 'OperationLevel -> Issue 'OperationLevel
>= :: Issue 'OperationLevel -> Issue 'OperationLevel -> Bool
$c>= :: Issue 'OperationLevel -> Issue 'OperationLevel -> Bool
> :: Issue 'OperationLevel -> Issue 'OperationLevel -> Bool
$c> :: Issue 'OperationLevel -> Issue 'OperationLevel -> Bool
<= :: Issue 'OperationLevel -> Issue 'OperationLevel -> Bool
$c<= :: Issue 'OperationLevel -> Issue 'OperationLevel -> Bool
< :: Issue 'OperationLevel -> Issue 'OperationLevel -> Bool
$c< :: Issue 'OperationLevel -> Issue 'OperationLevel -> Bool
compare :: Issue 'OperationLevel -> Issue 'OperationLevel -> Ordering
$ccompare :: Issue 'OperationLevel -> Issue 'OperationLevel -> Ordering
$cp1Ord :: Eq (Issue 'OperationLevel)
Ord, Int -> Issue 'OperationLevel -> ShowS
[Issue 'OperationLevel] -> ShowS
Issue 'OperationLevel -> String
(Int -> Issue 'OperationLevel -> ShowS)
-> (Issue 'OperationLevel -> String)
-> ([Issue 'OperationLevel] -> ShowS)
-> Show (Issue 'OperationLevel)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Issue 'OperationLevel] -> ShowS
$cshowList :: [Issue 'OperationLevel] -> ShowS
show :: Issue 'OperationLevel -> String
$cshow :: Issue 'OperationLevel -> String
showsPrec :: Int -> Issue 'OperationLevel -> ShowS
$cshowsPrec :: Int -> Issue 'OperationLevel -> ShowS
Show)
  issueKind :: Issue 'OperationLevel -> IssueKind
issueKind = \case
    Issue 'OperationLevel
_ -> IssueKind
CertainIssue
  describeIssue :: Orientation -> Issue 'OperationLevel -> Blocks
describeIssue Orientation
Forward (ConsumerDoesntHaveResponseCode c) =
    Inlines -> Blocks
para (Inlines -> Blocks) -> Inlines -> Blocks
forall a b. (a -> b) -> a -> b
$ Inlines
"Response code " Inlines -> Inlines -> Inlines
forall a. Semigroup a => a -> a -> a
<> (Text -> Inlines
str (Text -> Inlines) -> (Int -> Text) -> Int -> Inlines
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Text
T.pack (String -> Text) -> (Int -> String) -> Int -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> String
forall a. Show a => a -> String
show (Int -> Inlines) -> Int -> Inlines
forall a b. (a -> b) -> a -> b
$ Int
c) Inlines -> Inlines -> Inlines
forall a. Semigroup a => a -> a -> a
<> Inlines
" has been removed."
  describeIssue Orientation
Backward (ConsumerDoesntHaveResponseCode c) =
    Inlines -> Blocks
para (Inlines -> Blocks) -> Inlines -> Blocks
forall a b. (a -> b) -> a -> b
$ Inlines
"Response code " Inlines -> Inlines -> Inlines
forall a. Semigroup a => a -> a -> a
<> (Text -> Inlines
str (Text -> Inlines) -> (Int -> Text) -> Int -> Inlines
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Text
T.pack (String -> Text) -> (Int -> String) -> Int -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> String
forall a. Show a => a -> String
show (Int -> Inlines) -> Int -> Inlines
forall a b. (a -> b) -> a -> b
$ Int
c) Inlines -> Inlines -> Inlines
forall a. Semigroup a => a -> a -> a
<> Inlines
" has been added."
  describeIssue Orientation
Forward (ParamNotMatched param) =
    Inlines -> Blocks
para (Inlines -> Blocks) -> Inlines -> Blocks
forall a b. (a -> b) -> a -> b
$ Inlines
"Parameter " Inlines -> Inlines -> Inlines
forall a. Semigroup a => a -> a -> a
<> Text -> Inlines
code Text
param Inlines -> Inlines -> Inlines
forall a. Semigroup a => a -> a -> a
<> Inlines
" has become required."
  describeIssue Orientation
Backward (ParamNotMatched param) =
    Inlines -> Blocks
para (Inlines -> Blocks) -> Inlines -> Blocks
forall a b. (a -> b) -> a -> b
$ Inlines
"Parameter " Inlines -> Inlines -> Inlines
forall a. Semigroup a => a -> a -> a
<> Text -> Inlines
code Text
param Inlines -> Inlines -> Inlines
forall a. Semigroup a => a -> a -> a
<> Inlines
" is no longer required."
  describeIssue Orientation
_ (PathFragmentNotMatched i) =
    -- TODO: Indices are meaningless in this context. Replace with a better error.
    Inlines -> Blocks
para (Inlines -> Blocks) -> Inlines -> Blocks
forall a b. (a -> b) -> a -> b
$ Inlines
"Path fragment " Inlines -> Inlines -> Inlines
forall a. Semigroup a => a -> a -> a
<> (Text -> Inlines
str (Text -> Inlines) -> (Int -> Text) -> Int -> Inlines
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Text
T.pack (String -> Text) -> (Int -> String) -> Int -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> String
forall a. Show a => a -> String
show (Int -> Inlines) -> Int -> Inlines
forall a b. (a -> b) -> a -> b
$ Int
i) Inlines -> Inlines -> Inlines
forall a. Semigroup a => a -> a -> a
<> Inlines
" not matched."
  describeIssue Orientation
Forward Issue 'OperationLevel
NoRequestBody = Inlines -> Blocks
para Inlines
"Request body has been added."
  describeIssue Orientation
Backward Issue 'OperationLevel
NoRequestBody = Inlines -> Blocks
para Inlines
"Request body has been removed."