diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c856ac5..82f0a8fb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ### Added - Coroutine exception logging in context +- ObservableMutableMetaSerializer ### Changed - Simplify inheritance logic in `MutableTypedMeta` diff --git a/dataforge-meta/src/commonMain/kotlin/space/kscience/dataforge/meta/MetaSerializer.kt b/dataforge-meta/src/commonMain/kotlin/space/kscience/dataforge/meta/MetaSerializer.kt index 557cd5ef..2ccfd520 100644 --- a/dataforge-meta/src/commonMain/kotlin/space/kscience/dataforge/meta/MetaSerializer.kt +++ b/dataforge-meta/src/commonMain/kotlin/space/kscience/dataforge/meta/MetaSerializer.kt @@ -45,4 +45,21 @@ public object MutableMetaSerializer : KSerializer<MutableMeta> { override fun serialize(encoder: Encoder, value: MutableMeta) { encoder.encodeSerializableValue(MetaSerializer, value) } +} + +/** + * A serializer for [ObservableMutableMeta] + */ +public object ObservableMutableMetaSerializer : KSerializer<ObservableMutableMeta> { + + override val descriptor: SerialDescriptor = MetaSerializer.descriptor + + override fun deserialize(decoder: Decoder): ObservableMutableMeta { + val meta = decoder.decodeSerializableValue(MetaSerializer) + return ((meta as? MutableMeta) ?: meta.toMutableMeta()).asObservable() + } + + override fun serialize(encoder: Encoder, value: ObservableMutableMeta) { + encoder.encodeSerializableValue(MetaSerializer, value) + } } \ No newline at end of file