registerType method
LegacyBCS
registerType(
- dynamic typeName,
- EncodeCb encodeCb,
- DecodeCb decodeCb, [
- ValidateCb? validateCb,
Method to register new types for BCS internal representation. For each registered type 2 callbacks must be specified and one is optional:
- encodeCb(writer, data) - write a way to serialize data with BcsWriter;
- decodeCb(reader) - write a way to deserialize data with BcsReader;
- validateCb(data) - validate data - either return bool or throw an error
// our type would be a string that consists only of numbers
bcs.registerType('number_string',
(writer, data, _, __) => writer.writeVec(data, (w, el, _, __) => w.write8(int.parse(el.toString()))),
(reader, _, __) => reader.readVec((r, _, __) => r.read8()).join(''), // read each value as u8
(value) => RegExp("[0-9]+").hasMatch(value) // test that it has at least one digit
);
expect(bcs.ser('number_string', '12345').toBytes(), [5,1,2,3,4,5]);
Implementation
LegacyBCS registerType(TypeName typeName, EncodeCb encodeCb, DecodeCb decodeCb,
[ValidateCb? validateCb]) {
validateCb ??= (data) => true;
final (name, generics) = parseTypeName(typeName);
types[name] = TypeEncodeDecode(this, generics, encodeCb, decodeCb, validateCb);
return this;
}