Guest User

Untitled

a guest
Nov 17th, 2019
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 2.57 KB | None | 0 0
  1. @Serializable
  2. sealed class Order(
  3.     open val ownerId: String,
  4.     open val member: Member,
  5.     open val title: String,
  6.     open val price: Double
  7. ) {
  8.  
  9.     @Serializable
  10.     class OrderOwner(
  11.         ownerId: String,
  12.         member: Member,
  13.         title: String,
  14.         price: Double
  15.     ) : Order(ownerId, member, title, price) {
  16.  
  17.         @Serializer(forClass = OrderOwner::class)
  18.         companion object : KSerializer<Order> {
  19.             override val descriptor: SerialDescriptor =
  20.                 StringDescriptor.withName("MemberInfo")
  21.  
  22.             @UseExperimental(ExperimentalStdlibApi::class)
  23.             override fun serialize(encoder: Encoder, obj: Order) {
  24.                 encoder.encodeString(obj.ownerId)
  25.                 encoder.encodeString(obj.member.serialize())
  26.                 encoder.encodeString(obj.title)
  27.                 encoder.encodeDouble(obj.price)
  28.             }
  29.  
  30.             @UseExperimental(ExperimentalStdlibApi::class)
  31.             override fun deserialize(decoder: Decoder): Order {
  32.                 return OrderOwner(
  33.                     decoder.decodeString(),
  34.                     decoder.decodeString().deserialize(),
  35.                     decoder.decodeString(),
  36.                     decoder.decodeDouble()
  37.                 )
  38.             }
  39.         }
  40.  
  41.     }
  42.  
  43.     @Serializable
  44.     class OrderReceiver(
  45.         ownerId: String,
  46.         member: Member,
  47.         title: String,
  48.         price: Double
  49.     ) : Order(ownerId, member, title, price) {
  50.  
  51.         @Serializer(forClass = OrderReceiver::class)
  52.         companion object : KSerializer<Order> {
  53.             override val descriptor: SerialDescriptor =
  54.                 StringDescriptor.withName("MemberInfo")
  55.  
  56.             @UseExperimental(ExperimentalStdlibApi::class)
  57.             override fun serialize(encoder: Encoder, obj: Order) {
  58.                 encoder.encodeString(obj.ownerId)
  59.                 encoder.encodeString(obj.member.serialize())
  60.                 encoder.encodeString(obj.title)
  61.                 encoder.encodeDouble(obj.price)
  62.             }
  63.  
  64.             @UseExperimental(ExperimentalStdlibApi::class)
  65.             override fun deserialize(decoder: Decoder): Order {
  66.                 return OrderReceiver(
  67.                     decoder.decodeString(),
  68.                     decoder.decodeString().deserialize(),
  69.                     decoder.decodeString(),
  70.                     decoder.decodeDouble()
  71.                 )
  72.             }
  73.         }
  74.     }
  75.  
  76.     override fun toString(): String {
  77.         return "Order(member=$member, title=$title, price=$price)"
  78.     }
  79. }
Advertisement
Add Comment
Please, Sign In to add comment