module Ouroboros.Network.Handshake.Acceptable
  ( Accept (..)
  , Acceptable (..)
  ) where


import Data.Text

-- | A @'Maybe'@ like type which better explains its purpose.
--
data Accept versionData
  = Accept versionData
  | Refuse !Text
  deriving (Accept versionData -> Accept versionData -> Bool
(Accept versionData -> Accept versionData -> Bool)
-> (Accept versionData -> Accept versionData -> Bool)
-> Eq (Accept versionData)
forall versionData.
Eq versionData =>
Accept versionData -> Accept versionData -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall versionData.
Eq versionData =>
Accept versionData -> Accept versionData -> Bool
== :: Accept versionData -> Accept versionData -> Bool
$c/= :: forall versionData.
Eq versionData =>
Accept versionData -> Accept versionData -> Bool
/= :: Accept versionData -> Accept versionData -> Bool
Eq, Int -> Accept versionData -> ShowS
[Accept versionData] -> ShowS
Accept versionData -> String
(Int -> Accept versionData -> ShowS)
-> (Accept versionData -> String)
-> ([Accept versionData] -> ShowS)
-> Show (Accept versionData)
forall versionData.
Show versionData =>
Int -> Accept versionData -> ShowS
forall versionData.
Show versionData =>
[Accept versionData] -> ShowS
forall versionData.
Show versionData =>
Accept versionData -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall versionData.
Show versionData =>
Int -> Accept versionData -> ShowS
showsPrec :: Int -> Accept versionData -> ShowS
$cshow :: forall versionData.
Show versionData =>
Accept versionData -> String
show :: Accept versionData -> String
$cshowList :: forall versionData.
Show versionData =>
[Accept versionData] -> ShowS
showList :: [Accept versionData] -> ShowS
Show)


class Acceptable versionData where
  -- | The 'acceptableVersion' function ought to be symmetric, this guarantees
  -- that local and remote sides will agree on the same data.
  acceptableVersion :: versionData -> versionData -> Accept versionData