11package com.pega.constellation.sdk.kmp.core
22
3- import kotlinx.serialization.KSerializer
3+ import kotlinx.serialization.SerialName
44import kotlinx.serialization.Serializable
5- import kotlinx.serialization.SerializationException
6- import kotlinx.serialization.descriptors.SerialDescriptor
7- import kotlinx.serialization.descriptors.buildClassSerialDescriptor
8- import kotlinx.serialization.encoding.Decoder
9- import kotlinx.serialization.encoding.Encoder
10- import kotlinx.serialization.json.JsonDecoder
11- import kotlinx.serialization.json.JsonEncoder
125import kotlinx.serialization.json.JsonObject
13- import kotlinx.serialization.json.JsonPrimitive
14- import kotlinx.serialization.json.buildJsonObject
15- import kotlinx.serialization.json.jsonObject
16- import kotlinx.serialization.json.jsonPrimitive
176
187/* *
198 * Represents various actions that can be performed using the Constellation SDK.
209 */
21- @Serializable(with = ConstellationSdkKActionSerializer :: class )
10+ @Serializable
2211sealed class ConstellationSdkAction {
2312
13+ @Serializable
14+ @SerialName(" CreateCase" )
2415 data class CreateCase (
2516 val caseClassName : String ,
2617 val startingFields : JsonObject ? = null
2718 ) : ConstellationSdkAction()
2819
20+ @Serializable
21+ @SerialName(" OpenAssignment" )
2922 data class OpenAssignment (
3023 val assignmentId : String
3124 ) : ConstellationSdkAction()
32- }
33-
34-
35- object ConstellationSdkKActionSerializer : KSerializer<ConstellationSdkAction> {
36- override val descriptor: SerialDescriptor = buildClassSerialDescriptor(" ConstellationSdkAction" )
37-
38- override fun serialize (encoder : Encoder , value : ConstellationSdkAction ) {
39- val jsonEncoder = encoder as ? JsonEncoder
40- ? : throw SerializationException (" This class can be serialized only by JSON" )
41-
42- val jsonObject = when (value) {
43- is ConstellationSdkAction .CreateCase -> {
44- buildJsonObject {
45- put(" actionType" , JsonPrimitive (" CreateCase" ))
46- put(" caseClassName" , JsonPrimitive (value.caseClassName))
47- value.startingFields?.let { put(" startingFields" , it) }
48- }
49- }
50- is ConstellationSdkAction .OpenAssignment -> {
51- buildJsonObject {
52- put(" actionType" , JsonPrimitive (" OpenAssignment" ))
53- put(" assignmentId" , JsonPrimitive (value.assignmentId))
54- }
55- }
56- }
57- jsonEncoder.encodeJsonElement(jsonObject)
58- }
59-
60- override fun deserialize (decoder : Decoder ): ConstellationSdkAction {
61- val jsonDecoder = decoder as ? JsonDecoder
62- ? : throw SerializationException (" This class can be deserialized only by JSON" )
63-
64- val json = jsonDecoder.decodeJsonElement().jsonObject
65- val actionType = json[" actionType" ]?.jsonPrimitive?.content
66- ? : throw SerializationException (" Missing 'actionType' field" )
67-
68- return when (actionType) {
69- " CreateCase" -> {
70- val caseClassName = json[" caseClassName" ]?.jsonPrimitive?.content
71- ? : throw SerializationException (" Missing 'caseClassName'" )
72- val startingFields = json[" startingFields" ]?.jsonObject
73- ConstellationSdkAction .CreateCase (caseClassName, startingFields)
74- }
75- " OpenAssignment" -> {
76- val assignmentId = json[" assignmentId" ]?.jsonPrimitive?.content
77- ? : throw SerializationException (" Missing 'assignmentId'" )
78- ConstellationSdkAction .OpenAssignment (assignmentId)
79- }
80- else -> throw SerializationException (" Unknown actionType: $actionType " )
81- }
82- }
83- }
84-
25+ }
0 commit comments