binary_serializable 0.3.6
binary_serializable: ^0.3.6 copied to clipboard
Efficient binary serialization and deserialization, optimized for streams of binary data.
import 'package:binary_serializable/binary_serializable.dart';
class Person {
final String name;
final int age;
final List<Person> children;
Person({required this.name, required this.age, required this.children});
}
void main() {
final sample = Person(
name: 'Alice',
age: 87,
children: [
Person(
name: 'Bob',
age: 49,
children: [
Person(
name: 'Tina',
age: 17,
children: [],
),
],
),
Person(
name: 'Joe',
age: 49,
children: [],
),
],
);
final encoded = PersonType().encode(sample);
print(
'Encoded data: ${encoded.map((b) => b.toRadixString(16).padLeft(2, '0')).join(' ')}',
);
final decoded = PersonType().decode(encoded);
print(
'1st child of decoded sample: ${decoded.children.first.name} (${decoded.children.first.age}, ${decoded.children.first.children.length} child)',
);
}
// The code below can be automatically generated by
// binary_serializable_generator.
class PersonType extends BinaryType<Person> {
const PersonType();
@override
void encodeInto(Person input, BytesBuilder builder) {
utf8String.encodeInto(input.name, builder);
uint8.encodeInto(input.age, builder);
const LengthPrefixedListType(uint8, PersonType())
.encodeInto(input.children, builder);
}
@override
BinaryConversion<Person> startConversion(void Function(Person p1) onValue) =>
PersonConversion(onValue);
}
class PersonConversion extends CompositeBinaryConversion<Person> {
PersonConversion(super.onValue);
@override
BinaryConversion startConversion() {
return utf8String.startConversion((name) {
currentConversion = uint8.startConversion((age) {
currentConversion = const LengthPrefixedListType(uint8, PersonType())
.startConversion((children) {
onValue(Person(name: name, age: age, children: children));
});
});
});
}
}
copied to clipboard