-
Notifications
You must be signed in to change notification settings - Fork 2
/
ProtocolType.kt
81 lines (74 loc) · 3.94 KB
/
ProtocolType.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package io.iohk.atala.prism.walletsdk.prismagent.protocols
import io.iohk.atala.prism.walletsdk.prismagent.PROTOCOL_TYPE
import io.iohk.atala.prism.walletsdk.prismagent.PrismAgentError
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializable
import kotlinx.serialization.Serializer
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
@Serializable(with = ProtocolTypeSerializer::class)
enum class ProtocolType(val value: String) {
DidcommMediationRequest("https://didcomm.org/coordinate-mediation/2.0/mediate-request"),
DidcommMediationGrant("https://didcomm.org/coordinate-mediation/2.0/mediate-grant"),
DidcommMediationDeny("https://didcomm.org/coordinate-mediation/2.0/mediate-deny"),
DidcommMediationKeysUpdate("https://didcomm.org/coordinate-mediation/2.0/keylist-update"),
DidcommPresentation("https://didcomm.atalaprism.io/present-proof/3.0/presentation"),
DidcommRequestPresentation("https://didcomm.atalaprism.io/present-proof/3.0/request-presentation"),
DidcommProposePresentation("https://didcomm.atalaprism.io/present-proof/3.0/propose-presentation"),
DidcommCredentialPreview("https://didcomm.org/issue-credential/3.0/credential-preview"),
DidcommIssueCredential("https://didcomm.org/issue-credential/3.0/issue-credential"),
DidcommOfferCredential("https://didcomm.org/issue-credential/3.0/offer-credential"),
DidcommProposeCredential("https://didcomm.org/issue-credential/3.0/propose-credential"),
DidcommRequestCredential("https://didcomm.org/issue-credential/3.0/request-credential"),
DidcommconnectionRequest("https://atalaprism.io/mercury/connections/1.0/request"),
DidcommconnectionResponse("https://atalaprism.io/mercury/connections/1.0/response"),
Didcomminvitation("https://didcomm.org/out-of-band/2.0/invitation"),
PrismOnboarding("https://atalaprism.io/did-request"),
PickupRequest("https://didcomm.org/messagepickup/3.0/delivery-request"),
PickupDelivery("https://didcomm.org/messagepickup/3.0/delivery"),
PickupStatus("https://didcomm.org/messagepickup/3.0/status"),
PickupReceived("https://didcomm.org/messagepickup/3.0/messages-received"),
LiveDeliveryChange("https://didcomm.org/messagepickup/3.0/live-delivery-change"),
None("");
companion object {
@JvmStatic
fun findProtocolType(type: String, default: ProtocolType): ProtocolType {
return ProtocolType.values().find { it.value == type } ?: default
}
}
}
@OptIn(ExperimentalSerializationApi::class)
@Serializer(forClass = ProtocolType::class)
object ProtocolTypeSerializer : KSerializer<ProtocolType> {
override val descriptor: SerialDescriptor
get() = PrimitiveSerialDescriptor(PROTOCOL_TYPE, PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: ProtocolType) {
encoder.encodeString(value.value)
}
override fun deserialize(decoder: Decoder): ProtocolType {
val protocolType = decoder.decodeString()
return ProtocolType.findProtocolType(protocolType, ProtocolType.None)
}
}
/**
* Finds the ProtocolType based on the given string value.
*
* @param string The string value to match with the ProtocolType's value.
* @return The matched ProtocolType.
* @throws PrismAgentError.UnknownInvitationTypeError If the type of the invitation is not supported.
*/
@Throws(PrismAgentError.UnknownInvitationTypeError::class)
fun findProtocolTypeByValue(string: String): ProtocolType {
val it = ProtocolType.values().iterator()
while (it.hasNext()) {
val internalType = it.next()
if (internalType.value == string) {
return internalType
}
}
throw PrismAgentError.UnknownInvitationTypeError(string)
}