{-# LANGUAGE DuplicateRecordFields #-}

-- | Stability: experimental
-- Type definitions directly corresponding to the
-- [FIDO Metadata Service](https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html)
-- specification.
module Crypto.WebAuthn.Metadata.Service.WebIDL
  ( MetadataBLOBPayloadEntry (..),
    BiometricStatusReport (..),
    StatusReport (..),
    AuthenticatorStatus (..),
    MetadataBLOBPayload (..),
  )
where

-- Note from https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#notation :
-- Unless otherwise specified, if a WebIDL dictionary member is DOMString, it MUST NOT be empty.
-- Unless otherwise specified, if a WebIDL dictionary member is a List, it MUST NOT be an empty list.

import Crypto.WebAuthn.Internal.Utils (CustomJSON (CustomJSON), JSONEncoding)
import Crypto.WebAuthn.Metadata.Statement.WebIDL (AAGUID, MetadataStatement)
import qualified Crypto.WebAuthn.Metadata.UAF as UAF
import qualified Crypto.WebAuthn.WebIDL as IDL
import qualified Data.Aeson as Aeson
import Data.List.NonEmpty (NonEmpty)
import GHC.Generics (Generic)

-- | [(spec)](https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#metadata-blob-payload-entry-dictionary)
data MetadataBLOBPayloadEntry = MetadataBLOBPayloadEntry
  { -- | [(spec)](https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#dom-metadatablobpayloadentry-aaid)
    MetadataBLOBPayloadEntry -> Maybe AAID
aaid :: Maybe UAF.AAID,
    -- | [(spec)](https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#dom-metadatablobpayloadentry-aaguid)
    MetadataBLOBPayloadEntry -> Maybe AAGUID
aaguid :: Maybe AAGUID,
    -- | [(spec)](https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#dom-metadatablobpayloadentry-attestationcertificatekeyidentifiers)
    MetadataBLOBPayloadEntry -> Maybe (NonEmpty DOMString)
attestationCertificateKeyIdentifiers :: Maybe (NonEmpty IDL.DOMString),
    -- | [(spec)](https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#dom-metadatablobpayloadentry-metadatastatement)
    MetadataBLOBPayloadEntry -> Maybe MetadataStatement
metadataStatement :: Maybe MetadataStatement,
    -- | [(spec)](https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#dom-metadatablobpayloadentry-biometricstatusreports)
    MetadataBLOBPayloadEntry -> Maybe (NonEmpty BiometricStatusReport)
biometricStatusReports :: Maybe (NonEmpty BiometricStatusReport),
    -- | [(spec)](https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#dom-metadatablobpayloadentry-statusreports)
    MetadataBLOBPayloadEntry -> NonEmpty StatusReport
statusReports :: NonEmpty StatusReport,
    -- | [(spec)](https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#dom-metadatablobpayloadentry-timeoflaststatuschange)
    MetadataBLOBPayloadEntry -> DOMString
timeOfLastStatusChange :: IDL.DOMString
    -- Unused in the current blob, also annoying to implement
    -- entryRogueListURL :: IDL.DOMString,
    -- entryRogueListHash :: IDL.DOMString
  }
  deriving (Int -> MetadataBLOBPayloadEntry -> ShowS
[MetadataBLOBPayloadEntry] -> ShowS
MetadataBLOBPayloadEntry -> String
(Int -> MetadataBLOBPayloadEntry -> ShowS)
-> (MetadataBLOBPayloadEntry -> String)
-> ([MetadataBLOBPayloadEntry] -> ShowS)
-> Show MetadataBLOBPayloadEntry
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MetadataBLOBPayloadEntry] -> ShowS
$cshowList :: [MetadataBLOBPayloadEntry] -> ShowS
show :: MetadataBLOBPayloadEntry -> String
$cshow :: MetadataBLOBPayloadEntry -> String
showsPrec :: Int -> MetadataBLOBPayloadEntry -> ShowS
$cshowsPrec :: Int -> MetadataBLOBPayloadEntry -> ShowS
Show, MetadataBLOBPayloadEntry -> MetadataBLOBPayloadEntry -> Bool
(MetadataBLOBPayloadEntry -> MetadataBLOBPayloadEntry -> Bool)
-> (MetadataBLOBPayloadEntry -> MetadataBLOBPayloadEntry -> Bool)
-> Eq MetadataBLOBPayloadEntry
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MetadataBLOBPayloadEntry -> MetadataBLOBPayloadEntry -> Bool
$c/= :: MetadataBLOBPayloadEntry -> MetadataBLOBPayloadEntry -> Bool
== :: MetadataBLOBPayloadEntry -> MetadataBLOBPayloadEntry -> Bool
$c== :: MetadataBLOBPayloadEntry -> MetadataBLOBPayloadEntry -> Bool
Eq, (forall x.
 MetadataBLOBPayloadEntry -> Rep MetadataBLOBPayloadEntry x)
-> (forall x.
    Rep MetadataBLOBPayloadEntry x -> MetadataBLOBPayloadEntry)
-> Generic MetadataBLOBPayloadEntry
forall x.
Rep MetadataBLOBPayloadEntry x -> MetadataBLOBPayloadEntry
forall x.
MetadataBLOBPayloadEntry -> Rep MetadataBLOBPayloadEntry x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep MetadataBLOBPayloadEntry x -> MetadataBLOBPayloadEntry
$cfrom :: forall x.
MetadataBLOBPayloadEntry -> Rep MetadataBLOBPayloadEntry x
Generic)
  deriving (Value -> Parser [MetadataBLOBPayloadEntry]
Value -> Parser MetadataBLOBPayloadEntry
(Value -> Parser MetadataBLOBPayloadEntry)
-> (Value -> Parser [MetadataBLOBPayloadEntry])
-> FromJSON MetadataBLOBPayloadEntry
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
parseJSONList :: Value -> Parser [MetadataBLOBPayloadEntry]
$cparseJSONList :: Value -> Parser [MetadataBLOBPayloadEntry]
parseJSON :: Value -> Parser MetadataBLOBPayloadEntry
$cparseJSON :: Value -> Parser MetadataBLOBPayloadEntry
Aeson.FromJSON, [MetadataBLOBPayloadEntry] -> Encoding
[MetadataBLOBPayloadEntry] -> Value
MetadataBLOBPayloadEntry -> Encoding
MetadataBLOBPayloadEntry -> Value
(MetadataBLOBPayloadEntry -> Value)
-> (MetadataBLOBPayloadEntry -> Encoding)
-> ([MetadataBLOBPayloadEntry] -> Value)
-> ([MetadataBLOBPayloadEntry] -> Encoding)
-> ToJSON MetadataBLOBPayloadEntry
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
toEncodingList :: [MetadataBLOBPayloadEntry] -> Encoding
$ctoEncodingList :: [MetadataBLOBPayloadEntry] -> Encoding
toJSONList :: [MetadataBLOBPayloadEntry] -> Value
$ctoJSONList :: [MetadataBLOBPayloadEntry] -> Value
toEncoding :: MetadataBLOBPayloadEntry -> Encoding
$ctoEncoding :: MetadataBLOBPayloadEntry -> Encoding
toJSON :: MetadataBLOBPayloadEntry -> Value
$ctoJSON :: MetadataBLOBPayloadEntry -> Value
Aeson.ToJSON) via JSONEncoding MetadataBLOBPayloadEntry

-- | [(spec)](https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#biometricstatusreport-dictionary)
data BiometricStatusReport = BiometricStatusReport
  { -- | [(spec)](https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#dom-biometricstatusreport-certlevel)
    BiometricStatusReport -> UnsignedShort
certLevel :: IDL.UnsignedShort,
    -- | [(spec)](https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#dom-biometricstatusreport-modality)
    BiometricStatusReport -> DOMString
modality :: IDL.DOMString,
    -- | [(spec)](https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#dom-biometricstatusreport-effectivedate)
    BiometricStatusReport -> Maybe DOMString
effectiveDate :: Maybe IDL.DOMString,
    -- | [(spec)](https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#dom-biometricstatusreport-certificationdescriptor)
    BiometricStatusReport -> Maybe DOMString
certificationDescriptor :: Maybe IDL.DOMString,
    -- | [(spec)](https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#dom-biometricstatusreport-certificatenumber)
    BiometricStatusReport -> Maybe DOMString
certificateNumber :: Maybe IDL.DOMString,
    -- | [(spec)](https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#dom-biometricstatusreport-certificationpolicyversion)
    BiometricStatusReport -> Maybe DOMString
certificationPolicyVersion :: Maybe IDL.DOMString,
    -- | [(spec)](https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#dom-biometricstatusreport-certificationrequirementsversion)
    BiometricStatusReport -> Maybe DOMString
certificationRequirementsVersion :: Maybe IDL.DOMString
  }
  deriving (Int -> BiometricStatusReport -> ShowS
[BiometricStatusReport] -> ShowS
BiometricStatusReport -> String
(Int -> BiometricStatusReport -> ShowS)
-> (BiometricStatusReport -> String)
-> ([BiometricStatusReport] -> ShowS)
-> Show BiometricStatusReport
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [BiometricStatusReport] -> ShowS
$cshowList :: [BiometricStatusReport] -> ShowS
show :: BiometricStatusReport -> String
$cshow :: BiometricStatusReport -> String
showsPrec :: Int -> BiometricStatusReport -> ShowS
$cshowsPrec :: Int -> BiometricStatusReport -> ShowS
Show, BiometricStatusReport -> BiometricStatusReport -> Bool
(BiometricStatusReport -> BiometricStatusReport -> Bool)
-> (BiometricStatusReport -> BiometricStatusReport -> Bool)
-> Eq BiometricStatusReport
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: BiometricStatusReport -> BiometricStatusReport -> Bool
$c/= :: BiometricStatusReport -> BiometricStatusReport -> Bool
== :: BiometricStatusReport -> BiometricStatusReport -> Bool
$c== :: BiometricStatusReport -> BiometricStatusReport -> Bool
Eq, (forall x. BiometricStatusReport -> Rep BiometricStatusReport x)
-> (forall x. Rep BiometricStatusReport x -> BiometricStatusReport)
-> Generic BiometricStatusReport
forall x. Rep BiometricStatusReport x -> BiometricStatusReport
forall x. BiometricStatusReport -> Rep BiometricStatusReport x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep BiometricStatusReport x -> BiometricStatusReport
$cfrom :: forall x. BiometricStatusReport -> Rep BiometricStatusReport x
Generic)
  deriving (Value -> Parser [BiometricStatusReport]
Value -> Parser BiometricStatusReport
(Value -> Parser BiometricStatusReport)
-> (Value -> Parser [BiometricStatusReport])
-> FromJSON BiometricStatusReport
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
parseJSONList :: Value -> Parser [BiometricStatusReport]
$cparseJSONList :: Value -> Parser [BiometricStatusReport]
parseJSON :: Value -> Parser BiometricStatusReport
$cparseJSON :: Value -> Parser BiometricStatusReport
Aeson.FromJSON, [BiometricStatusReport] -> Encoding
[BiometricStatusReport] -> Value
BiometricStatusReport -> Encoding
BiometricStatusReport -> Value
(BiometricStatusReport -> Value)
-> (BiometricStatusReport -> Encoding)
-> ([BiometricStatusReport] -> Value)
-> ([BiometricStatusReport] -> Encoding)
-> ToJSON BiometricStatusReport
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
toEncodingList :: [BiometricStatusReport] -> Encoding
$ctoEncodingList :: [BiometricStatusReport] -> Encoding
toJSONList :: [BiometricStatusReport] -> Value
$ctoJSONList :: [BiometricStatusReport] -> Value
toEncoding :: BiometricStatusReport -> Encoding
$ctoEncoding :: BiometricStatusReport -> Encoding
toJSON :: BiometricStatusReport -> Value
$ctoJSON :: BiometricStatusReport -> Value
Aeson.ToJSON) via JSONEncoding BiometricStatusReport

-- | [(spec)](https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#statusreport-dictionary)
data StatusReport = StatusReport
  { -- | [(spec)](https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#dom-statusreport-status)
    StatusReport -> AuthenticatorStatus
status :: AuthenticatorStatus,
    -- | [(spec)](https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#dom-statusreport-effectivedate)
    StatusReport -> Maybe DOMString
effectiveDate :: Maybe IDL.DOMString,
    -- | [(spec)](https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#dom-statusreport-authenticatorversion)
    StatusReport -> Maybe UnsignedLong
authenticatorVersion :: Maybe IDL.UnsignedLong,
    -- | [(spec)](https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#dom-statusreport-certificate)
    StatusReport -> Maybe DOMString
certificate :: Maybe IDL.DOMString,
    -- | [(spec)](https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#dom-statusreport-url)
    StatusReport -> Maybe DOMString
url :: Maybe IDL.DOMString,
    -- | [(spec)](https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#dom-statusreport-certificationdescriptor)
    StatusReport -> Maybe DOMString
certificationDescriptor :: Maybe IDL.DOMString,
    -- | [(spec)](https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#dom-statusreport-certificatenumber)
    StatusReport -> Maybe DOMString
certificateNumber :: Maybe IDL.DOMString,
    -- | [(spec)](https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#dom-statusreport-certificationpolicyversion)
    StatusReport -> Maybe DOMString
certificationPolicyVersion :: Maybe IDL.DOMString,
    -- | [(spec)](https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#dom-statusreport-certificationrequirementsversion)
    StatusReport -> Maybe DOMString
certificationRequirementsVersion :: Maybe IDL.DOMString
  }
  deriving (Int -> StatusReport -> ShowS
[StatusReport] -> ShowS
StatusReport -> String
(Int -> StatusReport -> ShowS)
-> (StatusReport -> String)
-> ([StatusReport] -> ShowS)
-> Show StatusReport
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [StatusReport] -> ShowS
$cshowList :: [StatusReport] -> ShowS
show :: StatusReport -> String
$cshow :: StatusReport -> String
showsPrec :: Int -> StatusReport -> ShowS
$cshowsPrec :: Int -> StatusReport -> ShowS
Show, StatusReport -> StatusReport -> Bool
(StatusReport -> StatusReport -> Bool)
-> (StatusReport -> StatusReport -> Bool) -> Eq StatusReport
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: StatusReport -> StatusReport -> Bool
$c/= :: StatusReport -> StatusReport -> Bool
== :: StatusReport -> StatusReport -> Bool
$c== :: StatusReport -> StatusReport -> Bool
Eq, (forall x. StatusReport -> Rep StatusReport x)
-> (forall x. Rep StatusReport x -> StatusReport)
-> Generic StatusReport
forall x. Rep StatusReport x -> StatusReport
forall x. StatusReport -> Rep StatusReport x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep StatusReport x -> StatusReport
$cfrom :: forall x. StatusReport -> Rep StatusReport x
Generic)
  deriving (Value -> Parser [StatusReport]
Value -> Parser StatusReport
(Value -> Parser StatusReport)
-> (Value -> Parser [StatusReport]) -> FromJSON StatusReport
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
parseJSONList :: Value -> Parser [StatusReport]
$cparseJSONList :: Value -> Parser [StatusReport]
parseJSON :: Value -> Parser StatusReport
$cparseJSON :: Value -> Parser StatusReport
Aeson.FromJSON, [StatusReport] -> Encoding
[StatusReport] -> Value
StatusReport -> Encoding
StatusReport -> Value
(StatusReport -> Value)
-> (StatusReport -> Encoding)
-> ([StatusReport] -> Value)
-> ([StatusReport] -> Encoding)
-> ToJSON StatusReport
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
toEncodingList :: [StatusReport] -> Encoding
$ctoEncodingList :: [StatusReport] -> Encoding
toJSONList :: [StatusReport] -> Value
$ctoJSONList :: [StatusReport] -> Value
toEncoding :: StatusReport -> Encoding
$ctoEncoding :: StatusReport -> Encoding
toJSON :: StatusReport -> Value
$ctoJSON :: StatusReport -> Value
Aeson.ToJSON) via JSONEncoding StatusReport

-- | [(spec)](https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#authenticatorstatus-enum)
data AuthenticatorStatus
  = NOT_FIDO_CERTIFIED
  | FIDO_CERTIFIED
  | USER_VERIFICATION_BYPASS
  | ATTESTATION_KEY_COMPROMISE
  | USER_KEY_REMOTE_COMPROMISE
  | USER_KEY_PHYSICAL_COMPROMISE
  | UPDATE_AVAILABLE
  | REVOKED
  | SELF_ASSERTION_SUBMITTED
  | FIDO_CERTIFIED_L1
  | FIDO_CERTIFIED_L1plus
  | FIDO_CERTIFIED_L2
  | FIDO_CERTIFIED_L2plus
  | FIDO_CERTIFIED_L3
  | FIDO_CERTIFIED_L3plus
  deriving (Int -> AuthenticatorStatus -> ShowS
[AuthenticatorStatus] -> ShowS
AuthenticatorStatus -> String
(Int -> AuthenticatorStatus -> ShowS)
-> (AuthenticatorStatus -> String)
-> ([AuthenticatorStatus] -> ShowS)
-> Show AuthenticatorStatus
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [AuthenticatorStatus] -> ShowS
$cshowList :: [AuthenticatorStatus] -> ShowS
show :: AuthenticatorStatus -> String
$cshow :: AuthenticatorStatus -> String
showsPrec :: Int -> AuthenticatorStatus -> ShowS
$cshowsPrec :: Int -> AuthenticatorStatus -> ShowS
Show, AuthenticatorStatus -> AuthenticatorStatus -> Bool
(AuthenticatorStatus -> AuthenticatorStatus -> Bool)
-> (AuthenticatorStatus -> AuthenticatorStatus -> Bool)
-> Eq AuthenticatorStatus
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AuthenticatorStatus -> AuthenticatorStatus -> Bool
$c/= :: AuthenticatorStatus -> AuthenticatorStatus -> Bool
== :: AuthenticatorStatus -> AuthenticatorStatus -> Bool
$c== :: AuthenticatorStatus -> AuthenticatorStatus -> Bool
Eq, (forall x. AuthenticatorStatus -> Rep AuthenticatorStatus x)
-> (forall x. Rep AuthenticatorStatus x -> AuthenticatorStatus)
-> Generic AuthenticatorStatus
forall x. Rep AuthenticatorStatus x -> AuthenticatorStatus
forall x. AuthenticatorStatus -> Rep AuthenticatorStatus x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep AuthenticatorStatus x -> AuthenticatorStatus
$cfrom :: forall x. AuthenticatorStatus -> Rep AuthenticatorStatus x
Generic)
  deriving (Value -> Parser [AuthenticatorStatus]
Value -> Parser AuthenticatorStatus
(Value -> Parser AuthenticatorStatus)
-> (Value -> Parser [AuthenticatorStatus])
-> FromJSON AuthenticatorStatus
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
parseJSONList :: Value -> Parser [AuthenticatorStatus]
$cparseJSONList :: Value -> Parser [AuthenticatorStatus]
parseJSON :: Value -> Parser AuthenticatorStatus
$cparseJSON :: Value -> Parser AuthenticatorStatus
Aeson.FromJSON, [AuthenticatorStatus] -> Encoding
[AuthenticatorStatus] -> Value
AuthenticatorStatus -> Encoding
AuthenticatorStatus -> Value
(AuthenticatorStatus -> Value)
-> (AuthenticatorStatus -> Encoding)
-> ([AuthenticatorStatus] -> Value)
-> ([AuthenticatorStatus] -> Encoding)
-> ToJSON AuthenticatorStatus
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
toEncodingList :: [AuthenticatorStatus] -> Encoding
$ctoEncodingList :: [AuthenticatorStatus] -> Encoding
toJSONList :: [AuthenticatorStatus] -> Value
$ctoJSONList :: [AuthenticatorStatus] -> Value
toEncoding :: AuthenticatorStatus -> Encoding
$ctoEncoding :: AuthenticatorStatus -> Encoding
toJSON :: AuthenticatorStatus -> Value
$ctoJSON :: AuthenticatorStatus -> Value
Aeson.ToJSON) via JSONEncoding AuthenticatorStatus

-- | [(spec)](https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#metadata-blob-payload-dictionary)
data MetadataBLOBPayload = MetadataBLOBPayload
  { -- | [(spec)](https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#dom-metadatablobpayload-legalheader)
    MetadataBLOBPayload -> Maybe DOMString
legalHeader :: Maybe IDL.DOMString,
    -- | [(spec)](https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#dom-metadatablobpayload-no)
    MetadataBLOBPayload -> Int
no :: Int,
    -- | [(spec)](https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#dom-metadatablobpayload-nextupdate)
    MetadataBLOBPayload -> DOMString
nextUpdate :: IDL.DOMString,
    -- | [(spec)](https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html#dom-metadatablobpayload-entries)
    MetadataBLOBPayload -> [MetadataBLOBPayloadEntry]
entries :: [MetadataBLOBPayloadEntry]
  }
  deriving (Int -> MetadataBLOBPayload -> ShowS
[MetadataBLOBPayload] -> ShowS
MetadataBLOBPayload -> String
(Int -> MetadataBLOBPayload -> ShowS)
-> (MetadataBLOBPayload -> String)
-> ([MetadataBLOBPayload] -> ShowS)
-> Show MetadataBLOBPayload
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MetadataBLOBPayload] -> ShowS
$cshowList :: [MetadataBLOBPayload] -> ShowS
show :: MetadataBLOBPayload -> String
$cshow :: MetadataBLOBPayload -> String
showsPrec :: Int -> MetadataBLOBPayload -> ShowS
$cshowsPrec :: Int -> MetadataBLOBPayload -> ShowS
Show, MetadataBLOBPayload -> MetadataBLOBPayload -> Bool
(MetadataBLOBPayload -> MetadataBLOBPayload -> Bool)
-> (MetadataBLOBPayload -> MetadataBLOBPayload -> Bool)
-> Eq MetadataBLOBPayload
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MetadataBLOBPayload -> MetadataBLOBPayload -> Bool
$c/= :: MetadataBLOBPayload -> MetadataBLOBPayload -> Bool
== :: MetadataBLOBPayload -> MetadataBLOBPayload -> Bool
$c== :: MetadataBLOBPayload -> MetadataBLOBPayload -> Bool
Eq, (forall x. MetadataBLOBPayload -> Rep MetadataBLOBPayload x)
-> (forall x. Rep MetadataBLOBPayload x -> MetadataBLOBPayload)
-> Generic MetadataBLOBPayload
forall x. Rep MetadataBLOBPayload x -> MetadataBLOBPayload
forall x. MetadataBLOBPayload -> Rep MetadataBLOBPayload x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep MetadataBLOBPayload x -> MetadataBLOBPayload
$cfrom :: forall x. MetadataBLOBPayload -> Rep MetadataBLOBPayload x
Generic)
  deriving (Value -> Parser [MetadataBLOBPayload]
Value -> Parser MetadataBLOBPayload
(Value -> Parser MetadataBLOBPayload)
-> (Value -> Parser [MetadataBLOBPayload])
-> FromJSON MetadataBLOBPayload
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
parseJSONList :: Value -> Parser [MetadataBLOBPayload]
$cparseJSONList :: Value -> Parser [MetadataBLOBPayload]
parseJSON :: Value -> Parser MetadataBLOBPayload
$cparseJSON :: Value -> Parser MetadataBLOBPayload
Aeson.FromJSON, [MetadataBLOBPayload] -> Encoding
[MetadataBLOBPayload] -> Value
MetadataBLOBPayload -> Encoding
MetadataBLOBPayload -> Value
(MetadataBLOBPayload -> Value)
-> (MetadataBLOBPayload -> Encoding)
-> ([MetadataBLOBPayload] -> Value)
-> ([MetadataBLOBPayload] -> Encoding)
-> ToJSON MetadataBLOBPayload
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
toEncodingList :: [MetadataBLOBPayload] -> Encoding
$ctoEncodingList :: [MetadataBLOBPayload] -> Encoding
toJSONList :: [MetadataBLOBPayload] -> Value
$ctoJSONList :: [MetadataBLOBPayload] -> Value
toEncoding :: MetadataBLOBPayload -> Encoding
$ctoEncoding :: MetadataBLOBPayload -> Encoding
toJSON :: MetadataBLOBPayload -> Value
$ctoJSON :: MetadataBLOBPayload -> Value
Aeson.ToJSON) via JSONEncoding MetadataBLOBPayload