module TD.Query.AddLoginPasskey
  (AddLoginPasskey(..)
  , defaultAddLoginPasskey
  ) where

import qualified Data.Aeson as A
import qualified Data.Aeson.Types as AT
import qualified TD.Lib.Internal as I
import qualified Data.Text as T
import qualified Data.ByteString as BS

-- | Adds a passkey allowed to be used for the login by the current user and returns the added passkey. Call getPasskeyParameters to get parameters for creating of the passkey. Returns 'TD.Data.Passkey.Passkey'
data AddLoginPasskey
  = AddLoginPasskey
    { AddLoginPasskey -> Maybe Text
client_data        :: Maybe T.Text        -- ^ JSON-encoded client data
    , AddLoginPasskey -> Maybe ByteString
attestation_object :: Maybe BS.ByteString -- ^ Passkey attestation object
    }
  deriving (AddLoginPasskey -> AddLoginPasskey -> Bool
(AddLoginPasskey -> AddLoginPasskey -> Bool)
-> (AddLoginPasskey -> AddLoginPasskey -> Bool)
-> Eq AddLoginPasskey
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: AddLoginPasskey -> AddLoginPasskey -> Bool
== :: AddLoginPasskey -> AddLoginPasskey -> Bool
$c/= :: AddLoginPasskey -> AddLoginPasskey -> Bool
/= :: AddLoginPasskey -> AddLoginPasskey -> Bool
Eq, Int -> AddLoginPasskey -> ShowS
[AddLoginPasskey] -> ShowS
AddLoginPasskey -> String
(Int -> AddLoginPasskey -> ShowS)
-> (AddLoginPasskey -> String)
-> ([AddLoginPasskey] -> ShowS)
-> Show AddLoginPasskey
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> AddLoginPasskey -> ShowS
showsPrec :: Int -> AddLoginPasskey -> ShowS
$cshow :: AddLoginPasskey -> String
show :: AddLoginPasskey -> String
$cshowList :: [AddLoginPasskey] -> ShowS
showList :: [AddLoginPasskey] -> ShowS
Show)

instance I.ShortShow AddLoginPasskey where
  shortShow :: AddLoginPasskey -> String
shortShow
    AddLoginPasskey
      { client_data :: AddLoginPasskey -> Maybe Text
client_data        = Maybe Text
client_data_
      , attestation_object :: AddLoginPasskey -> Maybe ByteString
attestation_object = Maybe ByteString
attestation_object_
      }
        = String
"AddLoginPasskey"
          String -> ShowS
forall a. [a] -> [a] -> [a]
++ [String] -> String
I.cc
          [ String
"client_data"        String -> Maybe Text -> String
forall a. ShortShow a => String -> Maybe a -> String
`I.p` Maybe Text
client_data_
          , String
"attestation_object" String -> Maybe ByteString -> String
forall a. ShortShow a => String -> Maybe a -> String
`I.p` Maybe ByteString
attestation_object_
          ]

instance AT.ToJSON AddLoginPasskey where
  toJSON :: AddLoginPasskey -> Value
toJSON
    AddLoginPasskey
      { client_data :: AddLoginPasskey -> Maybe Text
client_data        = Maybe Text
client_data_
      , attestation_object :: AddLoginPasskey -> Maybe ByteString
attestation_object = Maybe ByteString
attestation_object_
      }
        = [Pair] -> Value
A.object
          [ Key
"@type"              Key -> Value -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
A..= Text -> Value
AT.String Text
"addLoginPasskey"
          , Key
"client_data"        Key -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
A..= Maybe Text
client_data_
          , Key
"attestation_object" Key -> Maybe Value -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
A..= (ByteString -> Value) -> Maybe ByteString -> Maybe Value
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ByteString -> Value
I.writeBytes  Maybe ByteString
attestation_object_
          ]

defaultAddLoginPasskey :: AddLoginPasskey
defaultAddLoginPasskey :: AddLoginPasskey
defaultAddLoginPasskey =
  AddLoginPasskey
    { client_data :: Maybe Text
client_data        = Maybe Text
forall a. Maybe a
Nothing
    , attestation_object :: Maybe ByteString
attestation_object = Maybe ByteString
forall a. Maybe a
Nothing
    }