-- |Types for RPC protocol and procedure.

{-# LANGUAGE RecordWildCards #-}
module Network.ONCRPC.Types
  ( XID
  , ProgNum
  , VersNum
  , ProcNum
  , Procedure(..)
  ) where

import           Data.Word (Word32)

type XID = Word32
type ProgNum = Word32
type VersNum = Word32
type ProcNum = Word32

-- |Description of a specific procedure, parameterized by argument and result types.
data Procedure a r = Procedure
  { forall a r. Procedure a r -> ProgNum
procedureProg :: !ProgNum
  , forall a r. Procedure a r -> ProgNum
procedureVers :: !VersNum
  , forall a r. Procedure a r -> ProgNum
procedureProc :: !ProcNum
  }
  deriving (Procedure a r -> Procedure a r -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall a r. Procedure a r -> Procedure a r -> Bool
/= :: Procedure a r -> Procedure a r -> Bool
$c/= :: forall a r. Procedure a r -> Procedure a r -> Bool
== :: Procedure a r -> Procedure a r -> Bool
$c== :: forall a r. Procedure a r -> Procedure a r -> Bool
Eq, Int -> Procedure a r -> ShowS
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall a r. Int -> Procedure a r -> ShowS
forall a r. [Procedure a r] -> ShowS
forall a r. Procedure a r -> String
showList :: [Procedure a r] -> ShowS
$cshowList :: forall a r. [Procedure a r] -> ShowS
show :: Procedure a r -> String
$cshow :: forall a r. Procedure a r -> String
showsPrec :: Int -> Procedure a r -> ShowS
$cshowsPrec :: forall a r. Int -> Procedure a r -> ShowS
Show)