From 270d1b9936ccfbfcf22ef88db47a608a930b10ac Mon Sep 17 00:00:00 2001 From: Jan Romann Date: Wed, 3 Jan 2024 06:34:24 +0100 Subject: [PATCH] feat: introduce toThingDescription extension method --- example/coaps_readproperty.dart | 2 +- example/complex_example.dart | 2 +- example/http_basic_authentication.dart | 2 +- example/mqtt_example.dart | 2 +- lib/src/core/wot.dart | 37 +--------------------- lib/src/definitions/thing_description.dart | 8 +++++ 6 files changed, 13 insertions(+), 40 deletions(-) diff --git a/example/coaps_readproperty.dart b/example/coaps_readproperty.dart index 9f2bbb72..3083be29 100644 --- a/example/coaps_readproperty.dart +++ b/example/coaps_readproperty.dart @@ -61,7 +61,7 @@ Future main(List args) async { }, }; - final thingDescription = ThingDescription.fromJson(thingDescriptionJson); + final thingDescription = thingDescriptionJson.toThingDescription(); final consumedThing = await wot.consume(thingDescription); final status = await consumedThing.readProperty("status"); final value = await status.value(); diff --git a/example/complex_example.dart b/example/complex_example.dart index 1d3ea30a..76d017c6 100644 --- a/example/complex_example.dart +++ b/example/complex_example.dart @@ -103,7 +103,7 @@ Future main() async { ); final wot = await servient.start(); - final thingDescription = ThingDescription.fromJson(thingDescriptionJson); + final thingDescription = thingDescriptionJson.toThingDescription(); final consumedThing = await wot.consume(thingDescription); final status = await consumedThing.readProperty("status"); final value1 = await status.value(); diff --git a/example/http_basic_authentication.dart b/example/http_basic_authentication.dart index 0fd21109..ed3a4102 100644 --- a/example/http_basic_authentication.dart +++ b/example/http_basic_authentication.dart @@ -67,7 +67,7 @@ Future main(List args) async { ); final wot = await servient.start(); - final thingDescription = ThingDescription.fromJson(thingDescriptionJson); + final thingDescription = thingDescriptionJson.toThingDescription(); final consumedThing = await wot.consume(thingDescription); final status = await consumedThing.readProperty("status"); diff --git a/example/mqtt_example.dart b/example/mqtt_example.dart index d77a9c3b..0ed4919a 100644 --- a/example/mqtt_example.dart +++ b/example/mqtt_example.dart @@ -67,7 +67,7 @@ Future main(List args) async { final wot = await servient.start(); - final thingDescription = ThingDescription.fromJson(thingDescriptionJson); + final thingDescription = thingDescriptionJson.toThingDescription(); final consumedThing = await wot.consume(thingDescription); await consumedThing.readAndPrintProperty("status"); diff --git a/lib/src/core/wot.dart b/lib/src/core/wot.dart index e863dbc9..3fd89d3d 100644 --- a/lib/src/core/wot.dart +++ b/lib/src/core/wot.dart @@ -136,7 +136,7 @@ class WoT implements scripting_api.WoT { final thingDescriptionStream = Stream.fromIterable( rawThingDescriptions.whereType>(), - ).toThingDescriptionStream(); + ).map((rawThingDescription) => rawThingDescription.toThingDescription()); return ThingDiscoveryProcess(thingDescriptionStream, filter); } @@ -162,38 +162,3 @@ extension _DirectoryValidationExtension on ThingDescription { atTypes.contains(type); } } - -extension _DirectoryTdDeserializationExtension on Stream> { - Stream toThingDescriptionStream() { - const streamTransformer = StreamTransformer(_transformerMethod); - - return transform(streamTransformer); - } - - static StreamSubscription _transformerMethod( - Stream> rawThingDescriptionStream, - bool cancelOnError, - ) { - final streamController = StreamController(); - - final streamSubscription = rawThingDescriptionStream.listen( - (rawThingDescription) { - try { - streamController.add(ThingDescription.fromJson(rawThingDescription)); - } on Exception catch (exception) { - streamController.addError(exception); - } - }, - onDone: streamController.close, - onError: streamController.addError, - cancelOnError: cancelOnError, - ); - - streamController - ..onPause = streamSubscription.pause - ..onResume = streamSubscription.resume - ..onCancel = streamSubscription.cancel; - - return streamController.stream.listen(null); - } -} diff --git a/lib/src/definitions/thing_description.dart b/lib/src/definitions/thing_description.dart index 32f166f4..66b3332f 100644 --- a/lib/src/definitions/thing_description.dart +++ b/lib/src/definitions/thing_description.dart @@ -252,3 +252,11 @@ class ThingDescription { return id ?? base?.toString() ?? title; } } + +/// Extension for generating [ThingDescription]s from [Map]s more easily. +extension ToThingDescription on Map { + /// Tries to generate a [ThingDescription] from this [Map] object. + ThingDescription toThingDescription() { + return ThingDescription.fromJson(this); + } +}