1package soy.iko.opencode.data.network
3import soy.iko.opencode.data.model.BusEvent
4import soy.iko.opencode.data.model.MessageInfo
5import soy.iko.opencode.data.model.Part
6import soy.iko.opencode.data.model.ToolState
7import soy.iko.opencode.data.model.UnknownEvent
8import soy.iko.opencode.data.model.UnknownMessage
9import soy.iko.opencode.data.model.UnknownPart
10import soy.iko.opencode.data.model.ToolUnknown
11import kotlinx.serialization.ExperimentalSerializationApi
12import kotlinx.serialization.json.Json
13import kotlinx.serialization.modules.SerializersModule
16 * Single shared Json for the whole app.
18 * The polymorphic default deserializers are the resilience layer: when the server
19 * sends a `type` / `role` / `status` we don't model, decoding falls back to the
20 * Unknown variant instead of throwing — so a new opencode release can't break the
21 * event stream or message decoding.
23@OptIn(ExperimentalSerializationApi::class)
24val OpencodeJson: Json = Json {
25 ignoreUnknownKeys = true
27 coerceInputValues = true
30 classDiscriminator = "type"
31 serializersModule = SerializersModule {
32 polymorphicDefaultDeserializer(Part::class) { UnknownPart.serializer() }
33 polymorphicDefaultDeserializer(BusEvent::class) { UnknownEvent.serializer() }
34 polymorphicDefaultDeserializer(MessageInfo::class) { UnknownMessage.serializer() }
35 polymorphicDefaultDeserializer(ToolState::class) { ToolUnknown.serializer() }
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list