"""
Autogenerated python message buffer code.
Source: clad/types/experimentTypes.clad
Full command line: victor-clad/tools/message-buffers/emitters/Python_emitter.py -C src -I clad/src lib/util/source/anki/clad robot/clad/src coretech/vision/clad_src coretech/common/clad_src -o generated/cladPython clad/types/experimentTypes.clad
"""

from __future__ import absolute_import
from __future__ import print_function

def _modify_path():
  import inspect, os, sys
  search_paths = [
    '../..',
    '../../../../victor-clad/tools/message-buffers/support/python',
  ]
  currentpath = os.path.abspath(os.path.dirname(inspect.getfile(inspect.currentframe())))
  for search_path in search_paths:
    search_path = os.path.normpath(os.path.abspath(os.path.realpath(os.path.join(currentpath, search_path))))
    if search_path not in sys.path:
      sys.path.insert(0, search_path)
_modify_path()

import msgbuffers

Anki = msgbuffers.Namespace()
Anki.Vector = msgbuffers.Namespace()

class LabAssignment(object):
  "Generated message-passing structure."

  __slots__ = (
    '_experiment_key', # string[uint_8]
    '_variation_key',  # string[uint_8]
  )

  @property
  def experiment_key(self):
    "string[uint_8] experiment_key struct property."
    return self._experiment_key

  @experiment_key.setter
  def experiment_key(self, value):
    self._experiment_key = msgbuffers.validate_string(
      'LabAssignment.experiment_key', value, 255)

  @property
  def variation_key(self):
    "string[uint_8] variation_key struct property."
    return self._variation_key

  @variation_key.setter
  def variation_key(self, value):
    self._variation_key = msgbuffers.validate_string(
      'LabAssignment.variation_key', value, 255)

  def __init__(self, experiment_key='', variation_key=''):
    self.experiment_key = experiment_key
    self.variation_key = variation_key

  @classmethod
  def unpack(cls, buffer):
    "Reads a new LabAssignment from the given buffer."
    reader = msgbuffers.BinaryReader(buffer)
    value = cls.unpack_from(reader)
    if reader.tell() != len(reader):
      raise msgbuffers.ReadError(
        ('LabAssignment.unpack received a buffer of length {length}, ' +
        'but only {position} bytes were read.').format(
        length=len(reader), position=reader.tell()))
    return value

  @classmethod
  def unpack_from(cls, reader):
    "Reads a new LabAssignment from the given BinaryReader."
    _experiment_key = reader.read_string('B')
    _variation_key = reader.read_string('B')
    return cls(_experiment_key, _variation_key)

  def pack(self):
    "Writes the current LabAssignment, returning bytes."
    writer = msgbuffers.BinaryWriter()
    self.pack_to(writer)
    return writer.dumps()

  def pack_to(self, writer):
    "Writes the current LabAssignment to the given BinaryWriter."
    writer.write_string(self._experiment_key, 'B')
    writer.write_string(self._variation_key, 'B')

  def __eq__(self, other):
    if type(self) is type(other):
      return (self._experiment_key == other._experiment_key and
        self._variation_key == other._variation_key)
    else:
      return NotImplemented

  def __ne__(self, other):
    if type(self) is type(other):
      return not self.__eq__(other)
    else:
      return NotImplemented

  def __len__(self):
    return (msgbuffers.size_string(self._experiment_key, 'B') +
      msgbuffers.size_string(self._variation_key, 'B'))

  def __str__(self):
    return '{type}(experiment_key={experiment_key}, variation_key={variation_key})'.format(
      type=type(self).__name__,
      experiment_key=msgbuffers.shorten_string(self._experiment_key),
      variation_key=msgbuffers.shorten_string(self._variation_key))

  def __repr__(self):
    return '{type}(experiment_key={experiment_key}, variation_key={variation_key})'.format(
      type=type(self).__name__,
      experiment_key=repr(self._experiment_key),
      variation_key=repr(self._variation_key))

Anki.Vector.LabAssignment = LabAssignment
del LabAssignment


class LabAssignments(object):
  "Generated message-passing structure."

  __slots__ = (
    '_labAssignments', # LabAssignment[uint_8]
  )

  @property
  def labAssignments(self):
    "LabAssignment[uint_8] labAssignments struct property."
    return self._labAssignments

  @labAssignments.setter
  def labAssignments(self, value):
    self._labAssignments = msgbuffers.validate_varray(
      'LabAssignments.labAssignments', value, 255,
      lambda name, value_inner: msgbuffers.validate_object(
        name, value_inner, Anki.Vector.LabAssignment))

  def __init__(self, labAssignments=()):
    self.labAssignments = labAssignments

  @classmethod
  def unpack(cls, buffer):
    "Reads a new LabAssignments from the given buffer."
    reader = msgbuffers.BinaryReader(buffer)
    value = cls.unpack_from(reader)
    if reader.tell() != len(reader):
      raise msgbuffers.ReadError(
        ('LabAssignments.unpack received a buffer of length {length}, ' +
        'but only {position} bytes were read.').format(
        length=len(reader), position=reader.tell()))
    return value

  @classmethod
  def unpack_from(cls, reader):
    "Reads a new LabAssignments from the given BinaryReader."
    _labAssignments = reader.read_object_varray(Anki.Vector.LabAssignment.unpack_from, 'B')
    return cls(_labAssignments)

  def pack(self):
    "Writes the current LabAssignments, returning bytes."
    writer = msgbuffers.BinaryWriter()
    self.pack_to(writer)
    return writer.dumps()

  def pack_to(self, writer):
    "Writes the current LabAssignments to the given BinaryWriter."
    writer.write_object_varray(self._labAssignments, 'B')

  def __eq__(self, other):
    if type(self) is type(other):
      return self._labAssignments == other._labAssignments
    else:
      return NotImplemented

  def __ne__(self, other):
    if type(self) is type(other):
      return not self.__eq__(other)
    else:
      return NotImplemented

  def __len__(self):
    return (msgbuffers.size_object_varray(self._labAssignments, 'B'))

  def __str__(self):
    return '{type}(labAssignments={labAssignments})'.format(
      type=type(self).__name__,
      labAssignments=msgbuffers.shorten_sequence(self._labAssignments))

  def __repr__(self):
    return '{type}(labAssignments={labAssignments})'.format(
      type=type(self).__name__,
      labAssignments=repr(self._labAssignments))

Anki.Vector.LabAssignments = LabAssignments
del LabAssignments


