|
8 | 8 |
|
9 | 9 | package application.presenter.event.serialization |
10 | 10 |
|
| 11 | +import application.presenter.event.model.Event |
| 12 | +import application.presenter.event.model.MedicalTechnologyEvent |
| 13 | +import application.presenter.event.model.MedicalTechnologyEventKey |
| 14 | +import application.presenter.event.model.RoomEvent |
| 15 | +import application.presenter.event.model.RoomEventKey |
11 | 16 | import application.presenter.event.model.RoomEventPayloads |
12 | 17 | import entity.environment.Humidity |
13 | 18 | import entity.environment.LightUnit |
14 | 19 | import entity.environment.Luminosity |
15 | 20 | import entity.environment.Presence |
16 | 21 | import entity.environment.Temperature |
17 | 22 | import entity.environment.TemperatureUnit |
| 23 | +import kotlinx.serialization.decodeFromString |
| 24 | +import kotlinx.serialization.json.Json |
18 | 25 |
|
19 | 26 | /** Module that wraps the event serialization. */ |
20 | 27 | object EventSerialization { |
| 28 | + /** |
| 29 | + * Convert an event body to an [Event] object giving its [eventKey]. |
| 30 | + * @throws IllegalArgumentException if the event cannot be deserialized. |
| 31 | + */ |
| 32 | + fun String.toEvent(eventKey: String): Event<*> = when (eventKey) { |
| 33 | + RoomEventKey.TEMPERATURE_EVENT -> Json.decodeFromString<RoomEvent<RoomEventPayloads.TemperaturePayload>>(this) |
| 34 | + RoomEventKey.HUMIDITY_EVENT -> Json.decodeFromString<RoomEvent<RoomEventPayloads.HumidityPayload>>(this) |
| 35 | + RoomEventKey.LUMINOSITY_EVENT -> Json.decodeFromString<RoomEvent<RoomEventPayloads.LuminosityPayload>>(this) |
| 36 | + RoomEventKey.PRESENCE_EVENT -> Json.decodeFromString<RoomEvent<RoomEventPayloads.PresencePayload>>(this) |
| 37 | + MedicalTechnologyEventKey.USAGE_EVENT -> Json.decodeFromString<MedicalTechnologyEvent>(this) |
| 38 | + else -> throw IllegalArgumentException("Event not supported") |
| 39 | + } |
| 40 | + |
21 | 41 | /** Convert a Temperature Payload to [Temperature]. */ |
22 | 42 | fun RoomEventPayloads.TemperaturePayload.toTemperature() = |
23 | 43 | Temperature(this.temperatureValue, this.temperatureUnit.toTemperatureUnit()) |
|
0 commit comments