encodedValueToBytes method

Uint8List encodedValueToBytes(
  1. dynamic encodedValue, {
  2. Endian endian = Endian.little,
})

Implementation

Uint8List encodedValueToBytes(dynamic encodedValue,
    {Endian endian = Endian.little}) {
  if (encodedValue == null) {
    throw ArgumentError.value(encodedValue, 'encodedValue');
  }

  if (type == BaseType.STRING) {
    final encodedBytes = utf8.encode(encodedValue);
    final bb = BytesBuilder()
      ..add(encodedBytes)
      ..addByte(0);
    return bb.toBytes();
  }

  final byteData = ByteData(type.size);

  switch (type) {
    case BaseType.ENUM:
      byteData.setUint8(0, encodedValue);
      break;

    case BaseType.UINT8:
    case BaseType.UINT8Z:
    case BaseType.BYTE:
      byteData.setUint8(0, encodedValue);
      break;

    case BaseType.SINT8:
      byteData.setInt8(0, encodedValue);
      break;

    case BaseType.SINT16:
      byteData.setInt16(0, encodedValue, endian);
      break;

    case BaseType.UINT16:
    case BaseType.UINT16Z:
      byteData.setUint16(0, encodedValue, endian);
      break;

    case BaseType.SINT32:
      byteData.setInt32(0, encodedValue, endian);
      break;

    case BaseType.UINT32:
    case BaseType.UINT32Z:
      byteData.setUint32(0, encodedValue, endian);
      break;

    case BaseType.FLOAT32:
      if (encodedValue == null) {
        byteData.setUint32(0, type.invalidRawValue, endian);
      } else {
        byteData.setFloat32(0, encodedValue, endian);
      }
      break;

    case BaseType.FLOAT64:
      if (encodedValue == null) {
        byteData.setUint64(0, type.invalidRawValue, endian);
      } else {
        byteData.setFloat64(0, encodedValue, endian);
      }
      break;

    case BaseType.STRING:
      break;

    case BaseType.UINT64:
    case BaseType.UINT64Z:
    case BaseType.SINT64:
      encodedValue as BigInt;
      final stringValue = encodedValue.toRadixString(16);
      final int64 = Int64.parseRadix(stringValue, 16);
      var bytes = int64.toBytes();
      if (endian == Endian.big) {
        bytes = bytes.reversed.toList();
      }
      return Uint8List.fromList(bytes);
  }

  return byteData.buffer.asUint8List();
}