module Network.IPFS.Gateway.Types (Gateway (..)) where

import           Network.IPFS.Prelude
import           Data.Swagger (ToSchema (..))

-- | Type safety wrapper for IPFS Gateway
--   Used as cname value for DNS updates
newtype Gateway = Gateway { Gateway -> Text
getGateway :: Text }
  deriving          ( Gateway -> Gateway -> Bool
(Gateway -> Gateway -> Bool)
-> (Gateway -> Gateway -> Bool) -> Eq Gateway
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Gateway -> Gateway -> Bool
$c/= :: Gateway -> Gateway -> Bool
== :: Gateway -> Gateway -> Bool
$c== :: Gateway -> Gateway -> Bool
Eq
                    , (forall x. Gateway -> Rep Gateway x)
-> (forall x. Rep Gateway x -> Gateway) -> Generic Gateway
forall x. Rep Gateway x -> Gateway
forall x. Gateway -> Rep Gateway x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Gateway x -> Gateway
$cfrom :: forall x. Gateway -> Rep Gateway x
Generic
                    , Int -> Gateway -> ShowS
[Gateway] -> ShowS
Gateway -> String
(Int -> Gateway -> ShowS)
-> (Gateway -> String) -> ([Gateway] -> ShowS) -> Show Gateway
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Gateway] -> ShowS
$cshowList :: [Gateway] -> ShowS
show :: Gateway -> String
$cshow :: Gateway -> String
showsPrec :: Int -> Gateway -> ShowS
$cshowsPrec :: Int -> Gateway -> ShowS
Show
                    )
  deriving anyclass ( Proxy Gateway -> Declare (Definitions Schema) NamedSchema
(Proxy Gateway -> Declare (Definitions Schema) NamedSchema)
-> ToSchema Gateway
forall a.
(Proxy a -> Declare (Definitions Schema) NamedSchema) -> ToSchema a
declareNamedSchema :: Proxy Gateway -> Declare (Definitions Schema) NamedSchema
$cdeclareNamedSchema :: Proxy Gateway -> Declare (Definitions Schema) NamedSchema
ToSchema )
  deriving newtype  ( String -> Gateway
(String -> Gateway) -> IsString Gateway
forall a. (String -> a) -> IsString a
fromString :: String -> Gateway
$cfromString :: String -> Gateway
IsString )

instance FromJSON Gateway where
  parseJSON :: Value -> Parser Gateway
parseJSON = String -> (Text -> Parser Gateway) -> Value -> Parser Gateway
forall a. String -> (Text -> Parser a) -> Value -> Parser a
withText String
"AWS.Gateway" \Text
txt ->
    Text -> Gateway
Gateway (Text -> Gateway) -> Parser Text -> Parser Gateway
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser Text
forall a. FromJSON a => Value -> Parser a
parseJSON (Text -> Value
String Text
txt)