module Graphics.Wayland.Scanner.Types where
import Foreign
import Language.Haskell.TH (Name)
data ServerClient = Server | Client  deriving (Eq)
type InterfaceName = String
data Interface = Interface {
  interfaceName :: InterfaceName,
  interfaceVersion :: Int,
  interfaceRequests :: [Message], 
  interfaceEvents :: [Message],
  interfaceEnums :: [WLEnum]
  } deriving (Show)
type EnumName = String
data WLEnum = WLEnum {
  enumName :: EnumName,
  enumEntries :: [(String,Int)]
  } deriving (Show)
data ArgumentType = IntArg | UIntArg | FixedArg | StringArg | ObjectArg Name | NewIdArg Name MessageName | ArrayArg | FdArg deriving (Show)
argConversionTable :: [(String, ArgumentType)] 
argConversionTable = [
  ("int", IntArg),
  ("uint", UIntArg),
  ("fixed", FixedArg),
  ("string", StringArg),
  ("fd", FdArg),
  ("array", ArrayArg)]
type Argument = (String, ArgumentType, Bool) 
type MessageName = String
data Message = Message {
  messageName :: MessageName,
  messageArguments :: [Argument],
  messageIsDestructor :: Bool
  } deriving (Show)
type ProtocolName = String
data ProtocolSpec = ProtocolSpec {
  protocolName :: ProtocolName,
  protocolInterfaces :: [Interface]
  } deriving (Show)
type WLArray = Ptr (())