From f3e00a07f17b84bc88f4a6fff4d2a997eedd5a08 Mon Sep 17 00:00:00 2001 From: Josh Reich Date: Tue, 20 May 2025 09:06:49 +1000 Subject: [PATCH] Added support for Boolean typeTags --- lib/src/convert.dart | 69 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 68 insertions(+), 1 deletion(-) diff --git a/lib/src/convert.dart b/lib/src/convert.dart index 64b351c..e9bd99f 100644 --- a/lib/src/convert.dart +++ b/lib/src/convert.dart @@ -20,7 +20,7 @@ const StringCodec stringCodec = StringCodec(); abstract class DataCodec extends Codec> { static final List> codecs = List>.unmodifiable( - >[blobCodec, intCodec, floatCodec, stringCodec]); + >[blobCodec, intCodec, floatCodec, stringCodec, booleanTrueCodec, booleanFalseCodec]); final String typeTag; @@ -221,6 +221,73 @@ class StringEncoder extends DataEncoder { } } +/// Boolean codecs for OSC booleans ('T' = true, 'F' = false). +const BooleanTrueCodec booleanTrueCodec = BooleanTrueCodec(); +const BooleanFalseCodec booleanFalseCodec = BooleanFalseCodec(); + +class BooleanTrueCodec extends DataCodec { + const BooleanTrueCodec() : super(typeTag: 'T'); + + @override + bool appliesTo(Object? value) => value == true; + + @override + Converter, bool> get decoder => const _BooleanTrueDecoder(); + + @override + Converter> get encoder => const _BooleanTrueEncoder(); + + @override + int length(bool value) => 0; + + @override + bool toValue(String string) => true; +} + +class _BooleanTrueDecoder extends DataDecoder { + const _BooleanTrueDecoder(); + @override + bool convert(List value) => true; +} + +class _BooleanTrueEncoder extends DataEncoder { + const _BooleanTrueEncoder(); + @override + List convert(bool value) => []; +} + +class BooleanFalseCodec extends DataCodec { + const BooleanFalseCodec() : super(typeTag: 'F'); + + @override + bool appliesTo(Object? value) => value == false; + + @override + Converter, bool> get decoder => const _BooleanFalseDecoder(); + + @override + Converter> get encoder => const _BooleanFalseEncoder(); + + @override + int length(bool value) => 0; + + @override + bool toValue(String string) => false; +} + +class _BooleanFalseDecoder extends DataDecoder { + const _BooleanFalseDecoder(); + @override + bool convert(List value) => false; +} + +class _BooleanFalseEncoder extends DataEncoder { + const _BooleanFalseEncoder(); + @override + List convert(bool value) => []; +} + + class OSCMessageBuilder { final _builder = BytesBuilder();