module Network.N2O.Protocols.Types where

import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as L
import qualified Data.Map.Strict as M

-- | Top level sum of protocols

data N2OProto a
  = N2ONitro (Nitro a)
  | N2OClient (Client a)
  | Io L.ByteString
       L.ByteString
  | Nop
  deriving (Show)

-- | Client protocol message type

data Client a
  = Cli a
  | Srv a
  deriving (Show)

-- | Nitro protocol message type

data Nitro a
  = Init L.ByteString
  | Pickle { pickleSource :: L.ByteString
           , picklePickled :: L.ByteString
           , pickleLinked :: M.Map BS.ByteString L.ByteString }
  | Done
  deriving (Show)