module Wire.API.CannonId where

import Data.Aeson
import Data.OpenApi
import Data.Proxy
import Imports
import Web.HttpApiData

newtype CannonId = CannonId
  { CannonId -> Text
cannonId :: Text
  }
  deriving (CannonId -> CannonId -> Bool
(CannonId -> CannonId -> Bool)
-> (CannonId -> CannonId -> Bool) -> Eq CannonId
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: CannonId -> CannonId -> Bool
== :: CannonId -> CannonId -> Bool
$c/= :: CannonId -> CannonId -> Bool
/= :: CannonId -> CannonId -> Bool
Eq, Eq CannonId
Eq CannonId =>
(CannonId -> CannonId -> Ordering)
-> (CannonId -> CannonId -> Bool)
-> (CannonId -> CannonId -> Bool)
-> (CannonId -> CannonId -> Bool)
-> (CannonId -> CannonId -> Bool)
-> (CannonId -> CannonId -> CannonId)
-> (CannonId -> CannonId -> CannonId)
-> Ord CannonId
CannonId -> CannonId -> Bool
CannonId -> CannonId -> Ordering
CannonId -> CannonId -> CannonId
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
$ccompare :: CannonId -> CannonId -> Ordering
compare :: CannonId -> CannonId -> Ordering
$c< :: CannonId -> CannonId -> Bool
< :: CannonId -> CannonId -> Bool
$c<= :: CannonId -> CannonId -> Bool
<= :: CannonId -> CannonId -> Bool
$c> :: CannonId -> CannonId -> Bool
> :: CannonId -> CannonId -> Bool
$c>= :: CannonId -> CannonId -> Bool
>= :: CannonId -> CannonId -> Bool
$cmax :: CannonId -> CannonId -> CannonId
max :: CannonId -> CannonId -> CannonId
$cmin :: CannonId -> CannonId -> CannonId
min :: CannonId -> CannonId -> CannonId
Ord, Int -> CannonId -> ShowS
[CannonId] -> ShowS
CannonId -> String
(Int -> CannonId -> ShowS)
-> (CannonId -> String) -> ([CannonId] -> ShowS) -> Show CannonId
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> CannonId -> ShowS
showsPrec :: Int -> CannonId -> ShowS
$cshow :: CannonId -> String
show :: CannonId -> String
$cshowList :: [CannonId] -> ShowS
showList :: [CannonId] -> ShowS
Show, Value -> Parser [CannonId]
Value -> Parser CannonId
(Value -> Parser CannonId)
-> (Value -> Parser [CannonId]) -> FromJSON CannonId
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
$cparseJSON :: Value -> Parser CannonId
parseJSON :: Value -> Parser CannonId
$cparseJSONList :: Value -> Parser [CannonId]
parseJSONList :: Value -> Parser [CannonId]
FromJSON, [CannonId] -> Value
[CannonId] -> Encoding
CannonId -> Value
CannonId -> Encoding
(CannonId -> Value)
-> (CannonId -> Encoding)
-> ([CannonId] -> Value)
-> ([CannonId] -> Encoding)
-> ToJSON CannonId
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
$ctoJSON :: CannonId -> Value
toJSON :: CannonId -> Value
$ctoEncoding :: CannonId -> Encoding
toEncoding :: CannonId -> Encoding
$ctoJSONList :: [CannonId] -> Value
toJSONList :: [CannonId] -> Value
$ctoEncodingList :: [CannonId] -> Encoding
toEncodingList :: [CannonId] -> Encoding
ToJSON)

instance ToParamSchema CannonId where
  toParamSchema :: Proxy CannonId -> Schema
toParamSchema Proxy CannonId
_ = Proxy Text -> Schema
forall a. ToParamSchema a => Proxy a -> Schema
toParamSchema (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @Text)

instance FromHttpApiData CannonId where
  parseUrlPiece :: Text -> Either Text CannonId
parseUrlPiece = CannonId -> Either Text CannonId
forall a. a -> Either Text a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CannonId -> Either Text CannonId)
-> (Text -> CannonId) -> Text -> Either Text CannonId
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> CannonId
CannonId