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

import           RIO

import           Control.Lens
import           Data.Aeson
import           Data.Swagger
import           Servant.API

import qualified Network.IPFS.Internal.UTF8 as UTF8

newtype Peer = Peer { Peer -> Text
peer :: Text }
  deriving          ( Peer -> Peer -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Peer -> Peer -> Bool
$c/= :: Peer -> Peer -> Bool
== :: Peer -> Peer -> Bool
$c== :: Peer -> Peer -> Bool
Eq
                    , Int -> Peer -> ShowS
[Peer] -> ShowS
Peer -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Peer] -> ShowS
$cshowList :: [Peer] -> ShowS
show :: Peer -> String
$cshow :: Peer -> String
showsPrec :: Int -> Peer -> ShowS
$cshowsPrec :: Int -> Peer -> ShowS
Show
                    )
  deriving newtype  ( Peer -> Text
Peer -> Utf8Builder
forall a. (a -> Utf8Builder) -> (a -> Text) -> Display a
textDisplay :: Peer -> Text
$ctextDisplay :: Peer -> Text
display :: Peer -> Utf8Builder
$cdisplay :: Peer -> Utf8Builder
Display
                    , String -> Peer
forall a. (String -> a) -> IsString a
fromString :: String -> Peer
$cfromString :: String -> Peer
IsString
                    , Value -> Parser [Peer]
Value -> Parser Peer
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
parseJSONList :: Value -> Parser [Peer]
$cparseJSONList :: Value -> Parser [Peer]
parseJSON :: Value -> Parser Peer
$cparseJSON :: Value -> Parser Peer
FromJSON
                    )

instance ToJSON Peer where
  toJSON :: Peer -> Value
toJSON = Text -> Value
String forall b c a. (b -> c) -> (a -> b) -> a -> c
. Peer -> Text
peer

instance ToSchema Peer where
  declareNamedSchema :: Proxy Peer -> Declare (Definitions Schema) NamedSchema
declareNamedSchema Proxy Peer
_ =
     forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ Maybe Text -> Schema -> NamedSchema
NamedSchema (forall a. a -> Maybe a
Just Text
"IPFSPeer") forall a b. (a -> b) -> a -> b
$ forall a. Monoid a => a
mempty
            forall a b. a -> (a -> b) -> b
& forall s a. HasType s a => Lens' s a
type_       forall s t a b. ASetter s t a (Maybe b) -> b -> s -> t
?~ forall (t :: SwaggerKind (*)). SwaggerType t
SwaggerString
            forall a b. a -> (a -> b) -> b
& forall s a. HasExample s a => Lens' s a
example     forall s t a b. ASetter s t a (Maybe b) -> b -> s -> t
?~ Value
"/ip4/178.62.158.247/tcp/4001/ipfs/QmSoLer265NRgSp2LA3dPaeykiS1J6DifTC88f5uVQKNAd"
            forall a b. a -> (a -> b) -> b
& forall s a. HasDescription s a => Lens' s a
description forall s t a b. ASetter s t a (Maybe b) -> b -> s -> t
?~ Text
"An IPFS peer address"

instance MimeRender PlainText Peer where
  mimeRender :: Proxy PlainText -> Peer -> ByteString
mimeRender Proxy PlainText
_ = Text -> ByteString
UTF8.textToLazyBS forall b c a. (b -> c) -> (a -> b) -> a -> c
. Peer -> Text
peer

instance MimeRender OctetStream Peer where
  mimeRender :: Proxy OctetStream -> Peer -> ByteString
mimeRender Proxy OctetStream
_ = Text -> ByteString
UTF8.textToLazyBS forall b c a. (b -> c) -> (a -> b) -> a -> c
. Peer -> Text
peer