Skip to content

Commit

Permalink
feat: introduce toThingDescription extension method
Browse files Browse the repository at this point in the history
  • Loading branch information
JKRhb committed Jan 4, 2024
1 parent 88bbe14 commit 270d1b9
Show file tree
Hide file tree
Showing 6 changed files with 13 additions and 40 deletions.
2 changes: 1 addition & 1 deletion example/coaps_readproperty.dart
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ Future<void> main(List<String> 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();
Expand Down
2 changes: 1 addition & 1 deletion example/complex_example.dart
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ Future<void> 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();
Expand Down
2 changes: 1 addition & 1 deletion example/http_basic_authentication.dart
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ Future<void> main(List<String> 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");

Expand Down
2 changes: 1 addition & 1 deletion example/mqtt_example.dart
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ Future<void> main(List<String> 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");

Expand Down
37 changes: 1 addition & 36 deletions lib/src/core/wot.dart
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ class WoT implements scripting_api.WoT {

final thingDescriptionStream = Stream.fromIterable(
rawThingDescriptions.whereType<Map<String, Object?>>(),
).toThingDescriptionStream();
).map((rawThingDescription) => rawThingDescription.toThingDescription());

return ThingDiscoveryProcess(thingDescriptionStream, filter);
}
Expand All @@ -162,38 +162,3 @@ extension _DirectoryValidationExtension on ThingDescription {
atTypes.contains(type);
}
}

extension _DirectoryTdDeserializationExtension on Stream<Map<String, Object?>> {
Stream<ThingDescription> toThingDescriptionStream() {
const streamTransformer = StreamTransformer(_transformerMethod);

return transform(streamTransformer);
}

static StreamSubscription<ThingDescription> _transformerMethod(
Stream<Map<String, dynamic>> rawThingDescriptionStream,
bool cancelOnError,
) {
final streamController = StreamController<ThingDescription>();

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);
}
}
8 changes: 8 additions & 0 deletions lib/src/definitions/thing_description.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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<String, dynamic> {
/// Tries to generate a [ThingDescription] from this [Map] object.
ThingDescription toThingDescription() {
return ThingDescription.fromJson(this);
}
}

0 comments on commit 270d1b9

Please sign in to comment.