fromBytes static method

DefinitionMessage fromBytes(
  1. Uint8List bytes, {
  2. bool hasDeveloperFields = false,
})

Implementation

static DefinitionMessage fromBytes(Uint8List bytes,
    {bool hasDeveloperFields = false}) {
  final bd = ByteData.sublistView(bytes);
  var offset = 0;

  // reserved
  offset += 1;

  // architecture
  final Endian endian;
  if (bd.getUint8(offset) == 0) {
    endian = Endian.little;
  } else {
    endian = Endian.big;
  }
  offset += 1;

  // global id
  final globalId = bd.getUint16(offset, endian);
  offset += 2;

  // number of fields
  final fieldCount = bd.getUint8(offset);
  offset += 1;

  // Field definitions;
  final fieldDefinitions = <FieldDefinition>[];
  for (var i = 0; i < fieldCount; i++) {
    final fdBytes = Uint8List.sublistView(
        bytes, offset, offset + FieldDefinition.fieldDefinitionSize);
    final fieldDefinition = FieldDefinition.fromBytes(fdBytes);
    fieldDefinitions.add(fieldDefinition);
    offset += FieldDefinition.fieldDefinitionSize;
  }

  final developerFieldDefinitions = <DeveloperFieldDefinition>[];
  if (hasDeveloperFields) {
    // number of developer fields
    final devFieldCount = bd.getUint8(offset);
    offset += 1;

    for (var i = 0; i < devFieldCount; i++) {
      final fdBytes = Uint8List.sublistView(bytes, offset,
          offset + DeveloperFieldDefinition.fieldDefinitionSize);
      final fieldDefinition = DeveloperFieldDefinition.fromBytes(fdBytes);
      developerFieldDefinitions.add(fieldDefinition);
      offset += DeveloperFieldDefinition.fieldDefinitionSize;
    }
  }

  return DefinitionMessage(
      endian: endian,
      globalId: globalId,
      fieldDefinitions: fieldDefinitions,
      developerFieldDefinitions: developerFieldDefinitions);
}