Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 19 additions & 38 deletions acp-model/api/acp-model.api
Original file line number Diff line number Diff line change
Expand Up @@ -444,10 +444,10 @@ public final class com/agentclientprotocol/model/CancelNotification$Companion {

public final class com/agentclientprotocol/model/CancelRequestNotification : com/agentclientprotocol/model/AcpNotification {
public static final field Companion Lcom/agentclientprotocol/model/CancelRequestNotification$Companion;
public synthetic fun <init> (ILjava/lang/String;Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (ILjava/lang/String;Lkotlinx/serialization/json/JsonElement;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun <init> (Lcom/agentclientprotocol/rpc/RequestId;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;)V
public synthetic fun <init> (Lcom/agentclientprotocol/rpc/RequestId;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun getMessage ()Ljava/lang/String;
public final fun getRequestId-2bfd730 ()I
public final fun getRequestId ()Lcom/agentclientprotocol/rpc/RequestId;
public fun get_meta ()Lkotlinx/serialization/json/JsonElement;
}

Expand Down Expand Up @@ -3163,16 +3163,16 @@ public final class com/agentclientprotocol/rpc/JsonRpcNotification$Companion {

public final class com/agentclientprotocol/rpc/JsonRpcRequest : com/agentclientprotocol/rpc/JsonRpcMessage {
public static final field Companion Lcom/agentclientprotocol/rpc/JsonRpcRequest$Companion;
public synthetic fun <init> (ILjava/lang/String;Lkotlinx/serialization/json/JsonElement;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (ILjava/lang/String;Lkotlinx/serialization/json/JsonElement;Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1-2bfd730 ()I
public synthetic fun <init> (Lcom/agentclientprotocol/rpc/RequestId;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (Lcom/agentclientprotocol/rpc/RequestId;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Lcom/agentclientprotocol/rpc/RequestId;
public final fun component2-6j0qeeA ()Ljava/lang/String;
public final fun component3 ()Lkotlinx/serialization/json/JsonElement;
public final fun component4 ()Ljava/lang/String;
public final fun copy-3p7Q8xk (ILjava/lang/String;Lkotlinx/serialization/json/JsonElement;Ljava/lang/String;)Lcom/agentclientprotocol/rpc/JsonRpcRequest;
public static synthetic fun copy-3p7Q8xk$default (Lcom/agentclientprotocol/rpc/JsonRpcRequest;ILjava/lang/String;Lkotlinx/serialization/json/JsonElement;Ljava/lang/String;ILjava/lang/Object;)Lcom/agentclientprotocol/rpc/JsonRpcRequest;
public final fun copy-09H__7E (Lcom/agentclientprotocol/rpc/RequestId;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;Ljava/lang/String;)Lcom/agentclientprotocol/rpc/JsonRpcRequest;
public static synthetic fun copy-09H__7E$default (Lcom/agentclientprotocol/rpc/JsonRpcRequest;Lcom/agentclientprotocol/rpc/RequestId;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;Ljava/lang/String;ILjava/lang/Object;)Lcom/agentclientprotocol/rpc/JsonRpcRequest;
public fun equals (Ljava/lang/Object;)Z
public final fun getId-2bfd730 ()I
public final fun getId ()Lcom/agentclientprotocol/rpc/RequestId;
public final fun getJsonrpc ()Ljava/lang/String;
public final fun getMethod-6j0qeeA ()Ljava/lang/String;
public final fun getParams ()Lkotlinx/serialization/json/JsonElement;
Expand All @@ -3197,17 +3197,17 @@ public final class com/agentclientprotocol/rpc/JsonRpcRequest$Companion {

public final class com/agentclientprotocol/rpc/JsonRpcResponse : com/agentclientprotocol/rpc/JsonRpcMessage {
public static final field Companion Lcom/agentclientprotocol/rpc/JsonRpcResponse$Companion;
public synthetic fun <init> (ILkotlinx/serialization/json/JsonElement;Lcom/agentclientprotocol/rpc/JsonRpcError;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (ILkotlinx/serialization/json/JsonElement;Lcom/agentclientprotocol/rpc/JsonRpcError;Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1-2bfd730 ()I
public fun <init> (Lcom/agentclientprotocol/rpc/RequestId;Lkotlinx/serialization/json/JsonElement;Lcom/agentclientprotocol/rpc/JsonRpcError;Ljava/lang/String;)V
public synthetic fun <init> (Lcom/agentclientprotocol/rpc/RequestId;Lkotlinx/serialization/json/JsonElement;Lcom/agentclientprotocol/rpc/JsonRpcError;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Lcom/agentclientprotocol/rpc/RequestId;
public final fun component2 ()Lkotlinx/serialization/json/JsonElement;
public final fun component3 ()Lcom/agentclientprotocol/rpc/JsonRpcError;
public final fun component4 ()Ljava/lang/String;
public final fun copy-w48UGhM (ILkotlinx/serialization/json/JsonElement;Lcom/agentclientprotocol/rpc/JsonRpcError;Ljava/lang/String;)Lcom/agentclientprotocol/rpc/JsonRpcResponse;
public static synthetic fun copy-w48UGhM$default (Lcom/agentclientprotocol/rpc/JsonRpcResponse;ILkotlinx/serialization/json/JsonElement;Lcom/agentclientprotocol/rpc/JsonRpcError;Ljava/lang/String;ILjava/lang/Object;)Lcom/agentclientprotocol/rpc/JsonRpcResponse;
public final fun copy (Lcom/agentclientprotocol/rpc/RequestId;Lkotlinx/serialization/json/JsonElement;Lcom/agentclientprotocol/rpc/JsonRpcError;Ljava/lang/String;)Lcom/agentclientprotocol/rpc/JsonRpcResponse;
public static synthetic fun copy$default (Lcom/agentclientprotocol/rpc/JsonRpcResponse;Lcom/agentclientprotocol/rpc/RequestId;Lkotlinx/serialization/json/JsonElement;Lcom/agentclientprotocol/rpc/JsonRpcError;Ljava/lang/String;ILjava/lang/Object;)Lcom/agentclientprotocol/rpc/JsonRpcResponse;
public fun equals (Ljava/lang/Object;)Z
public final fun getError ()Lcom/agentclientprotocol/rpc/JsonRpcError;
public final fun getId-2bfd730 ()I
public final fun getId ()Lcom/agentclientprotocol/rpc/RequestId;
public final fun getJsonrpc ()Ljava/lang/String;
public final fun getResult ()Lkotlinx/serialization/json/JsonElement;
public fun hashCode ()I
Expand Down Expand Up @@ -3259,33 +3259,14 @@ public final class com/agentclientprotocol/rpc/MethodName$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}

public final class com/agentclientprotocol/rpc/RequestId {
public abstract interface class com/agentclientprotocol/rpc/RequestId {
public static final field Companion Lcom/agentclientprotocol/rpc/RequestId$Companion;
public static final synthetic fun box-impl (I)Lcom/agentclientprotocol/rpc/RequestId;
public static fun constructor-impl (I)I
public fun equals (Ljava/lang/Object;)Z
public static fun equals-impl (ILjava/lang/Object;)Z
public static final fun equals-impl0 (II)Z
public final fun getValue ()I
public fun hashCode ()I
public static fun hashCode-impl (I)I
public fun toString ()Ljava/lang/String;
public static fun toString-impl (I)Ljava/lang/String;
public final synthetic fun unbox-impl ()I
}

public final synthetic class com/agentclientprotocol/rpc/RequestId$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
public static final field INSTANCE Lcom/agentclientprotocol/rpc/RequestId$$serializer;
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
public final fun deserialize-xpv-AYA (Lkotlinx/serialization/encoding/Decoder;)I
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
public final fun serialize-mnwyFJI (Lkotlinx/serialization/encoding/Encoder;I)V
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
public abstract fun getValue ()Ljava/lang/Object;
}

public final class com/agentclientprotocol/rpc/RequestId$Companion {
public final fun create (I)Lcom/agentclientprotocol/rpc/RequestId;
public final fun create (Ljava/lang/String;)Lcom/agentclientprotocol/rpc/RequestId;
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}

Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,19 @@
package com.agentclientprotocol.rpc

import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializable
import kotlinx.serialization.SerializationException
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonDecoder
import kotlinx.serialization.json.JsonElement
import kotlinx.serialization.json.JsonObject
import kotlinx.serialization.json.JsonPrimitive
import kotlin.jvm.JvmInline

/**
Expand All @@ -17,13 +25,69 @@ public const val JSONRPC_VERSION: String = "2.0"

/**
* Request ID for JSON-RPC messages.
* Can be either an integer or a string according to JSON-RPC 2.0 spec.
*/
@Serializable(with = RequestIdSerializer::class)
public sealed interface RequestId {
public val value: Any

public companion object {
public fun create(value: Int): RequestId = IntRequestId(value)
public fun create(value: String): RequestId = StringRequestId(value)
}
}

/**
* Integer-based request ID.
*/
@JvmInline
@Serializable
public value class RequestId(public val value: Int) {
private data class IntRequestId(override val value: Int) : RequestId {
override fun toString(): String = value.toString()
}

/**
* String-based request ID.
*/
@Serializable
private data class StringRequestId(override val value: String) : RequestId {
override fun toString(): String = value
}

/**
* Custom serializer for RequestId that handles both int and string values.
*/
internal object RequestIdSerializer : KSerializer<RequestId> {
override val descriptor: SerialDescriptor =
PrimitiveSerialDescriptor("RequestId", PrimitiveKind.STRING)

override fun serialize(encoder: Encoder, value: RequestId) {
when (value) {
is IntRequestId -> encoder.encodeInt(value.value)
is StringRequestId -> encoder.encodeString(value.value)
}
}

override fun deserialize(decoder: Decoder): RequestId {
val jsonDecoder = decoder as? JsonDecoder
?: throw SerializationException("RequestId can only be deserialized from JSON")

return when (val element = jsonDecoder.decodeJsonElement()) {
is JsonPrimitive -> {
if (element.isString) {
StringRequestId(element.content)
} else {
try {
IntRequestId(element.content.toInt())
} catch (e: NumberFormatException) {
throw SerializationException("RequestId must be an int or string", e)
}
}
}
else -> throw SerializationException("RequestId must be a primitive (int or string)")
}
}
}

@JvmInline
@Serializable
public value class MethodName(public val name: String)
Expand Down
Loading
Loading