You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This PR contains all features required to serialize and parse COSE-compliant CBOR (thanks to @nodh). While some canonicalization steps (such as sorting keys) still need to be performed manually. It does get the job done quite well. Namely, we have successfully used the features introduced here to create and validate ISO/IEC 18013-5:2021-compliant mobile driving license data.
This PR introduces the following features to the CBOR format:
- Serial Labels
- Tagging of keys and values
- Definite length encoding (this is the largest change, as it effectively makes the cbor encoder two-pass)
- Option to globally prefer major type 2 for byte array encoding
- Various QoL changes, such as public CborEncoder/CborDecoder interfaces and separate CborConfiguration class.
This PR obsoletes #2371 and #2359 as it contains the features of both PRs and many more.
Fixes#1955Fixes#1560
Co-authored-by: Christian Kollmann <[email protected]>
Co-authored-by: Leonid Startsev <[email protected]>
Copy file name to clipboardExpand all lines: formats/cbor/api/kotlinx-serialization-cbor.api
+119-1Lines changed: 119 additions & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -7,26 +7,144 @@ public synthetic class kotlinx/serialization/cbor/ByteString$Impl : kotlinx/seri
7
7
8
8
public abstract class kotlinx/serialization/cbor/Cbor : kotlinx/serialization/BinaryFormat {
9
9
public static final field Default Lkotlinx/serialization/cbor/Cbor$Default;
10
-
public synthetic fun <init> (ZZLkotlinx/serialization/modules/SerializersModule;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
10
+
public synthetic fun <init> (Lkotlinx/serialization/cbor/CborConfiguration;Lkotlinx/serialization/modules/SerializersModule;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
11
11
public fun decodeFromByteArray (Lkotlinx/serialization/DeserializationStrategy;[B)Ljava/lang/Object;
12
12
public fun encodeToByteArray (Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)[B
13
+
public final fun getConfiguration ()Lkotlinx/serialization/cbor/CborConfiguration;
13
14
public fun getSerializersModule ()Lkotlinx/serialization/modules/SerializersModule;
14
15
}
15
16
16
17
public final class kotlinx/serialization/cbor/Cbor$Default : kotlinx/serialization/cbor/Cbor {
18
+
public final fun getCoseCompliant ()Lkotlinx/serialization/cbor/Cbor;
19
+
}
20
+
21
+
public abstract interface annotation class kotlinx/serialization/cbor/CborArray : java/lang/annotation/Annotation {
22
+
}
23
+
24
+
public synthetic class kotlinx/serialization/cbor/CborArray$Impl : kotlinx/serialization/cbor/CborArray {
25
+
public fun <init> ()V
17
26
}
18
27
19
28
public final class kotlinx/serialization/cbor/CborBuilder {
29
+
public final fun getAlwaysUseByteString ()Z
20
30
public final fun getEncodeDefaults ()Z
31
+
public final fun getEncodeKeyTags ()Z
32
+
public final fun getEncodeObjectTags ()Z
33
+
public final fun getEncodeValueTags ()Z
21
34
public final fun getIgnoreUnknownKeys ()Z
35
+
public final fun getPreferCborLabelsOverNames ()Z
22
36
public final fun getSerializersModule ()Lkotlinx/serialization/modules/SerializersModule;
37
+
public final fun getUseDefiniteLengthEncoding ()Z
38
+
public final fun getVerifyKeyTags ()Z
39
+
public final fun getVerifyObjectTags ()Z
40
+
public final fun getVerifyValueTags ()Z
41
+
public final fun setAlwaysUseByteString (Z)V
23
42
public final fun setEncodeDefaults (Z)V
43
+
public final fun setEncodeKeyTags (Z)V
44
+
public final fun setEncodeObjectTags (Z)V
45
+
public final fun setEncodeValueTags (Z)V
24
46
public final fun setIgnoreUnknownKeys (Z)V
47
+
public final fun setPreferCborLabelsOverNames (Z)V
25
48
public final fun setSerializersModule (Lkotlinx/serialization/modules/SerializersModule;)V
49
+
public final fun setUseDefiniteLengthEncoding (Z)V
50
+
public final fun setVerifyKeyTags (Z)V
51
+
public final fun setVerifyObjectTags (Z)V
52
+
public final fun setVerifyValueTags (Z)V
53
+
}
54
+
55
+
public final class kotlinx/serialization/cbor/CborConfiguration {
56
+
public final fun getAlwaysUseByteString ()Z
57
+
public final fun getEncodeDefaults ()Z
58
+
public final fun getEncodeKeyTags ()Z
59
+
public final fun getEncodeObjectTags ()Z
60
+
public final fun getEncodeValueTags ()Z
61
+
public final fun getIgnoreUnknownKeys ()Z
62
+
public final fun getPreferCborLabelsOverNames ()Z
63
+
public final fun getUseDefiniteLengthEncoding ()Z
64
+
public final fun getVerifyKeyTags ()Z
65
+
public final fun getVerifyObjectTags ()Z
66
+
public final fun getVerifyValueTags ()Z
67
+
public fun toString ()Ljava/lang/String;
68
+
}
69
+
70
+
public abstract interface class kotlinx/serialization/cbor/CborDecoder : kotlinx/serialization/encoding/Decoder {
71
+
public abstract fun getCbor ()Lkotlinx/serialization/cbor/Cbor;
72
+
}
73
+
74
+
public final class kotlinx/serialization/cbor/CborDecoder$DefaultImpls {
75
+
public static fun decodeNullableSerializableValue (Lkotlinx/serialization/cbor/CborDecoder;Lkotlinx/serialization/DeserializationStrategy;)Ljava/lang/Object;
76
+
public static fun decodeSerializableValue (Lkotlinx/serialization/cbor/CborDecoder;Lkotlinx/serialization/DeserializationStrategy;)Ljava/lang/Object;
77
+
}
78
+
79
+
public abstract interface class kotlinx/serialization/cbor/CborEncoder : kotlinx/serialization/encoding/Encoder {
80
+
public abstract fun getCbor ()Lkotlinx/serialization/cbor/Cbor;
81
+
}
82
+
83
+
public final class kotlinx/serialization/cbor/CborEncoder$DefaultImpls {
84
+
public static fun beginCollection (Lkotlinx/serialization/cbor/CborEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;I)Lkotlinx/serialization/encoding/CompositeEncoder;
85
+
public static fun encodeNotNullMark (Lkotlinx/serialization/cbor/CborEncoder;)V
86
+
public static fun encodeNullableSerializableValue (Lkotlinx/serialization/cbor/CborEncoder;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V
87
+
public static fun encodeSerializableValue (Lkotlinx/serialization/cbor/CborEncoder;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V
26
88
}
27
89
28
90
public final class kotlinx/serialization/cbor/CborKt {
29
91
public static final fun Cbor (Lkotlinx/serialization/cbor/Cbor;Lkotlin/jvm/functions/Function1;)Lkotlinx/serialization/cbor/Cbor;
30
92
public static synthetic fun Cbor$default (Lkotlinx/serialization/cbor/Cbor;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/serialization/cbor/Cbor;
31
93
}
32
94
95
+
public abstract interface annotation class kotlinx/serialization/cbor/CborLabel : java/lang/annotation/Annotation {
96
+
public abstract fun label ()J
97
+
}
98
+
99
+
public synthetic class kotlinx/serialization/cbor/CborLabel$Impl : kotlinx/serialization/cbor/CborLabel {
100
+
public fun <init> (J)V
101
+
public final synthetic fun label ()J
102
+
}
103
+
104
+
public final class kotlinx/serialization/cbor/CborTag {
105
+
public static final field BASE16 J
106
+
public static final field BASE64 J
107
+
public static final field BASE64_URL J
108
+
public static final field BIGFLOAT J
109
+
public static final field BIGNUM_NEGAIVE J
110
+
public static final field BIGNUM_POSITIVE J
111
+
public static final field CBOR_ENCODED_DATA J
112
+
public static final field CBOR_SELF_DESCRIBE J
113
+
public static final field DATE_TIME_EPOCH J
114
+
public static final field DATE_TIME_STANDARD J
115
+
public static final field DECIMAL_FRACTION J
116
+
public static final field INSTANCE Lkotlinx/serialization/cbor/CborTag;
117
+
public static final field MIME_MESSAGE J
118
+
public static final field REGEX J
119
+
public static final field STRING_BASE64 J
120
+
public static final field STRING_BASE64_URL J
121
+
public static final field URI J
122
+
}
123
+
124
+
public abstract interface annotation class kotlinx/serialization/cbor/KeyTags : java/lang/annotation/Annotation {
125
+
public abstract fun tags ()[J
126
+
}
127
+
128
+
public synthetic class kotlinx/serialization/cbor/KeyTags$Impl : kotlinx/serialization/cbor/KeyTags {
129
+
public synthetic fun <init> ([JLkotlin/jvm/internal/DefaultConstructorMarker;)V
130
+
public final synthetic fun tags ()[J
131
+
}
132
+
133
+
public abstract interface annotation class kotlinx/serialization/cbor/ObjectTags : java/lang/annotation/Annotation {
134
+
public abstract fun tags ()[J
135
+
}
136
+
137
+
public synthetic class kotlinx/serialization/cbor/ObjectTags$Impl : kotlinx/serialization/cbor/ObjectTags {
138
+
public synthetic fun <init> ([JLkotlin/jvm/internal/DefaultConstructorMarker;)V
139
+
public final synthetic fun tags ()[J
140
+
}
141
+
142
+
public abstract interface annotation class kotlinx/serialization/cbor/ValueTags : java/lang/annotation/Annotation {
143
+
public abstract fun tags ()[J
144
+
}
145
+
146
+
public synthetic class kotlinx/serialization/cbor/ValueTags$Impl : kotlinx/serialization/cbor/ValueTags {
147
+
public synthetic fun <init> ([JLkotlin/jvm/internal/DefaultConstructorMarker;)V
0 commit comments