func (i *Importer) ImportToplevel(handle string) (*Imported, error) {
	id := NewImported(i.Context())
	const opcode = 1
	handleLen := client.PaddedLen(len(handle) + 1)
	rLen := 8 + 4 + (4 + handleLen)
	r := make([]byte, rLen)
	l := 0
	client.PutUint32(r[l:4], i.ID())
	l += 4
	client.PutUint32(r[l:l+4], uint32(rLen<<16|opcode&0x0000ffff))
	l += 4
	client.PutUint32(r[l:l+4], id.ID())
	l += 4
	client.PutString(r[l:l+(4+handleLen)], handle, handleLen)
	l += (4 + handleLen)
	err := i.Context().WriteMsg(r, nil)
	return id, err
}
ImportToplevel : import a toplevel surface

The import_toplevel request imports a surface from any client given a handle
retrieved by exporting said surface using xdg_exporter.export_toplevel.
When called, a new xdg_imported object will be created. This new object
represents the imported surface, and the importing client can
manipulate its relationship using it. See xdg_imported for details.

handle: the exported surface handle
package xdg_foreign
import (
	"reflect"
	"github.com/rajveermalviya/go-wayland/wayland/client"
)
type Exporter struct {
	client.BaseProxy
}
func NewExporter(ctx *client.Context) *Exporter {
	zxdgExporterV2 := &Exporter{}
	ctx.Register(zxdgExporterV2)
	return zxdgExporterV2
}
func (i *Exporter) Destroy() error {
	defer i.Context().Unregister(i)
	const opcode = 0
	const rLen = 8
	r := make([]byte, rLen)
	l := 0
	client.PutUint32(r[l:4], i.ID())
	l += 4
	client.PutUint32(r[l:l+4], uint32(rLen<<16|opcode&0x0000ffff))
	l += 4
	err := i.Context().WriteMsg(r, nil)
	return err
}
func (i *Exporter) ExportToplevel(surface *client.Surface) (*Exported, error) {
	id := NewExported(i.Context())
	const opcode = 1
	const rLen = 8 + 4 + 4
	r := make([]byte, rLen)
	l := 0
	client.PutUint32(r[l:4], i.ID())
	l += 4
	client.PutUint32(r[l:l+4], uint32(rLen<<16|opcode&0x0000ffff))
	l += 4
	client.PutUint32(r[l:l+4], id.ID())
	l += 4
	client.PutUint32(r[l:l+4], surface.ID())
	l += 4
	err := i.Context().WriteMsg(r, nil)
	return id, err
}
type ExporterError uint32
const (
	ExporterErrorInvalidSurface ExporterError = 0
)
func (e ExporterError) Name() string {
	switch e {
	case ExporterErrorInvalidSurface:
		return "invalid_surface"
	default:
		return ""
	}
}
func (e ExporterError) Value() string {
	switch e {
	case ExporterErrorInvalidSurface:
		return "0"
	default:
		return ""
	}
}
func (e ExporterError) String() string {
	return e.Name() + "=" + e.Value()
}
type Importer struct {
	client.BaseProxy
}
func NewImporter(ctx *client.Context) *Importer {
	zxdgImporterV2 := &Importer{}
	ctx.Register(zxdgImporterV2)
	return zxdgImporterV2
}
func (i *Importer) Destroy() error {
	defer i.Context().Unregister(i)
	const opcode = 0
	const rLen = 8
	r := make([]byte, rLen)
	l := 0
	client.PutUint32(r[l:4], i.ID())
	l += 4
	client.PutUint32(r[l:l+4], uint32(rLen<<16|opcode&0x0000ffff))
	l += 4
	err := i.Context().WriteMsg(r, nil)
	return err
}