// Autogenerated Go message buffer code.
// Source: clad/gateway/messageRobotToExternal.clad
// Full command line: victor-clad/tools/message-buffers/emitters/Go_emitter.py -C src -o generated/cladgo/src clad/gateway/messageRobotToExternal.clad

package gateway

import (
  "bytes"
  "encoding/binary"
  "errors"
  "anki/clad"
  "fmt"
)

// MESSAGE UiDeviceConnected
type UiDeviceConnected struct {
  Placeholder string
}

func (u *UiDeviceConnected) Size() uint32 {
  var result uint32
  result += 1 // Placeholder length (uint_8)
  result += uint32(len(u.Placeholder)) // uint_8 array
  return result
}

func (u *UiDeviceConnected) Unpack(buf *bytes.Buffer) error {
  var PlaceholderLen uint8
  if err := binary.Read(buf, binary.LittleEndian, &PlaceholderLen); err != nil {
    return err
  }
  u.Placeholder = string(buf.Next(int(PlaceholderLen)))
  if len(u.Placeholder) != int(PlaceholderLen) {
    return errors.New("string byte mismatch")
  }
  return nil
}

func (u *UiDeviceConnected) Pack(buf *bytes.Buffer) error {
  if len(u.Placeholder) > 255 {
    return errors.New("max_length overflow in field Placeholder")
  }
  if err := binary.Write(buf, binary.LittleEndian, uint8(len(u.Placeholder))); err != nil {
    return err
  }
  if _, err := buf.WriteString(u.Placeholder); err != nil {
    return err
  }
  return nil
}

func (u *UiDeviceConnected) String() string {
  return fmt.Sprint("Placeholder: {", u.Placeholder, "}")
}


// STRUCTURE AnimationCompleted
type AnimationCompleted struct {
  AnimationName string
}

func (a *AnimationCompleted) Size() uint32 {
  var result uint32
  result += 1 // AnimationName length (uint_8)
  result += uint32(len(a.AnimationName)) // uint_8 array
  return result
}

func (a *AnimationCompleted) Unpack(buf *bytes.Buffer) error {
  var AnimationNameLen uint8
  if err := binary.Read(buf, binary.LittleEndian, &AnimationNameLen); err != nil {
    return err
  }
  a.AnimationName = string(buf.Next(int(AnimationNameLen)))
  if len(a.AnimationName) != int(AnimationNameLen) {
    return errors.New("string byte mismatch")
  }
  return nil
}

func (a *AnimationCompleted) Pack(buf *bytes.Buffer) error {
  if len(a.AnimationName) > 255 {
    return errors.New("max_length overflow in field AnimationName")
  }
  if err := binary.Write(buf, binary.LittleEndian, uint8(len(a.AnimationName))); err != nil {
    return err
  }
  if _, err := buf.WriteString(a.AnimationName); err != nil {
    return err
  }
  return nil
}

func (a *AnimationCompleted) String() string {
  return fmt.Sprint("AnimationName: {", a.AnimationName, "}")
}


// UNION ActionCompletedUnion
type ActionCompletedUnionTag uint8

const (
  ActionCompletedUnionTag_AnimationCompleted ActionCompletedUnionTag = 0x1 // 1
  ActionCompletedUnionTag_INVALID            ActionCompletedUnionTag = 255
)

type ActionCompletedUnion struct {
  tag *ActionCompletedUnionTag
  value clad.Struct
}

func (m *ActionCompletedUnion) Tag() ActionCompletedUnionTag {
  if m.tag == nil {
    return ActionCompletedUnionTag_INVALID
  }
  return *m.tag
}

func (m *ActionCompletedUnion) Size() uint32 {
  if m.tag == nil || *m.tag == ActionCompletedUnionTag_INVALID {
    return 1
  }
  return 1 + m.value.Size()
}

func (m *ActionCompletedUnion) Pack(buf *bytes.Buffer) error {
  tag := ActionCompletedUnionTag_INVALID
  if m.tag != nil {
    tag = *m.tag
  }
  if err := binary.Write(buf, binary.LittleEndian, tag); err != nil {
    return err
  }
  if tag == ActionCompletedUnionTag_INVALID {
    return nil
  }
  return m.value.Pack(buf)
}

func (m *ActionCompletedUnion) unpackStruct(tag ActionCompletedUnionTag, buf *bytes.Buffer) (clad.Struct, error) {
  switch tag {
  case ActionCompletedUnionTag_AnimationCompleted:
    var ret AnimationCompleted
    if err := ret.Unpack(buf); err != nil {
      return nil, err
    }
    return &ret, nil
  default:
    return nil, errors.New("invalid tag to unpackStruct")
  }
}

func (m *ActionCompletedUnion) Unpack(buf *bytes.Buffer) error {
  tag := ActionCompletedUnionTag_INVALID
  if err := binary.Read(buf, binary.LittleEndian, &tag); err != nil {
    return err
  }
  m.tag = &tag
  if tag == ActionCompletedUnionTag_INVALID {
    m.value = nil
    return nil
  }
  val, err := m.unpackStruct(tag, buf)
  if err != nil {
    *m.tag = ActionCompletedUnionTag_INVALID
    return err
  }
  m.value = val
  return nil
}

func (t ActionCompletedUnionTag) String() string {
  switch t {
  case ActionCompletedUnionTag_AnimationCompleted:
    return "AnimationCompleted"
  default:
    return "INVALID"
  }
}

func (m *ActionCompletedUnion) String() string {
  if m.tag == nil {
    return "nil"
  }
  if *m.tag == ActionCompletedUnionTag_INVALID {
    return "INVALID"
  }
  return fmt.Sprintf("%s: {%s}", *m.tag, m.value)
}

func (m *ActionCompletedUnion) GetAnimationCompleted() *AnimationCompleted {
  if m.tag == nil || *m.tag != ActionCompletedUnionTag_AnimationCompleted {
    return nil
  }
  return m.value.(*AnimationCompleted)
}

func (m *ActionCompletedUnion) SetAnimationCompleted(value *AnimationCompleted) {
  newTag := ActionCompletedUnionTag_AnimationCompleted
  m.tag = &newTag
  m.value = value
}

func NewActionCompletedUnionWithAnimationCompleted(value *AnimationCompleted) *ActionCompletedUnion {
  var ret ActionCompletedUnion
  ret.SetAnimationCompleted(value)
  return &ret
}


// ENUM RobotActionType
type RobotActionType int32

const (
  RobotActionType_UNKNOWN RobotActionType = RobotActionType(-1)
)

// ENUM ActionResult
type ActionResult uint32

const (
  ActionResult_SUCCESS ActionResult = ActionResult(0)                       
  ActionResult_RUNNING ActionResult = ActionResult(16777216)                
  ActionResult_CANCELLED_WHILE_RUNNING ActionResult = ActionResult(33554432)
)

// ENUM ObjectFamily
type ObjectFamily int32

const (
  ObjectFamily_Invalid ObjectFamily = ObjectFamily(-1)    
  ObjectFamily_Unknown ObjectFamily = ObjectFamily(0)     
  ObjectFamily_Block ObjectFamily = ObjectFamily(1)       
  ObjectFamily_LightCube ObjectFamily = ObjectFamily(2)   
  ObjectFamily_Charger ObjectFamily = ObjectFamily(3)     
  ObjectFamily_CustomObject ObjectFamily = ObjectFamily(6)
)

// STRUCTURE ActiveAccel
type ActiveAccel struct {
  X float32
  Y float32
  Z float32
}

func (a *ActiveAccel) Size() uint32 {
  var result uint32
  result += 4 // X float_32
  result += 4 // Y float_32
  result += 4 // Z float_32
  return result
}

func (a *ActiveAccel) Unpack(buf *bytes.Buffer) error {
  if err := binary.Read(buf, binary.LittleEndian, &a.X); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &a.Y); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &a.Z); err != nil {
    return err
  }
  return nil
}

func (a *ActiveAccel) Pack(buf *bytes.Buffer) error {
  if err := binary.Write(buf, binary.LittleEndian, a.X); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, a.Y); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, a.Z); err != nil {
    return err
  }
  return nil
}

func (a *ActiveAccel) String() string {
  return fmt.Sprint("X: {", a.X, "} ",
    "Y: {", a.Y, "} ",
    "Z: {", a.Z, "}")
}


// ENUM UpAxis
type UpAxis uint8

const (
  UpAxis_XNegative UpAxis = iota
  UpAxis_XPositive              
  UpAxis_YNegative              
  UpAxis_YPositive              
  UpAxis_ZNegative              
  UpAxis_ZPositive              
  UpAxis_NumAxes                
  UpAxis_UnknownAxis            
)

// MESSAGE ObjectConnectionState
type ObjectConnectionState struct {
  ObjectID uint32
  FactoryID string
  ObjectType ObjectType
  Connected bool
}

func (o *ObjectConnectionState) Size() uint32 {
  var result uint32
  result += 4 // ObjectID uint_32
  result += 1 // FactoryID length (uint_8)
  result += uint32(len(o.FactoryID)) // uint_8 array
  result += 4 // ObjectType ObjectType
  result += 1 // Connected bool
  return result
}

func (o *ObjectConnectionState) Unpack(buf *bytes.Buffer) error {
  if err := binary.Read(buf, binary.LittleEndian, &o.ObjectID); err != nil {
    return err
  }
  var FactoryIDLen uint8
  if err := binary.Read(buf, binary.LittleEndian, &FactoryIDLen); err != nil {
    return err
  }
  o.FactoryID = string(buf.Next(int(FactoryIDLen)))
  if len(o.FactoryID) != int(FactoryIDLen) {
    return errors.New("string byte mismatch")
  }
  if err := binary.Read(buf, binary.LittleEndian, &o.ObjectType); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &o.Connected); err != nil {
    return err
  }
  return nil
}

func (o *ObjectConnectionState) Pack(buf *bytes.Buffer) error {
  if err := binary.Write(buf, binary.LittleEndian, o.ObjectID); err != nil {
    return err
  }
  if len(o.FactoryID) > 255 {
    return errors.New("max_length overflow in field FactoryID")
  }
  if err := binary.Write(buf, binary.LittleEndian, uint8(len(o.FactoryID))); err != nil {
    return err
  }
  if _, err := buf.WriteString(o.FactoryID); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, o.ObjectType); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, o.Connected); err != nil {
    return err
  }
  return nil
}

func (o *ObjectConnectionState) String() string {
  return fmt.Sprint("ObjectID: {", o.ObjectID, "} ",
    "FactoryID: {", o.FactoryID, "} ",
    "ObjectType: {", o.ObjectType, "} ",
    "Connected: {", o.Connected, "}")
}


// MESSAGE ObjectMoved
type ObjectMoved struct {
  Timestamp uint32
  ObjectID uint32
}

func (o *ObjectMoved) Size() uint32 {
  var result uint32
  result += 4 // Timestamp uint_32
  result += 4 // ObjectID uint_32
  return result
}

func (o *ObjectMoved) Unpack(buf *bytes.Buffer) error {
  if err := binary.Read(buf, binary.LittleEndian, &o.Timestamp); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &o.ObjectID); err != nil {
    return err
  }
  return nil
}

func (o *ObjectMoved) Pack(buf *bytes.Buffer) error {
  if err := binary.Write(buf, binary.LittleEndian, o.Timestamp); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, o.ObjectID); err != nil {
    return err
  }
  return nil
}

func (o *ObjectMoved) String() string {
  return fmt.Sprint("Timestamp: {", o.Timestamp, "} ",
    "ObjectID: {", o.ObjectID, "}")
}


// MESSAGE ObjectAvailable
type ObjectAvailable struct {
  FactoryId string
  ObjectType ObjectType
  Rssi int8
}

func (o *ObjectAvailable) Size() uint32 {
  var result uint32
  result += 1 // FactoryId length (uint_8)
  result += uint32(len(o.FactoryId)) // uint_8 array
  result += 4 // ObjectType ObjectType
  result += 1 // Rssi int_8
  return result
}

func (o *ObjectAvailable) Unpack(buf *bytes.Buffer) error {
  var FactoryIdLen uint8
  if err := binary.Read(buf, binary.LittleEndian, &FactoryIdLen); err != nil {
    return err
  }
  o.FactoryId = string(buf.Next(int(FactoryIdLen)))
  if len(o.FactoryId) != int(FactoryIdLen) {
    return errors.New("string byte mismatch")
  }
  if err := binary.Read(buf, binary.LittleEndian, &o.ObjectType); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &o.Rssi); err != nil {
    return err
  }
  return nil
}

func (o *ObjectAvailable) Pack(buf *bytes.Buffer) error {
  if len(o.FactoryId) > 255 {
    return errors.New("max_length overflow in field FactoryId")
  }
  if err := binary.Write(buf, binary.LittleEndian, uint8(len(o.FactoryId))); err != nil {
    return err
  }
  if _, err := buf.WriteString(o.FactoryId); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, o.ObjectType); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, o.Rssi); err != nil {
    return err
  }
  return nil
}

func (o *ObjectAvailable) String() string {
  return fmt.Sprint("FactoryId: {", o.FactoryId, "} ",
    "ObjectType: {", o.ObjectType, "} ",
    "Rssi: {", o.Rssi, "}")
}


// MESSAGE ObjectStoppedMoving
type ObjectStoppedMoving struct {
  Timestamp uint32
  ObjectID uint32
}

func (o *ObjectStoppedMoving) Size() uint32 {
  var result uint32
  result += 4 // Timestamp uint_32
  result += 4 // ObjectID uint_32
  return result
}

func (o *ObjectStoppedMoving) Unpack(buf *bytes.Buffer) error {
  if err := binary.Read(buf, binary.LittleEndian, &o.Timestamp); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &o.ObjectID); err != nil {
    return err
  }
  return nil
}

func (o *ObjectStoppedMoving) Pack(buf *bytes.Buffer) error {
  if err := binary.Write(buf, binary.LittleEndian, o.Timestamp); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, o.ObjectID); err != nil {
    return err
  }
  return nil
}

func (o *ObjectStoppedMoving) String() string {
  return fmt.Sprint("Timestamp: {", o.Timestamp, "} ",
    "ObjectID: {", o.ObjectID, "}")
}


// MESSAGE ObjectUpAxisChanged
type ObjectUpAxisChanged struct {
  Timestamp uint32
  ObjectID uint32
  UpAxis UpAxis
}

func (o *ObjectUpAxisChanged) Size() uint32 {
  var result uint32
  result += 4 // Timestamp uint_32
  result += 4 // ObjectID uint_32
  result += 1 // UpAxis UpAxis
  return result
}

func (o *ObjectUpAxisChanged) Unpack(buf *bytes.Buffer) error {
  if err := binary.Read(buf, binary.LittleEndian, &o.Timestamp); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &o.ObjectID); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &o.UpAxis); err != nil {
    return err
  }
  return nil
}

func (o *ObjectUpAxisChanged) Pack(buf *bytes.Buffer) error {
  if err := binary.Write(buf, binary.LittleEndian, o.Timestamp); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, o.ObjectID); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, o.UpAxis); err != nil {
    return err
  }
  return nil
}

func (o *ObjectUpAxisChanged) String() string {
  return fmt.Sprint("Timestamp: {", o.Timestamp, "} ",
    "ObjectID: {", o.ObjectID, "} ",
    "UpAxis: {", o.UpAxis, "}")
}


// MESSAGE ObjectTapped
type ObjectTapped struct {
  Timestamp uint32
  ObjectID uint32
}

func (o *ObjectTapped) Size() uint32 {
  var result uint32
  result += 4 // Timestamp uint_32
  result += 4 // ObjectID uint_32
  return result
}

func (o *ObjectTapped) Unpack(buf *bytes.Buffer) error {
  if err := binary.Read(buf, binary.LittleEndian, &o.Timestamp); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &o.ObjectID); err != nil {
    return err
  }
  return nil
}

func (o *ObjectTapped) Pack(buf *bytes.Buffer) error {
  if err := binary.Write(buf, binary.LittleEndian, o.Timestamp); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, o.ObjectID); err != nil {
    return err
  }
  return nil
}

func (o *ObjectTapped) String() string {
  return fmt.Sprint("Timestamp: {", o.Timestamp, "} ",
    "ObjectID: {", o.ObjectID, "}")
}


// MESSAGE ObjectAccel
type ObjectAccel struct {
  Timestamp uint32
  ObjectID uint32
  Accel ActiveAccel
}

func (o *ObjectAccel) Size() uint32 {
  var result uint32
  result += 4 // Timestamp uint_32
  result += 4 // ObjectID uint_32
  result += o.Accel.Size()
  return result
}

func (o *ObjectAccel) Unpack(buf *bytes.Buffer) error {
  if err := binary.Read(buf, binary.LittleEndian, &o.Timestamp); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &o.ObjectID); err != nil {
    return err
  }
  if err := o.Accel.Unpack(buf); err != nil {
    return err
  }
  return nil
}

func (o *ObjectAccel) Pack(buf *bytes.Buffer) error {
  if err := binary.Write(buf, binary.LittleEndian, o.Timestamp); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, o.ObjectID); err != nil {
    return err
  }
  if err := o.Accel.Pack(buf); err != nil {
    return err
  }
  return nil
}

func (o *ObjectAccel) String() string {
  return fmt.Sprint("Timestamp: {", o.Timestamp, "} ",
    "ObjectID: {", o.ObjectID, "} ",
    "Accel: {", o.Accel, "}")
}


// MESSAGE RobotCompletedAction
type RobotCompletedAction struct {
  IdTag uint32
  ActionType RobotActionType
  Result ActionResult
  SubActionResults []ActionResult
  CompletionInfo ActionCompletedUnion
}

func (r *RobotCompletedAction) Size() uint32 {
  var result uint32
  result += 4 // IdTag uint_32
  result += 4 // ActionType RobotActionType
  result += 4 // Result ActionResult
  result += 1 // SubActionResults length (uint_8)
  result += uint32(len(r.SubActionResults)) * 4 // ActionResult array
  result += r.CompletionInfo.Size()
  return result
}

func (r *RobotCompletedAction) Unpack(buf *bytes.Buffer) error {
  if err := binary.Read(buf, binary.LittleEndian, &r.IdTag); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &r.ActionType); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &r.Result); err != nil {
    return err
  }
  var SubActionResultsLen uint8
  if err := binary.Read(buf, binary.LittleEndian, &SubActionResultsLen); err != nil {
    return err
  }
  r.SubActionResults = make([]ActionResult, SubActionResultsLen)
  if err := binary.Read(buf, binary.LittleEndian, &r.SubActionResults); err != nil {
    return err
  }
  if err := r.CompletionInfo.Unpack(buf); err != nil {
    return err
  }
  return nil
}

func (r *RobotCompletedAction) Pack(buf *bytes.Buffer) error {
  if err := binary.Write(buf, binary.LittleEndian, r.IdTag); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, r.ActionType); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, r.Result); err != nil {
    return err
  }
  if len(r.SubActionResults) > 255 {
    return errors.New("max_length overflow in field SubActionResults")
  }
  if err := binary.Write(buf, binary.LittleEndian, uint8(len(r.SubActionResults))); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, r.SubActionResults); err != nil {
    return err
  }
  if err := r.CompletionInfo.Pack(buf); err != nil {
    return err
  }
  return nil
}

func (r *RobotCompletedAction) String() string {
  return fmt.Sprint("IdTag: {", r.IdTag, "} ",
    "ActionType: {", r.ActionType, "} ",
    "Result: {", r.Result, "} ",
    "SubActionResults: {", r.SubActionResults, "} ",
    "CompletionInfo: {", r.CompletionInfo, "}")
}


// MESSAGE LoadedKnownFace
type LoadedKnownFace struct {
  SecondsSinceFirstEnrolled int64
  SecondsSinceLastUpdated int64
  SecondsSinceLastSeen int64
  LastSeenSecondsSinceEpoch int64
  FaceID int32
  Name string
}

func (l *LoadedKnownFace) Size() uint32 {
  var result uint32
  result += 8 // SecondsSinceFirstEnrolled int_64
  result += 8 // SecondsSinceLastUpdated int_64
  result += 8 // SecondsSinceLastSeen int_64
  result += 8 // LastSeenSecondsSinceEpoch int_64
  result += 4 // FaceID int_32
  result += 1 // Name length (uint_8)
  result += uint32(len(l.Name)) // uint_8 array
  return result
}

func (l *LoadedKnownFace) Unpack(buf *bytes.Buffer) error {
  if err := binary.Read(buf, binary.LittleEndian, &l.SecondsSinceFirstEnrolled); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &l.SecondsSinceLastUpdated); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &l.SecondsSinceLastSeen); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &l.LastSeenSecondsSinceEpoch); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &l.FaceID); err != nil {
    return err
  }
  var NameLen uint8
  if err := binary.Read(buf, binary.LittleEndian, &NameLen); err != nil {
    return err
  }
  l.Name = string(buf.Next(int(NameLen)))
  if len(l.Name) != int(NameLen) {
    return errors.New("string byte mismatch")
  }
  return nil
}

func (l *LoadedKnownFace) Pack(buf *bytes.Buffer) error {
  if err := binary.Write(buf, binary.LittleEndian, l.SecondsSinceFirstEnrolled); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, l.SecondsSinceLastUpdated); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, l.SecondsSinceLastSeen); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, l.LastSeenSecondsSinceEpoch); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, l.FaceID); err != nil {
    return err
  }
  if len(l.Name) > 255 {
    return errors.New("max_length overflow in field Name")
  }
  if err := binary.Write(buf, binary.LittleEndian, uint8(len(l.Name))); err != nil {
    return err
  }
  if _, err := buf.WriteString(l.Name); err != nil {
    return err
  }
  return nil
}

func (l *LoadedKnownFace) String() string {
  return fmt.Sprint("SecondsSinceFirstEnrolled: {", l.SecondsSinceFirstEnrolled, "} ",
    "SecondsSinceLastUpdated: {", l.SecondsSinceLastUpdated, "} ",
    "SecondsSinceLastSeen: {", l.SecondsSinceLastSeen, "} ",
    "LastSeenSecondsSinceEpoch: {", l.LastSeenSecondsSinceEpoch, "} ",
    "FaceID: {", l.FaceID, "} ",
    "Name: {", l.Name, "}")
}


// MESSAGE EnrolledNamesResponse
type EnrolledNamesResponse struct {
  Faces []LoadedKnownFace
}

func (e *EnrolledNamesResponse) Size() uint32 {
  var result uint32
  result += 1 // Faces length (uint_8)
  for idx := range e.Faces {
    result += e.Faces[idx].Size()
  }
  return result
}

func (e *EnrolledNamesResponse) Unpack(buf *bytes.Buffer) error {
  var FacesLen uint8
  if err := binary.Read(buf, binary.LittleEndian, &FacesLen); err != nil {
    return err
  }
  e.Faces = make([]LoadedKnownFace, FacesLen)
  for idx := range e.Faces {
    if err := e.Faces[idx].Unpack(buf); err != nil {
      return err
    }
  }
  return nil
}

func (e *EnrolledNamesResponse) Pack(buf *bytes.Buffer) error {
  if len(e.Faces) > 255 {
    return errors.New("max_length overflow in field Faces")
  }
  if err := binary.Write(buf, binary.LittleEndian, uint8(len(e.Faces))); err != nil {
    return err
  }
  for idx := range e.Faces {
    if err := e.Faces[idx].Pack(buf); err != nil {
      return err
    }
  }
  return nil
}

func (e *EnrolledNamesResponse) String() string {
  return fmt.Sprint("Faces: {", e.Faces, "}")
}


// STRUCTURE AccelData
type AccelData struct {
  X float32
  Y float32
  Z float32
}

func (a *AccelData) Size() uint32 {
  var result uint32
  result += 4 // X float_32
  result += 4 // Y float_32
  result += 4 // Z float_32
  return result
}

func (a *AccelData) Unpack(buf *bytes.Buffer) error {
  if err := binary.Read(buf, binary.LittleEndian, &a.X); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &a.Y); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &a.Z); err != nil {
    return err
  }
  return nil
}

func (a *AccelData) Pack(buf *bytes.Buffer) error {
  if err := binary.Write(buf, binary.LittleEndian, a.X); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, a.Y); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, a.Z); err != nil {
    return err
  }
  return nil
}

func (a *AccelData) String() string {
  return fmt.Sprint("X: {", a.X, "} ",
    "Y: {", a.Y, "} ",
    "Z: {", a.Z, "}")
}


// STRUCTURE GyroData
type GyroData struct {
  X float32
  Y float32
  Z float32
}

func (g *GyroData) Size() uint32 {
  var result uint32
  result += 4 // X float_32
  result += 4 // Y float_32
  result += 4 // Z float_32
  return result
}

func (g *GyroData) Unpack(buf *bytes.Buffer) error {
  if err := binary.Read(buf, binary.LittleEndian, &g.X); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &g.Y); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &g.Z); err != nil {
    return err
  }
  return nil
}

func (g *GyroData) Pack(buf *bytes.Buffer) error {
  if err := binary.Write(buf, binary.LittleEndian, g.X); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, g.Y); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, g.Z); err != nil {
    return err
  }
  return nil
}

func (g *GyroData) String() string {
  return fmt.Sprint("X: {", g.X, "} ",
    "Y: {", g.Y, "} ",
    "Z: {", g.Z, "}")
}


// STRUCTURE CladPoint2d
type CladPoint2d struct {
  X float32
  Y float32
}

func (c *CladPoint2d) Size() uint32 {
  var result uint32
  result += 4 // X float_32
  result += 4 // Y float_32
  return result
}

func (c *CladPoint2d) Unpack(buf *bytes.Buffer) error {
  if err := binary.Read(buf, binary.LittleEndian, &c.X); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &c.Y); err != nil {
    return err
  }
  return nil
}

func (c *CladPoint2d) Pack(buf *bytes.Buffer) error {
  if err := binary.Write(buf, binary.LittleEndian, c.X); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, c.Y); err != nil {
    return err
  }
  return nil
}

func (c *CladPoint2d) String() string {
  return fmt.Sprint("X: {", c.X, "} ",
    "Y: {", c.Y, "}")
}


// STRUCTURE CladRect
type CladRect struct {
  XTopLeft float32
  YTopLeft float32
  Width float32
  Height float32
}

func (c *CladRect) Size() uint32 {
  var result uint32
  result += 4 // XTopLeft float_32
  result += 4 // YTopLeft float_32
  result += 4 // Width float_32
  result += 4 // Height float_32
  return result
}

func (c *CladRect) Unpack(buf *bytes.Buffer) error {
  if err := binary.Read(buf, binary.LittleEndian, &c.XTopLeft); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &c.YTopLeft); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &c.Width); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &c.Height); err != nil {
    return err
  }
  return nil
}

func (c *CladRect) Pack(buf *bytes.Buffer) error {
  if err := binary.Write(buf, binary.LittleEndian, c.XTopLeft); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, c.YTopLeft); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, c.Width); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, c.Height); err != nil {
    return err
  }
  return nil
}

func (c *CladRect) String() string {
  return fmt.Sprint("XTopLeft: {", c.XTopLeft, "} ",
    "YTopLeft: {", c.YTopLeft, "} ",
    "Width: {", c.Width, "} ",
    "Height: {", c.Height, "}")
}


// ENUM FacialExpression
type FacialExpression int8

const (
  FacialExpression_Unknown FacialExpression = FacialExpression(-1)           
  FacialExpression_Neutral FacialExpression = FacialExpression(0)            
  FacialExpression_Happiness FacialExpression = FacialExpression_Neutral + 1 
  FacialExpression_Surprise FacialExpression = FacialExpression_Happiness + 1
  FacialExpression_Anger FacialExpression = FacialExpression_Surprise + 1    
  FacialExpression_Sadness FacialExpression = FacialExpression_Anger + 1     
  FacialExpression_Count FacialExpression = FacialExpression_Sadness + 1     
)

// STRUCTURE SmileAmount
type SmileAmount struct {
  WasChecked bool
  Amount float32
  Confidence float32
}

func (s *SmileAmount) Size() uint32 {
  var result uint32
  result += 1 // WasChecked bool
  result += 4 // Amount float_32
  result += 4 // Confidence float_32
  return result
}

func (s *SmileAmount) Unpack(buf *bytes.Buffer) error {
  if err := binary.Read(buf, binary.LittleEndian, &s.WasChecked); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &s.Amount); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &s.Confidence); err != nil {
    return err
  }
  return nil
}

func (s *SmileAmount) Pack(buf *bytes.Buffer) error {
  if err := binary.Write(buf, binary.LittleEndian, s.WasChecked); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, s.Amount); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, s.Confidence); err != nil {
    return err
  }
  return nil
}

func (s *SmileAmount) String() string {
  return fmt.Sprint("WasChecked: {", s.WasChecked, "} ",
    "Amount: {", s.Amount, "} ",
    "Confidence: {", s.Confidence, "}")
}


// STRUCTURE Gaze
type Gaze struct {
  WasChecked bool
  LeftRightDeg float32
  UpDownDeg float32
}

func (g *Gaze) Size() uint32 {
  var result uint32
  result += 1 // WasChecked bool
  result += 4 // LeftRightDeg float_32
  result += 4 // UpDownDeg float_32
  return result
}

func (g *Gaze) Unpack(buf *bytes.Buffer) error {
  if err := binary.Read(buf, binary.LittleEndian, &g.WasChecked); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &g.LeftRightDeg); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &g.UpDownDeg); err != nil {
    return err
  }
  return nil
}

func (g *Gaze) Pack(buf *bytes.Buffer) error {
  if err := binary.Write(buf, binary.LittleEndian, g.WasChecked); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, g.LeftRightDeg); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, g.UpDownDeg); err != nil {
    return err
  }
  return nil
}

func (g *Gaze) String() string {
  return fmt.Sprint("WasChecked: {", g.WasChecked, "} ",
    "LeftRightDeg: {", g.LeftRightDeg, "} ",
    "UpDownDeg: {", g.UpDownDeg, "}")
}


// STRUCTURE BlinkAmount
type BlinkAmount struct {
  WasChecked bool
  BlinkAmountLeft float32
  BlinkAmountRight float32
}

func (b *BlinkAmount) Size() uint32 {
  var result uint32
  result += 1 // WasChecked bool
  result += 4 // BlinkAmountLeft float_32
  result += 4 // BlinkAmountRight float_32
  return result
}

func (b *BlinkAmount) Unpack(buf *bytes.Buffer) error {
  if err := binary.Read(buf, binary.LittleEndian, &b.WasChecked); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &b.BlinkAmountLeft); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &b.BlinkAmountRight); err != nil {
    return err
  }
  return nil
}

func (b *BlinkAmount) Pack(buf *bytes.Buffer) error {
  if err := binary.Write(buf, binary.LittleEndian, b.WasChecked); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, b.BlinkAmountLeft); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, b.BlinkAmountRight); err != nil {
    return err
  }
  return nil
}

func (b *BlinkAmount) String() string {
  return fmt.Sprint("WasChecked: {", b.WasChecked, "} ",
    "BlinkAmountLeft: {", b.BlinkAmountLeft, "} ",
    "BlinkAmountRight: {", b.BlinkAmountRight, "}")
}


// MESSAGE RobotObservedObject
type RobotObservedObject struct {
  Timestamp uint32
  ObjectFamily ObjectFamily
  ObjectType ObjectType
  ObjectID int32
  ImgRect CladRect
  Pose PoseStruct3d
  TopFaceOrientationRad float32
  IsActive uint8
}

func (r *RobotObservedObject) Size() uint32 {
  var result uint32
  result += 4 // Timestamp uint_32
  result += 4 // ObjectFamily ObjectFamily
  result += 4 // ObjectType ObjectType
  result += 4 // ObjectID int_32
  result += r.ImgRect.Size()
  result += r.Pose.Size()
  result += 4 // TopFaceOrientationRad float_32
  result += 1 // IsActive uint_8
  return result
}

func (r *RobotObservedObject) Unpack(buf *bytes.Buffer) error {
  if err := binary.Read(buf, binary.LittleEndian, &r.Timestamp); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &r.ObjectFamily); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &r.ObjectType); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &r.ObjectID); err != nil {
    return err
  }
  if err := r.ImgRect.Unpack(buf); err != nil {
    return err
  }
  if err := r.Pose.Unpack(buf); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &r.TopFaceOrientationRad); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &r.IsActive); err != nil {
    return err
  }
  return nil
}

func (r *RobotObservedObject) Pack(buf *bytes.Buffer) error {
  if err := binary.Write(buf, binary.LittleEndian, r.Timestamp); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, r.ObjectFamily); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, r.ObjectType); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, r.ObjectID); err != nil {
    return err
  }
  if err := r.ImgRect.Pack(buf); err != nil {
    return err
  }
  if err := r.Pose.Pack(buf); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, r.TopFaceOrientationRad); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, r.IsActive); err != nil {
    return err
  }
  return nil
}

func (r *RobotObservedObject) String() string {
  return fmt.Sprint("Timestamp: {", r.Timestamp, "} ",
    "ObjectFamily: {", r.ObjectFamily, "} ",
    "ObjectType: {", r.ObjectType, "} ",
    "ObjectID: {", r.ObjectID, "} ",
    "ImgRect: {", r.ImgRect, "} ",
    "Pose: {", r.Pose, "} ",
    "TopFaceOrientationRad: {", r.TopFaceOrientationRad, "} ",
    "IsActive: {", r.IsActive, "}")
}


// MESSAGE RobotObservedPossibleObject
type RobotObservedPossibleObject struct {
  PossibleObject RobotObservedObject
}

func (r *RobotObservedPossibleObject) Size() uint32 {
  var result uint32
  result += r.PossibleObject.Size()
  return result
}

func (r *RobotObservedPossibleObject) Unpack(buf *bytes.Buffer) error {
  if err := r.PossibleObject.Unpack(buf); err != nil {
    return err
  }
  return nil
}

func (r *RobotObservedPossibleObject) Pack(buf *bytes.Buffer) error {
  if err := r.PossibleObject.Pack(buf); err != nil {
    return err
  }
  return nil
}

func (r *RobotObservedPossibleObject) String() string {
  return fmt.Sprint("PossibleObject: {", r.PossibleObject, "}")
}


// MESSAGE RobotObservedFace
type RobotObservedFace struct {
  FaceID int32
  Timestamp uint32
  Pose PoseStruct3d
  ImgRect CladRect
  Name string
  Expression FacialExpression
  SmileAmount SmileAmount
  Gaze Gaze
  BlinkAmount BlinkAmount
  ExpressionValues []uint8
  LeftEye []CladPoint2d
  RightEye []CladPoint2d
  Nose []CladPoint2d
  Mouth []CladPoint2d
}

func (r *RobotObservedFace) Size() uint32 {
  var result uint32
  result += 4 // FaceID int_32
  result += 4 // Timestamp uint_32
  result += r.Pose.Size()
  result += r.ImgRect.Size()
  result += 1 // Name length (uint_8)
  result += uint32(len(r.Name)) // uint_8 array
  result += 1 // Expression FacialExpression
  result += r.SmileAmount.Size()
  result += r.Gaze.Size()
  result += r.BlinkAmount.Size()
  result += 1 // ExpressionValues length (uint_8)
  result += uint32(len(r.ExpressionValues)) // uint_8 array
  result += 1 // LeftEye length (uint_8)
  result += uint32(len(r.LeftEye)) * 8 // CladPoint2d array
  result += 1 // RightEye length (uint_8)
  result += uint32(len(r.RightEye)) * 8 // CladPoint2d array
  result += 1 // Nose length (uint_8)
  result += uint32(len(r.Nose)) * 8 // CladPoint2d array
  result += 1 // Mouth length (uint_8)
  result += uint32(len(r.Mouth)) * 8 // CladPoint2d array
  return result
}

func (r *RobotObservedFace) Unpack(buf *bytes.Buffer) error {
  if err := binary.Read(buf, binary.LittleEndian, &r.FaceID); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &r.Timestamp); err != nil {
    return err
  }
  if err := r.Pose.Unpack(buf); err != nil {
    return err
  }
  if err := r.ImgRect.Unpack(buf); err != nil {
    return err
  }
  var NameLen uint8
  if err := binary.Read(buf, binary.LittleEndian, &NameLen); err != nil {
    return err
  }
  r.Name = string(buf.Next(int(NameLen)))
  if len(r.Name) != int(NameLen) {
    return errors.New("string byte mismatch")
  }
  if err := binary.Read(buf, binary.LittleEndian, &r.Expression); err != nil {
    return err
  }
  if err := r.SmileAmount.Unpack(buf); err != nil {
    return err
  }
  if err := r.Gaze.Unpack(buf); err != nil {
    return err
  }
  if err := r.BlinkAmount.Unpack(buf); err != nil {
    return err
  }
  var ExpressionValuesLen uint8
  if err := binary.Read(buf, binary.LittleEndian, &ExpressionValuesLen); err != nil {
    return err
  }
  r.ExpressionValues = make([]uint8, ExpressionValuesLen)
  if err := binary.Read(buf, binary.LittleEndian, &r.ExpressionValues); err != nil {
    return err
  }
  var LeftEyeLen uint8
  if err := binary.Read(buf, binary.LittleEndian, &LeftEyeLen); err != nil {
    return err
  }
  r.LeftEye = make([]CladPoint2d, LeftEyeLen)
  if err := binary.Read(buf, binary.LittleEndian, &r.LeftEye); err != nil {
    return err
  }
  var RightEyeLen uint8
  if err := binary.Read(buf, binary.LittleEndian, &RightEyeLen); err != nil {
    return err
  }
  r.RightEye = make([]CladPoint2d, RightEyeLen)
  if err := binary.Read(buf, binary.LittleEndian, &r.RightEye); err != nil {
    return err
  }
  var NoseLen uint8
  if err := binary.Read(buf, binary.LittleEndian, &NoseLen); err != nil {
    return err
  }
  r.Nose = make([]CladPoint2d, NoseLen)
  if err := binary.Read(buf, binary.LittleEndian, &r.Nose); err != nil {
    return err
  }
  var MouthLen uint8
  if err := binary.Read(buf, binary.LittleEndian, &MouthLen); err != nil {
    return err
  }
  r.Mouth = make([]CladPoint2d, MouthLen)
  if err := binary.Read(buf, binary.LittleEndian, &r.Mouth); err != nil {
    return err
  }
  return nil
}

func (r *RobotObservedFace) Pack(buf *bytes.Buffer) error {
  if err := binary.Write(buf, binary.LittleEndian, r.FaceID); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, r.Timestamp); err != nil {
    return err
  }
  if err := r.Pose.Pack(buf); err != nil {
    return err
  }
  if err := r.ImgRect.Pack(buf); err != nil {
    return err
  }
  if len(r.Name) > 255 {
    return errors.New("max_length overflow in field Name")
  }
  if err := binary.Write(buf, binary.LittleEndian, uint8(len(r.Name))); err != nil {
    return err
  }
  if _, err := buf.WriteString(r.Name); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, r.Expression); err != nil {
    return err
  }
  if err := r.SmileAmount.Pack(buf); err != nil {
    return err
  }
  if err := r.Gaze.Pack(buf); err != nil {
    return err
  }
  if err := r.BlinkAmount.Pack(buf); err != nil {
    return err
  }
  if len(r.ExpressionValues) > 255 {
    return errors.New("max_length overflow in field ExpressionValues")
  }
  if err := binary.Write(buf, binary.LittleEndian, uint8(len(r.ExpressionValues))); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, r.ExpressionValues); err != nil {
    return err
  }
  if len(r.LeftEye) > 255 {
    return errors.New("max_length overflow in field LeftEye")
  }
  if err := binary.Write(buf, binary.LittleEndian, uint8(len(r.LeftEye))); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, r.LeftEye); err != nil {
    return err
  }
  if len(r.RightEye) > 255 {
    return errors.New("max_length overflow in field RightEye")
  }
  if err := binary.Write(buf, binary.LittleEndian, uint8(len(r.RightEye))); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, r.RightEye); err != nil {
    return err
  }
  if len(r.Nose) > 255 {
    return errors.New("max_length overflow in field Nose")
  }
  if err := binary.Write(buf, binary.LittleEndian, uint8(len(r.Nose))); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, r.Nose); err != nil {
    return err
  }
  if len(r.Mouth) > 255 {
    return errors.New("max_length overflow in field Mouth")
  }
  if err := binary.Write(buf, binary.LittleEndian, uint8(len(r.Mouth))); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, r.Mouth); err != nil {
    return err
  }
  return nil
}

func (r *RobotObservedFace) String() string {
  return fmt.Sprint("FaceID: {", r.FaceID, "} ",
    "Timestamp: {", r.Timestamp, "} ",
    "Pose: {", r.Pose, "} ",
    "ImgRect: {", r.ImgRect, "} ",
    "Name: {", r.Name, "} ",
    "Expression: {", r.Expression, "} ",
    "SmileAmount: {", r.SmileAmount, "} ",
    "Gaze: {", r.Gaze, "} ",
    "BlinkAmount: {", r.BlinkAmount, "} ",
    "ExpressionValues: {", r.ExpressionValues, "} ",
    "LeftEye: {", r.LeftEye, "} ",
    "RightEye: {", r.RightEye, "} ",
    "Nose: {", r.Nose, "} ",
    "Mouth: {", r.Mouth, "}")
}


// MESSAGE RobotChangedObservedFaceID
type RobotChangedObservedFaceID struct {
  OldID int32
  NewID int32
}

func (r *RobotChangedObservedFaceID) Size() uint32 {
  var result uint32
  result += 4 // OldID int_32
  result += 4 // NewID int_32
  return result
}

func (r *RobotChangedObservedFaceID) Unpack(buf *bytes.Buffer) error {
  if err := binary.Read(buf, binary.LittleEndian, &r.OldID); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &r.NewID); err != nil {
    return err
  }
  return nil
}

func (r *RobotChangedObservedFaceID) Pack(buf *bytes.Buffer) error {
  if err := binary.Write(buf, binary.LittleEndian, r.OldID); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, r.NewID); err != nil {
    return err
  }
  return nil
}

func (r *RobotChangedObservedFaceID) String() string {
  return fmt.Sprint("OldID: {", r.OldID, "} ",
    "NewID: {", r.NewID, "}")
}


// MESSAGE RequiredEmptyMessage
type RequiredEmptyMessage struct {
}

func (r *RequiredEmptyMessage) Size() uint32 {
  return 0
}

func (r *RequiredEmptyMessage) Unpack(buf *bytes.Buffer) error {
  return nil
}

func (r *RequiredEmptyMessage) Pack(buf *bytes.Buffer) error {
  return nil
}

func (r *RequiredEmptyMessage) String() string {
  return ""
}


// UNION Event
type EventTag uint8

const (
  EventTag_ReplaceMe EventTag = iota // 0
  EventTag_INVALID   EventTag = 255
)

type Event struct {
  tag *EventTag
  value clad.Struct
}

func (m *Event) Tag() EventTag {
  if m.tag == nil {
    return EventTag_INVALID
  }
  return *m.tag
}

func (m *Event) Size() uint32 {
  if m.tag == nil || *m.tag == EventTag_INVALID {
    return 1
  }
  return 1 + m.value.Size()
}

func (m *Event) Pack(buf *bytes.Buffer) error {
  tag := EventTag_INVALID
  if m.tag != nil {
    tag = *m.tag
  }
  if err := binary.Write(buf, binary.LittleEndian, tag); err != nil {
    return err
  }
  if tag == EventTag_INVALID {
    return nil
  }
  return m.value.Pack(buf)
}

func (m *Event) unpackStruct(tag EventTag, buf *bytes.Buffer) (clad.Struct, error) {
  switch tag {
  case EventTag_ReplaceMe:
    var ret RequiredEmptyMessage
    if err := ret.Unpack(buf); err != nil {
      return nil, err
    }
    return &ret, nil
  default:
    return nil, errors.New("invalid tag to unpackStruct")
  }
}

func (m *Event) Unpack(buf *bytes.Buffer) error {
  tag := EventTag_INVALID
  if err := binary.Read(buf, binary.LittleEndian, &tag); err != nil {
    return err
  }
  m.tag = &tag
  if tag == EventTag_INVALID {
    m.value = nil
    return nil
  }
  val, err := m.unpackStruct(tag, buf)
  if err != nil {
    *m.tag = EventTag_INVALID
    return err
  }
  m.value = val
  return nil
}

func (t EventTag) String() string {
  switch t {
  case EventTag_ReplaceMe:
    return "ReplaceMe"
  default:
    return "INVALID"
  }
}

func (m *Event) String() string {
  if m.tag == nil {
    return "nil"
  }
  if *m.tag == EventTag_INVALID {
    return "INVALID"
  }
  return fmt.Sprintf("%s: {%s}", *m.tag, m.value)
}

func (m *Event) GetReplaceMe() *RequiredEmptyMessage {
  if m.tag == nil || *m.tag != EventTag_ReplaceMe {
    return nil
  }
  return m.value.(*RequiredEmptyMessage)
}

func (m *Event) SetReplaceMe(value *RequiredEmptyMessage) {
  newTag := EventTag_ReplaceMe
  m.tag = &newTag
  m.value = value
}

func NewEventWithReplaceMe(value *RequiredEmptyMessage) *Event {
  var ret Event
  ret.SetReplaceMe(value)
  return &ret
}


// MESSAGE RobotDeletedFixedCustomObjects
type RobotDeletedFixedCustomObjects struct {
}

func (r *RobotDeletedFixedCustomObjects) Size() uint32 {
  return 0
}

func (r *RobotDeletedFixedCustomObjects) Unpack(buf *bytes.Buffer) error {
  return nil
}

func (r *RobotDeletedFixedCustomObjects) Pack(buf *bytes.Buffer) error {
  return nil
}

func (r *RobotDeletedFixedCustomObjects) String() string {
  return ""
}


// MESSAGE RobotDeletedCustomMarkerObjects
type RobotDeletedCustomMarkerObjects struct {
}

func (r *RobotDeletedCustomMarkerObjects) Size() uint32 {
  return 0
}

func (r *RobotDeletedCustomMarkerObjects) Unpack(buf *bytes.Buffer) error {
  return nil
}

func (r *RobotDeletedCustomMarkerObjects) Pack(buf *bytes.Buffer) error {
  return nil
}

func (r *RobotDeletedCustomMarkerObjects) String() string {
  return ""
}


// MESSAGE CreatedFixedCustomObject
type CreatedFixedCustomObject struct {
  ObjectID uint32
}

func (c *CreatedFixedCustomObject) Size() uint32 {
  var result uint32
  result += 4 // ObjectID uint_32
  return result
}

func (c *CreatedFixedCustomObject) Unpack(buf *bytes.Buffer) error {
  if err := binary.Read(buf, binary.LittleEndian, &c.ObjectID); err != nil {
    return err
  }
  return nil
}

func (c *CreatedFixedCustomObject) Pack(buf *bytes.Buffer) error {
  if err := binary.Write(buf, binary.LittleEndian, c.ObjectID); err != nil {
    return err
  }
  return nil
}

func (c *CreatedFixedCustomObject) String() string {
  return fmt.Sprint("ObjectID: {", c.ObjectID, "}")
}


// MESSAGE DefinedCustomObject
type DefinedCustomObject struct {
  Success bool
}

func (d *DefinedCustomObject) Size() uint32 {
  var result uint32
  result += 1 // Success bool
  return result
}

func (d *DefinedCustomObject) Unpack(buf *bytes.Buffer) error {
  if err := binary.Read(buf, binary.LittleEndian, &d.Success); err != nil {
    return err
  }
  return nil
}

func (d *DefinedCustomObject) Pack(buf *bytes.Buffer) error {
  if err := binary.Write(buf, binary.LittleEndian, d.Success); err != nil {
    return err
  }
  return nil
}

func (d *DefinedCustomObject) String() string {
  return fmt.Sprint("Success: {", d.Success, "}")
}


// ENUM ENodeContentTypeEnum
type ENodeContentTypeEnum uint8

const (
  ENodeContentTypeEnum_Unknown ENodeContentTypeEnum = iota
  ENodeContentTypeEnum_ClearOfObstacle                    
  ENodeContentTypeEnum_ClearOfCliff                       
  ENodeContentTypeEnum_ObstacleCube                       
  ENodeContentTypeEnum_ObstacleProx                       
  ENodeContentTypeEnum_ObstacleProxExplored               
  ENodeContentTypeEnum_ObstacleUnrecognized               
  ENodeContentTypeEnum_Cliff                              
  ENodeContentTypeEnum_InterestingEdge                    
  ENodeContentTypeEnum_NotInterestingEdge                 
)

// STRUCTURE MemoryMapQuadInfo
type MemoryMapQuadInfo struct {
  Content ENodeContentTypeEnum
  Depth uint8
  ColorRGBA uint32
}

func (m *MemoryMapQuadInfo) Size() uint32 {
  var result uint32
  result += 1 // Content ENodeContentTypeEnum
  result += 1 // Depth uint_8
  result += 4 // ColorRGBA uint_32
  return result
}

func (m *MemoryMapQuadInfo) Unpack(buf *bytes.Buffer) error {
  if err := binary.Read(buf, binary.LittleEndian, &m.Content); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &m.Depth); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &m.ColorRGBA); err != nil {
    return err
  }
  return nil
}

func (m *MemoryMapQuadInfo) Pack(buf *bytes.Buffer) error {
  if err := binary.Write(buf, binary.LittleEndian, m.Content); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, m.Depth); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, m.ColorRGBA); err != nil {
    return err
  }
  return nil
}

func (m *MemoryMapQuadInfo) String() string {
  return fmt.Sprint("Content: {", m.Content, "} ",
    "Depth: {", m.Depth, "} ",
    "ColorRGBA: {", m.ColorRGBA, "}")
}


// MESSAGE MemoryMapMessageBegin
type MemoryMapMessageBegin struct {
  OriginId uint32
  RootDepth int32
  RootSizeMm float32
  RootCenterX float32
  RootCenterY float32
}

func (m *MemoryMapMessageBegin) Size() uint32 {
  var result uint32
  result += 4 // OriginId uint_32
  result += 4 // RootDepth int_32
  result += 4 // RootSizeMm float_32
  result += 4 // RootCenterX float_32
  result += 4 // RootCenterY float_32
  return result
}

func (m *MemoryMapMessageBegin) Unpack(buf *bytes.Buffer) error {
  if err := binary.Read(buf, binary.LittleEndian, &m.OriginId); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &m.RootDepth); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &m.RootSizeMm); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &m.RootCenterX); err != nil {
    return err
  }
  if err := binary.Read(buf, binary.LittleEndian, &m.RootCenterY); err != nil {
    return err
  }
  return nil
}

func (m *MemoryMapMessageBegin) Pack(buf *bytes.Buffer) error {
  if err := binary.Write(buf, binary.LittleEndian, m.OriginId); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, m.RootDepth); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, m.RootSizeMm); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, m.RootCenterX); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, m.RootCenterY); err != nil {
    return err
  }
  return nil
}

func (m *MemoryMapMessageBegin) String() string {
  return fmt.Sprint("OriginId: {", m.OriginId, "} ",
    "RootDepth: {", m.RootDepth, "} ",
    "RootSizeMm: {", m.RootSizeMm, "} ",
    "RootCenterX: {", m.RootCenterX, "} ",
    "RootCenterY: {", m.RootCenterY, "}")
}


// MESSAGE MemoryMapMessage
type MemoryMapMessage struct {
  QuadInfos []MemoryMapQuadInfo
}

func (m *MemoryMapMessage) Size() uint32 {
  var result uint32
  result += 2 // QuadInfos length (uint_16)
  result += uint32(len(m.QuadInfos)) * 6 // MemoryMapQuadInfo array
  return result
}

func (m *MemoryMapMessage) Unpack(buf *bytes.Buffer) error {
  var QuadInfosLen uint16
  if err := binary.Read(buf, binary.LittleEndian, &QuadInfosLen); err != nil {
    return err
  }
  m.QuadInfos = make([]MemoryMapQuadInfo, QuadInfosLen)
  if err := binary.Read(buf, binary.LittleEndian, &m.QuadInfos); err != nil {
    return err
  }
  return nil
}

func (m *MemoryMapMessage) Pack(buf *bytes.Buffer) error {
  if len(m.QuadInfos) > 65535 {
    return errors.New("max_length overflow in field QuadInfos")
  }
  if err := binary.Write(buf, binary.LittleEndian, uint16(len(m.QuadInfos))); err != nil {
    return err
  }
  if err := binary.Write(buf, binary.LittleEndian, m.QuadInfos); err != nil {
    return err
  }
  return nil
}

func (m *MemoryMapMessage) String() string {
  return fmt.Sprint("QuadInfos: {", m.QuadInfos, "}")
}


// MESSAGE MemoryMapMessageEnd
type MemoryMapMessageEnd struct {
}

func (m *MemoryMapMessageEnd) Size() uint32 {
  return 0
}

func (m *MemoryMapMessageEnd) Unpack(buf *bytes.Buffer) error {
  return nil
}

func (m *MemoryMapMessageEnd) Pack(buf *bytes.Buffer) error {
  return nil
}

func (m *MemoryMapMessageEnd) String() string {
  return ""
}


// UNION MessageRobotToExternal
type MessageRobotToExternalTag uint8

const (
  MessageRobotToExternalTag_UiDeviceConnected               MessageRobotToExternalTag = 0x0  // 0
  MessageRobotToExternalTag_RobotCompletedAction            MessageRobotToExternalTag = 0x1  // 1
  MessageRobotToExternalTag_Event                           MessageRobotToExternalTag = 0x2  // 2
  MessageRobotToExternalTag_EnrolledNamesResponse           MessageRobotToExternalTag = 0x5  // 5
  MessageRobotToExternalTag_RobotObservedFace               MessageRobotToExternalTag = 0x6  // 6
  MessageRobotToExternalTag_RobotChangedObservedFaceID      MessageRobotToExternalTag = 0x7  // 7
  MessageRobotToExternalTag_ObjectConnectionState           MessageRobotToExternalTag = 0xa  // 10
  MessageRobotToExternalTag_ObjectMoved                     MessageRobotToExternalTag = 0xb  // 11
  MessageRobotToExternalTag_ObjectStoppedMoving             MessageRobotToExternalTag = 0xc  // 12
  MessageRobotToExternalTag_ObjectUpAxisChanged             MessageRobotToExternalTag = 0xd  // 13
  MessageRobotToExternalTag_ObjectTapped                    MessageRobotToExternalTag = 0xe  // 14
  MessageRobotToExternalTag_ObjectAccel                     MessageRobotToExternalTag = 0xf  // 15
  MessageRobotToExternalTag_RobotObservedObject             MessageRobotToExternalTag = 0x10 // 16
  MessageRobotToExternalTag_ObjectAvailable                 MessageRobotToExternalTag = 0x11 // 17
  MessageRobotToExternalTag_RobotDeletedFixedCustomObjects  MessageRobotToExternalTag = 0x12 // 18
  MessageRobotToExternalTag_RobotDeletedCustomMarkerObjects MessageRobotToExternalTag = 0x13 // 19
  MessageRobotToExternalTag_CreatedFixedCustomObject        MessageRobotToExternalTag = 0x14 // 20
  MessageRobotToExternalTag_DefinedCustomObject             MessageRobotToExternalTag = 0x15 // 21
  MessageRobotToExternalTag_MemoryMapMessageBegin           MessageRobotToExternalTag = 0x16 // 22
  MessageRobotToExternalTag_MemoryMapMessage                MessageRobotToExternalTag = 0x17 // 23
  MessageRobotToExternalTag_MemoryMapMessageEnd             MessageRobotToExternalTag = 0x18 // 24
  MessageRobotToExternalTag_INVALID                         MessageRobotToExternalTag = 255
)

type MessageRobotToExternal struct {
  tag *MessageRobotToExternalTag
  value clad.Struct
}

func (m *MessageRobotToExternal) Tag() MessageRobotToExternalTag {
  if m.tag == nil {
    return MessageRobotToExternalTag_INVALID
  }
  return *m.tag
}

func (m *MessageRobotToExternal) Size() uint32 {
  if m.tag == nil || *m.tag == MessageRobotToExternalTag_INVALID {
    return 1
  }
  return 1 + m.value.Size()
}

func (m *MessageRobotToExternal) Pack(buf *bytes.Buffer) error {
  tag := MessageRobotToExternalTag_INVALID
  if m.tag != nil {
    tag = *m.tag
  }
  if err := binary.Write(buf, binary.LittleEndian, tag); err != nil {
    return err
  }
  if tag == MessageRobotToExternalTag_INVALID {
    return nil
  }
  return m.value.Pack(buf)
}

func (m *MessageRobotToExternal) unpackStruct(tag MessageRobotToExternalTag, buf *bytes.Buffer) (clad.Struct, error) {
  switch tag {
  case MessageRobotToExternalTag_UiDeviceConnected:
    var ret UiDeviceConnected
    if err := ret.Unpack(buf); err != nil {
      return nil, err
    }
    return &ret, nil
  case MessageRobotToExternalTag_RobotCompletedAction:
    var ret RobotCompletedAction
    if err := ret.Unpack(buf); err != nil {
      return nil, err
    }
    return &ret, nil
  case MessageRobotToExternalTag_Event:
    var ret Event
    if err := ret.Unpack(buf); err != nil {
      return nil, err
    }
    return &ret, nil
  case MessageRobotToExternalTag_EnrolledNamesResponse:
    var ret EnrolledNamesResponse
    if err := ret.Unpack(buf); err != nil {
      return nil, err
    }
    return &ret, nil
  case MessageRobotToExternalTag_RobotObservedFace:
    var ret RobotObservedFace
    if err := ret.Unpack(buf); err != nil {
      return nil, err
    }
    return &ret, nil
  case MessageRobotToExternalTag_RobotChangedObservedFaceID:
    var ret RobotChangedObservedFaceID
    if err := ret.Unpack(buf); err != nil {
      return nil, err
    }
    return &ret, nil
  case MessageRobotToExternalTag_ObjectConnectionState:
    var ret ObjectConnectionState
    if err := ret.Unpack(buf); err != nil {
      return nil, err
    }
    return &ret, nil
  case MessageRobotToExternalTag_ObjectMoved:
    var ret ObjectMoved
    if err := ret.Unpack(buf); err != nil {
      return nil, err
    }
    return &ret, nil
  case MessageRobotToExternalTag_ObjectStoppedMoving:
    var ret ObjectStoppedMoving
    if err := ret.Unpack(buf); err != nil {
      return nil, err
    }
    return &ret, nil
  case MessageRobotToExternalTag_ObjectUpAxisChanged:
    var ret ObjectUpAxisChanged
    if err := ret.Unpack(buf); err != nil {
      return nil, err
    }
    return &ret, nil
  case MessageRobotToExternalTag_ObjectTapped:
    var ret ObjectTapped
    if err := ret.Unpack(buf); err != nil {
      return nil, err
    }
    return &ret, nil
  case MessageRobotToExternalTag_ObjectAccel:
    var ret ObjectAccel
    if err := ret.Unpack(buf); err != nil {
      return nil, err
    }
    return &ret, nil
  case MessageRobotToExternalTag_RobotObservedObject:
    var ret RobotObservedObject
    if err := ret.Unpack(buf); err != nil {
      return nil, err
    }
    return &ret, nil
  case MessageRobotToExternalTag_ObjectAvailable:
    var ret ObjectAvailable
    if err := ret.Unpack(buf); err != nil {
      return nil, err
    }
    return &ret, nil
  case MessageRobotToExternalTag_RobotDeletedFixedCustomObjects:
    var ret RobotDeletedFixedCustomObjects
    if err := ret.Unpack(buf); err != nil {
      return nil, err
    }
    return &ret, nil
  case MessageRobotToExternalTag_RobotDeletedCustomMarkerObjects:
    var ret RobotDeletedCustomMarkerObjects
    if err := ret.Unpack(buf); err != nil {
      return nil, err
    }
    return &ret, nil
  case MessageRobotToExternalTag_CreatedFixedCustomObject:
    var ret CreatedFixedCustomObject
    if err := ret.Unpack(buf); err != nil {
      return nil, err
    }
    return &ret, nil
  case MessageRobotToExternalTag_DefinedCustomObject:
    var ret DefinedCustomObject
    if err := ret.Unpack(buf); err != nil {
      return nil, err
    }
    return &ret, nil
  case MessageRobotToExternalTag_MemoryMapMessageBegin:
    var ret MemoryMapMessageBegin
    if err := ret.Unpack(buf); err != nil {
      return nil, err
    }
    return &ret, nil
  case MessageRobotToExternalTag_MemoryMapMessage:
    var ret MemoryMapMessage
    if err := ret.Unpack(buf); err != nil {
      return nil, err
    }
    return &ret, nil
  case MessageRobotToExternalTag_MemoryMapMessageEnd:
    var ret MemoryMapMessageEnd
    if err := ret.Unpack(buf); err != nil {
      return nil, err
    }
    return &ret, nil
  default:
    return nil, errors.New("invalid tag to unpackStruct")
  }
}

func (m *MessageRobotToExternal) Unpack(buf *bytes.Buffer) error {
  tag := MessageRobotToExternalTag_INVALID
  if err := binary.Read(buf, binary.LittleEndian, &tag); err != nil {
    return err
  }
  m.tag = &tag
  if tag == MessageRobotToExternalTag_INVALID {
    m.value = nil
    return nil
  }
  val, err := m.unpackStruct(tag, buf)
  if err != nil {
    *m.tag = MessageRobotToExternalTag_INVALID
    return err
  }
  m.value = val
  return nil
}

func (t MessageRobotToExternalTag) String() string {
  switch t {
  case MessageRobotToExternalTag_UiDeviceConnected:
    return "UiDeviceConnected"
  case MessageRobotToExternalTag_RobotCompletedAction:
    return "RobotCompletedAction"
  case MessageRobotToExternalTag_Event:
    return "Event"
  case MessageRobotToExternalTag_EnrolledNamesResponse:
    return "EnrolledNamesResponse"
  case MessageRobotToExternalTag_RobotObservedFace:
    return "RobotObservedFace"
  case MessageRobotToExternalTag_RobotChangedObservedFaceID:
    return "RobotChangedObservedFaceID"
  case MessageRobotToExternalTag_ObjectConnectionState:
    return "ObjectConnectionState"
  case MessageRobotToExternalTag_ObjectMoved:
    return "ObjectMoved"
  case MessageRobotToExternalTag_ObjectStoppedMoving:
    return "ObjectStoppedMoving"
  case MessageRobotToExternalTag_ObjectUpAxisChanged:
    return "ObjectUpAxisChanged"
  case MessageRobotToExternalTag_ObjectTapped:
    return "ObjectTapped"
  case MessageRobotToExternalTag_ObjectAccel:
    return "ObjectAccel"
  case MessageRobotToExternalTag_RobotObservedObject:
    return "RobotObservedObject"
  case MessageRobotToExternalTag_ObjectAvailable:
    return "ObjectAvailable"
  case MessageRobotToExternalTag_RobotDeletedFixedCustomObjects:
    return "RobotDeletedFixedCustomObjects"
  case MessageRobotToExternalTag_RobotDeletedCustomMarkerObjects:
    return "RobotDeletedCustomMarkerObjects"
  case MessageRobotToExternalTag_CreatedFixedCustomObject:
    return "CreatedFixedCustomObject"
  case MessageRobotToExternalTag_DefinedCustomObject:
    return "DefinedCustomObject"
  case MessageRobotToExternalTag_MemoryMapMessageBegin:
    return "MemoryMapMessageBegin"
  case MessageRobotToExternalTag_MemoryMapMessage:
    return "MemoryMapMessage"
  case MessageRobotToExternalTag_MemoryMapMessageEnd:
    return "MemoryMapMessageEnd"
  default:
    return "INVALID"
  }
}

func (m *MessageRobotToExternal) String() string {
  if m.tag == nil {
    return "nil"
  }
  if *m.tag == MessageRobotToExternalTag_INVALID {
    return "INVALID"
  }
  return fmt.Sprintf("%s: {%s}", *m.tag, m.value)
}

func (m *MessageRobotToExternal) GetUiDeviceConnected() *UiDeviceConnected {
  if m.tag == nil || *m.tag != MessageRobotToExternalTag_UiDeviceConnected {
    return nil
  }
  return m.value.(*UiDeviceConnected)
}

func (m *MessageRobotToExternal) SetUiDeviceConnected(value *UiDeviceConnected) {
  newTag := MessageRobotToExternalTag_UiDeviceConnected
  m.tag = &newTag
  m.value = value
}

func NewMessageRobotToExternalWithUiDeviceConnected(value *UiDeviceConnected) *MessageRobotToExternal {
  var ret MessageRobotToExternal
  ret.SetUiDeviceConnected(value)
  return &ret
}

func (m *MessageRobotToExternal) GetRobotCompletedAction() *RobotCompletedAction {
  if m.tag == nil || *m.tag != MessageRobotToExternalTag_RobotCompletedAction {
    return nil
  }
  return m.value.(*RobotCompletedAction)
}

func (m *MessageRobotToExternal) SetRobotCompletedAction(value *RobotCompletedAction) {
  newTag := MessageRobotToExternalTag_RobotCompletedAction
  m.tag = &newTag
  m.value = value
}

func NewMessageRobotToExternalWithRobotCompletedAction(value *RobotCompletedAction) *MessageRobotToExternal {
  var ret MessageRobotToExternal
  ret.SetRobotCompletedAction(value)
  return &ret
}

func (m *MessageRobotToExternal) GetEvent() *Event {
  if m.tag == nil || *m.tag != MessageRobotToExternalTag_Event {
    return nil
  }
  return m.value.(*Event)
}

func (m *MessageRobotToExternal) SetEvent(value *Event) {
  newTag := MessageRobotToExternalTag_Event
  m.tag = &newTag
  m.value = value
}

func NewMessageRobotToExternalWithEvent(value *Event) *MessageRobotToExternal {
  var ret MessageRobotToExternal
  ret.SetEvent(value)
  return &ret
}

func (m *MessageRobotToExternal) GetEnrolledNamesResponse() *EnrolledNamesResponse {
  if m.tag == nil || *m.tag != MessageRobotToExternalTag_EnrolledNamesResponse {
    return nil
  }
  return m.value.(*EnrolledNamesResponse)
}

func (m *MessageRobotToExternal) SetEnrolledNamesResponse(value *EnrolledNamesResponse) {
  newTag := MessageRobotToExternalTag_EnrolledNamesResponse
  m.tag = &newTag
  m.value = value
}

func NewMessageRobotToExternalWithEnrolledNamesResponse(value *EnrolledNamesResponse) *MessageRobotToExternal {
  var ret MessageRobotToExternal
  ret.SetEnrolledNamesResponse(value)
  return &ret
}

func (m *MessageRobotToExternal) GetRobotObservedFace() *RobotObservedFace {
  if m.tag == nil || *m.tag != MessageRobotToExternalTag_RobotObservedFace {
    return nil
  }
  return m.value.(*RobotObservedFace)
}

func (m *MessageRobotToExternal) SetRobotObservedFace(value *RobotObservedFace) {
  newTag := MessageRobotToExternalTag_RobotObservedFace
  m.tag = &newTag
  m.value = value
}

func NewMessageRobotToExternalWithRobotObservedFace(value *RobotObservedFace) *MessageRobotToExternal {
  var ret MessageRobotToExternal
  ret.SetRobotObservedFace(value)
  return &ret
}

func (m *MessageRobotToExternal) GetRobotChangedObservedFaceID() *RobotChangedObservedFaceID {
  if m.tag == nil || *m.tag != MessageRobotToExternalTag_RobotChangedObservedFaceID {
    return nil
  }
  return m.value.(*RobotChangedObservedFaceID)
}

func (m *MessageRobotToExternal) SetRobotChangedObservedFaceID(value *RobotChangedObservedFaceID) {
  newTag := MessageRobotToExternalTag_RobotChangedObservedFaceID
  m.tag = &newTag
  m.value = value
}

func NewMessageRobotToExternalWithRobotChangedObservedFaceID(value *RobotChangedObservedFaceID) *MessageRobotToExternal {
  var ret MessageRobotToExternal
  ret.SetRobotChangedObservedFaceID(value)
  return &ret
}

func (m *MessageRobotToExternal) GetObjectConnectionState() *ObjectConnectionState {
  if m.tag == nil || *m.tag != MessageRobotToExternalTag_ObjectConnectionState {
    return nil
  }
  return m.value.(*ObjectConnectionState)
}

func (m *MessageRobotToExternal) SetObjectConnectionState(value *ObjectConnectionState) {
  newTag := MessageRobotToExternalTag_ObjectConnectionState
  m.tag = &newTag
  m.value = value
}

func NewMessageRobotToExternalWithObjectConnectionState(value *ObjectConnectionState) *MessageRobotToExternal {
  var ret MessageRobotToExternal
  ret.SetObjectConnectionState(value)
  return &ret
}

func (m *MessageRobotToExternal) GetObjectMoved() *ObjectMoved {
  if m.tag == nil || *m.tag != MessageRobotToExternalTag_ObjectMoved {
    return nil
  }
  return m.value.(*ObjectMoved)
}

func (m *MessageRobotToExternal) SetObjectMoved(value *ObjectMoved) {
  newTag := MessageRobotToExternalTag_ObjectMoved
  m.tag = &newTag
  m.value = value
}

func NewMessageRobotToExternalWithObjectMoved(value *ObjectMoved) *MessageRobotToExternal {
  var ret MessageRobotToExternal
  ret.SetObjectMoved(value)
  return &ret
}

func (m *MessageRobotToExternal) GetObjectStoppedMoving() *ObjectStoppedMoving {
  if m.tag == nil || *m.tag != MessageRobotToExternalTag_ObjectStoppedMoving {
    return nil
  }
  return m.value.(*ObjectStoppedMoving)
}

func (m *MessageRobotToExternal) SetObjectStoppedMoving(value *ObjectStoppedMoving) {
  newTag := MessageRobotToExternalTag_ObjectStoppedMoving
  m.tag = &newTag
  m.value = value
}

func NewMessageRobotToExternalWithObjectStoppedMoving(value *ObjectStoppedMoving) *MessageRobotToExternal {
  var ret MessageRobotToExternal
  ret.SetObjectStoppedMoving(value)
  return &ret
}

func (m *MessageRobotToExternal) GetObjectUpAxisChanged() *ObjectUpAxisChanged {
  if m.tag == nil || *m.tag != MessageRobotToExternalTag_ObjectUpAxisChanged {
    return nil
  }
  return m.value.(*ObjectUpAxisChanged)
}

func (m *MessageRobotToExternal) SetObjectUpAxisChanged(value *ObjectUpAxisChanged) {
  newTag := MessageRobotToExternalTag_ObjectUpAxisChanged
  m.tag = &newTag
  m.value = value
}

func NewMessageRobotToExternalWithObjectUpAxisChanged(value *ObjectUpAxisChanged) *MessageRobotToExternal {
  var ret MessageRobotToExternal
  ret.SetObjectUpAxisChanged(value)
  return &ret
}

func (m *MessageRobotToExternal) GetObjectTapped() *ObjectTapped {
  if m.tag == nil || *m.tag != MessageRobotToExternalTag_ObjectTapped {
    return nil
  }
  return m.value.(*ObjectTapped)
}

func (m *MessageRobotToExternal) SetObjectTapped(value *ObjectTapped) {
  newTag := MessageRobotToExternalTag_ObjectTapped
  m.tag = &newTag
  m.value = value
}

func NewMessageRobotToExternalWithObjectTapped(value *ObjectTapped) *MessageRobotToExternal {
  var ret MessageRobotToExternal
  ret.SetObjectTapped(value)
  return &ret
}

func (m *MessageRobotToExternal) GetObjectAccel() *ObjectAccel {
  if m.tag == nil || *m.tag != MessageRobotToExternalTag_ObjectAccel {
    return nil
  }
  return m.value.(*ObjectAccel)
}

func (m *MessageRobotToExternal) SetObjectAccel(value *ObjectAccel) {
  newTag := MessageRobotToExternalTag_ObjectAccel
  m.tag = &newTag
  m.value = value
}

func NewMessageRobotToExternalWithObjectAccel(value *ObjectAccel) *MessageRobotToExternal {
  var ret MessageRobotToExternal
  ret.SetObjectAccel(value)
  return &ret
}

func (m *MessageRobotToExternal) GetRobotObservedObject() *RobotObservedObject {
  if m.tag == nil || *m.tag != MessageRobotToExternalTag_RobotObservedObject {
    return nil
  }
  return m.value.(*RobotObservedObject)
}

func (m *MessageRobotToExternal) SetRobotObservedObject(value *RobotObservedObject) {
  newTag := MessageRobotToExternalTag_RobotObservedObject
  m.tag = &newTag
  m.value = value
}

func NewMessageRobotToExternalWithRobotObservedObject(value *RobotObservedObject) *MessageRobotToExternal {
  var ret MessageRobotToExternal
  ret.SetRobotObservedObject(value)
  return &ret
}

func (m *MessageRobotToExternal) GetObjectAvailable() *ObjectAvailable {
  if m.tag == nil || *m.tag != MessageRobotToExternalTag_ObjectAvailable {
    return nil
  }
  return m.value.(*ObjectAvailable)
}

func (m *MessageRobotToExternal) SetObjectAvailable(value *ObjectAvailable) {
  newTag := MessageRobotToExternalTag_ObjectAvailable
  m.tag = &newTag
  m.value = value
}

func NewMessageRobotToExternalWithObjectAvailable(value *ObjectAvailable) *MessageRobotToExternal {
  var ret MessageRobotToExternal
  ret.SetObjectAvailable(value)
  return &ret
}

func (m *MessageRobotToExternal) GetRobotDeletedFixedCustomObjects() *RobotDeletedFixedCustomObjects {
  if m.tag == nil || *m.tag != MessageRobotToExternalTag_RobotDeletedFixedCustomObjects {
    return nil
  }
  return m.value.(*RobotDeletedFixedCustomObjects)
}

func (m *MessageRobotToExternal) SetRobotDeletedFixedCustomObjects(value *RobotDeletedFixedCustomObjects) {
  newTag := MessageRobotToExternalTag_RobotDeletedFixedCustomObjects
  m.tag = &newTag
  m.value = value
}

func NewMessageRobotToExternalWithRobotDeletedFixedCustomObjects(value *RobotDeletedFixedCustomObjects) *MessageRobotToExternal {
  var ret MessageRobotToExternal
  ret.SetRobotDeletedFixedCustomObjects(value)
  return &ret
}

func (m *MessageRobotToExternal) GetRobotDeletedCustomMarkerObjects() *RobotDeletedCustomMarkerObjects {
  if m.tag == nil || *m.tag != MessageRobotToExternalTag_RobotDeletedCustomMarkerObjects {
    return nil
  }
  return m.value.(*RobotDeletedCustomMarkerObjects)
}

func (m *MessageRobotToExternal) SetRobotDeletedCustomMarkerObjects(value *RobotDeletedCustomMarkerObjects) {
  newTag := MessageRobotToExternalTag_RobotDeletedCustomMarkerObjects
  m.tag = &newTag
  m.value = value
}

func NewMessageRobotToExternalWithRobotDeletedCustomMarkerObjects(value *RobotDeletedCustomMarkerObjects) *MessageRobotToExternal {
  var ret MessageRobotToExternal
  ret.SetRobotDeletedCustomMarkerObjects(value)
  return &ret
}

func (m *MessageRobotToExternal) GetCreatedFixedCustomObject() *CreatedFixedCustomObject {
  if m.tag == nil || *m.tag != MessageRobotToExternalTag_CreatedFixedCustomObject {
    return nil
  }
  return m.value.(*CreatedFixedCustomObject)
}

func (m *MessageRobotToExternal) SetCreatedFixedCustomObject(value *CreatedFixedCustomObject) {
  newTag := MessageRobotToExternalTag_CreatedFixedCustomObject
  m.tag = &newTag
  m.value = value
}

func NewMessageRobotToExternalWithCreatedFixedCustomObject(value *CreatedFixedCustomObject) *MessageRobotToExternal {
  var ret MessageRobotToExternal
  ret.SetCreatedFixedCustomObject(value)
  return &ret
}

func (m *MessageRobotToExternal) GetDefinedCustomObject() *DefinedCustomObject {
  if m.tag == nil || *m.tag != MessageRobotToExternalTag_DefinedCustomObject {
    return nil
  }
  return m.value.(*DefinedCustomObject)
}

func (m *MessageRobotToExternal) SetDefinedCustomObject(value *DefinedCustomObject) {
  newTag := MessageRobotToExternalTag_DefinedCustomObject
  m.tag = &newTag
  m.value = value
}

func NewMessageRobotToExternalWithDefinedCustomObject(value *DefinedCustomObject) *MessageRobotToExternal {
  var ret MessageRobotToExternal
  ret.SetDefinedCustomObject(value)
  return &ret
}

func (m *MessageRobotToExternal) GetMemoryMapMessageBegin() *MemoryMapMessageBegin {
  if m.tag == nil || *m.tag != MessageRobotToExternalTag_MemoryMapMessageBegin {
    return nil
  }
  return m.value.(*MemoryMapMessageBegin)
}

func (m *MessageRobotToExternal) SetMemoryMapMessageBegin(value *MemoryMapMessageBegin) {
  newTag := MessageRobotToExternalTag_MemoryMapMessageBegin
  m.tag = &newTag
  m.value = value
}

func NewMessageRobotToExternalWithMemoryMapMessageBegin(value *MemoryMapMessageBegin) *MessageRobotToExternal {
  var ret MessageRobotToExternal
  ret.SetMemoryMapMessageBegin(value)
  return &ret
}

func (m *MessageRobotToExternal) GetMemoryMapMessage() *MemoryMapMessage {
  if m.tag == nil || *m.tag != MessageRobotToExternalTag_MemoryMapMessage {
    return nil
  }
  return m.value.(*MemoryMapMessage)
}

func (m *MessageRobotToExternal) SetMemoryMapMessage(value *MemoryMapMessage) {
  newTag := MessageRobotToExternalTag_MemoryMapMessage
  m.tag = &newTag
  m.value = value
}

func NewMessageRobotToExternalWithMemoryMapMessage(value *MemoryMapMessage) *MessageRobotToExternal {
  var ret MessageRobotToExternal
  ret.SetMemoryMapMessage(value)
  return &ret
}

func (m *MessageRobotToExternal) GetMemoryMapMessageEnd() *MemoryMapMessageEnd {
  if m.tag == nil || *m.tag != MessageRobotToExternalTag_MemoryMapMessageEnd {
    return nil
  }
  return m.value.(*MemoryMapMessageEnd)
}

func (m *MessageRobotToExternal) SetMemoryMapMessageEnd(value *MemoryMapMessageEnd) {
  newTag := MessageRobotToExternalTag_MemoryMapMessageEnd
  m.tag = &newTag
  m.value = value
}

func NewMessageRobotToExternalWithMemoryMapMessageEnd(value *MemoryMapMessageEnd) *MessageRobotToExternal {
  var ret MessageRobotToExternal
  ret.SetMemoryMapMessageEnd(value)
  return &ret
}


