uIntBcsType function

BcsType<int, dynamic> uIntBcsType({
  1. required String name,
  2. required int size,
  3. required String readMethod,
  4. required String writeMethod,
  5. required int maxValue,
  6. void validate(
    1. int
    )?,
})

Implementation

BcsType<int, dynamic> uIntBcsType({
  required String name,
  required int size,
  required String readMethod,
  required String writeMethod,
  required int maxValue,
  void Function(int)? validate,
}) {
  return fixedSizeBcsType<int, dynamic>(
    name: name,
    size: size,
    read: (reader) {
      switch (readMethod) {
        case 'read8':
          return reader.read8();
        case 'read16':
          return reader.read16();
        case 'read32':
          return reader.read32();
        default:
          throw ArgumentError('Invalid read type $readMethod');
      }
    },
    write: (value, writer) {
      switch (writeMethod) {
        case 'write8':
          writer.write8(value);
          break;
        case 'write16':
          writer.write16(value);
          break;
        case 'write32':
          writer.write32(value);
          break;
        default:
          throw ArgumentError('Invalid read type $readMethod');
      }
    },
    validate: (val) {
      final value = int.parse(val.toString());
      if (value < 0 || value > maxValue) {
        throw ArgumentError('Invalid $name value: $value. Expected value in range 0-$maxValue');
      }
      validate?.call(value);
    },
  );
}