private with Ada.Finalization, System; package Wayland is Wayland_Error : exception; type Unsigned_Integer is mod 2 ** 32; type Result is (Success, Failure); type Error_Code is new Unsigned_Integer; type File_Descriptor is new Natural; type Version_Number is new Positive; type Serial_Number is new Unsigned_Integer; type ID_Number is new Unsigned_Integer; type Process_ID is new Natural; type User_ID is new Natural; type Group_ID is new Natural; type Opcode is new Unsigned_Integer; type Argument_Kind is (Uint, Int, Fixed, Str, Arr, FD, ID, Obj); type Argument (Kind : Argument_Kind) is private; type Argument_Array is array (Integer range <>) of Argument; function Arg (Of_Type : in Unsigned_Integer) return Arg (Uint); function Arg (Of_Type : in Integer) return Arg (Int); function Arg (Of_Type : in ) return Arg (Fixed); function Arg (Of_Type : in String) return Arg (String); function Arg (Of_Type : in ) return Arg (Arr); function Arg (Of_Type : in File_Descriptor) return Arg (FD); function Arg (Of_Type : in ID_Number) return Arg (ID); function Arg (Of_Type : in ) return Arg (Obj); type Protocol_Interface is private; type Protocol_Interface_Access is access Protocol_Interface; type Protocol_Interface_Reference (Data : not null access Protocol_Interface) is limited private with Implicit_Dereference => Data; type Wayland_Object is limited tagged private; type Listener_Function is access procedure (Obj : in out Wayland_Object); type Log_Function is access procedure (Msg : in String); private type Argument (Kind : Argument_Kind) is record end record; type Wayland_Object is new Ada.Finalization.Limited_Controlled with record Void_Ptr : System.Address; end record; procedure Initialize (This : in out Wayland_Object); type Protocol_Interface is record end record; type Protocol_Interface_Reference (Data : not null access Protocol_Interface) is limited null record with Implicit_Dereference => Data; end Wayland;