module Network.GRPC.Spec.CustomMetadata.NoMetadata (
    NoMetadata(..)
  ) where

import Control.Monad.Catch
import Data.Default

import Network.GRPC.Spec.CustomMetadata.Typed

-- | Indicate the absence of custom metadata
--
-- NOTE: The 'ParseMetadata' instance for 'NoMetadata' throws an exception if
-- any metadata is present (that is, metadata is /not/ silently ignored).
data NoMetadata = NoMetadata
  deriving stock (Int -> NoMetadata -> ShowS
[NoMetadata] -> ShowS
NoMetadata -> String
(Int -> NoMetadata -> ShowS)
-> (NoMetadata -> String)
-> ([NoMetadata] -> ShowS)
-> Show NoMetadata
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> NoMetadata -> ShowS
showsPrec :: Int -> NoMetadata -> ShowS
$cshow :: NoMetadata -> String
show :: NoMetadata -> String
$cshowList :: [NoMetadata] -> ShowS
showList :: [NoMetadata] -> ShowS
Show, NoMetadata -> NoMetadata -> Bool
(NoMetadata -> NoMetadata -> Bool)
-> (NoMetadata -> NoMetadata -> Bool) -> Eq NoMetadata
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: NoMetadata -> NoMetadata -> Bool
== :: NoMetadata -> NoMetadata -> Bool
$c/= :: NoMetadata -> NoMetadata -> Bool
/= :: NoMetadata -> NoMetadata -> Bool
Eq)

instance Default NoMetadata where
  def :: NoMetadata
def = NoMetadata
NoMetadata

instance BuildMetadata NoMetadata where
  buildMetadata :: NoMetadata -> [CustomMetadata]
buildMetadata NoMetadata
NoMetadata = []

instance ParseMetadata NoMetadata where
  parseMetadata :: forall (m :: * -> *).
MonadThrow m =>
[CustomMetadata] -> m NoMetadata
parseMetadata []   = NoMetadata -> m NoMetadata
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return NoMetadata
NoMetadata
  parseMetadata [CustomMetadata]
hdrs = UnexpectedMetadata -> m NoMetadata
forall e a. (HasCallStack, Exception e) => e -> m a
forall (m :: * -> *) e a.
(MonadThrow m, HasCallStack, Exception e) =>
e -> m a
throwM (UnexpectedMetadata -> m NoMetadata)
-> UnexpectedMetadata -> m NoMetadata
forall a b. (a -> b) -> a -> b
$ [CustomMetadata] -> UnexpectedMetadata
UnexpectedMetadata [CustomMetadata]
hdrs

instance StaticMetadata NoMetadata where
  metadataHeaderNames :: Proxy NoMetadata -> [HeaderName]
metadataHeaderNames Proxy NoMetadata
_ = []