Skip to content

Commit b3ace9d

Browse files
Merge pull request #23 from Soneso/xdr-gen-fix
Fix XDR generator multi-case discriminant collapse
2 parents 100e8a2 + ed07b46 commit b3ace9d

15 files changed

Lines changed: 301 additions & 81 deletions

File tree

stellar-sdk/src/commonMain/kotlin/com/soneso/stellar/sdk/xdr/BucketEntryXdr.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,9 @@ sealed class BucketEntryXdr {
2121
abstract val discriminant: BucketEntryTypeXdr
2222

2323
data class LiveEntry(
24+
override val discriminant: BucketEntryTypeXdr,
2425
val value: LedgerEntryXdr
25-
) : BucketEntryXdr() {
26-
override val discriminant: BucketEntryTypeXdr = BucketEntryTypeXdr.LIVEENTRY
27-
}
26+
) : BucketEntryXdr()
2827

2928
data class DeadEntry(
3029
val value: LedgerKeyXdr
@@ -45,11 +44,11 @@ sealed class BucketEntryXdr {
4544
return when (discriminant) {
4645
BucketEntryTypeXdr.LIVEENTRY -> {
4746
val value = LedgerEntryXdr.decode(reader)
48-
LiveEntry(value)
47+
LiveEntry(discriminant, value)
4948
}
5049
BucketEntryTypeXdr.INITENTRY -> {
5150
val value = LedgerEntryXdr.decode(reader)
52-
LiveEntry(value)
51+
LiveEntry(discriminant, value)
5352
}
5453
BucketEntryTypeXdr.DEADENTRY -> {
5554
val value = LedgerKeyXdr.decode(reader)

stellar-sdk/src/commonMain/kotlin/com/soneso/stellar/sdk/xdr/InnerTransactionResultResultXdr.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,9 @@ sealed class InnerTransactionResultResultXdr {
3636

3737
/** txFEE_BUMP_INNER_SUCCESS is not included */
3838
data class Results(
39+
override val discriminant: TransactionResultCodeXdr,
3940
val value: List<OperationResultXdr>
40-
) : InnerTransactionResultResultXdr() {
41-
override val discriminant: TransactionResultCodeXdr = TransactionResultCodeXdr.txSUCCESS
42-
}
41+
) : InnerTransactionResultResultXdr()
4342

4443
/** txFEE_BUMP_INNER_FAILED is not included */
4544
data class Void(
@@ -53,11 +52,11 @@ sealed class InnerTransactionResultResultXdr {
5352
return when (discriminant) {
5453
TransactionResultCodeXdr.txSUCCESS -> {
5554
val value = List(reader.readInt()) { OperationResultXdr.decode(reader) }
56-
Results(value)
55+
Results(discriminant, value)
5756
}
5857
TransactionResultCodeXdr.txFAILED -> {
5958
val value = List(reader.readInt()) { OperationResultXdr.decode(reader) }
60-
Results(value)
59+
Results(discriminant, value)
6160
}
6261
TransactionResultCodeXdr.txTOO_EARLY -> Void(discriminant)
6362
TransactionResultCodeXdr.txTOO_LATE -> Void(discriminant)

stellar-sdk/src/commonMain/kotlin/com/soneso/stellar/sdk/xdr/ManageOfferSuccessResultOfferXdr.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,9 @@ sealed class ManageOfferSuccessResultOfferXdr {
1818
abstract val discriminant: ManageOfferEffectXdr
1919

2020
data class Offer(
21+
override val discriminant: ManageOfferEffectXdr,
2122
val value: OfferEntryXdr
22-
) : ManageOfferSuccessResultOfferXdr() {
23-
override val discriminant: ManageOfferEffectXdr = ManageOfferEffectXdr.MANAGE_OFFER_CREATED
24-
}
23+
) : ManageOfferSuccessResultOfferXdr()
2524

2625
data object Void : ManageOfferSuccessResultOfferXdr() {
2726
override val discriminant: ManageOfferEffectXdr = ManageOfferEffectXdr.MANAGE_OFFER_DELETED
@@ -34,11 +33,11 @@ sealed class ManageOfferSuccessResultOfferXdr {
3433
return when (discriminant) {
3534
ManageOfferEffectXdr.MANAGE_OFFER_CREATED -> {
3635
val value = OfferEntryXdr.decode(reader)
37-
Offer(value)
36+
Offer(discriminant, value)
3837
}
3938
ManageOfferEffectXdr.MANAGE_OFFER_UPDATED -> {
4039
val value = OfferEntryXdr.decode(reader)
41-
Offer(value)
40+
Offer(discriminant, value)
4241
}
4342
ManageOfferEffectXdr.MANAGE_OFFER_DELETED -> Void
4443
else -> throw IllegalArgumentException("Unknown ManageOfferSuccessResultOfferXdr discriminant: $discriminant")

stellar-sdk/src/commonMain/kotlin/com/soneso/stellar/sdk/xdr/SCErrorXdr.kt

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,9 @@ sealed class SCErrorXdr {
3131
}
3232

3333
data class Code(
34+
override val discriminant: SCErrorTypeXdr,
3435
val value: SCErrorCodeXdr
35-
) : SCErrorXdr() {
36-
override val discriminant: SCErrorTypeXdr = SCErrorTypeXdr.SCE_WASM_VM
37-
}
36+
) : SCErrorXdr()
3837

3938
companion object {
4039

@@ -47,39 +46,39 @@ sealed class SCErrorXdr {
4746
}
4847
SCErrorTypeXdr.SCE_WASM_VM -> {
4948
val value = SCErrorCodeXdr.decode(reader)
50-
Code(value)
49+
Code(discriminant, value)
5150
}
5251
SCErrorTypeXdr.SCE_CONTEXT -> {
5352
val value = SCErrorCodeXdr.decode(reader)
54-
Code(value)
53+
Code(discriminant, value)
5554
}
5655
SCErrorTypeXdr.SCE_STORAGE -> {
5756
val value = SCErrorCodeXdr.decode(reader)
58-
Code(value)
57+
Code(discriminant, value)
5958
}
6059
SCErrorTypeXdr.SCE_OBJECT -> {
6160
val value = SCErrorCodeXdr.decode(reader)
62-
Code(value)
61+
Code(discriminant, value)
6362
}
6463
SCErrorTypeXdr.SCE_CRYPTO -> {
6564
val value = SCErrorCodeXdr.decode(reader)
66-
Code(value)
65+
Code(discriminant, value)
6766
}
6867
SCErrorTypeXdr.SCE_EVENTS -> {
6968
val value = SCErrorCodeXdr.decode(reader)
70-
Code(value)
69+
Code(discriminant, value)
7170
}
7271
SCErrorTypeXdr.SCE_BUDGET -> {
7372
val value = SCErrorCodeXdr.decode(reader)
74-
Code(value)
73+
Code(discriminant, value)
7574
}
7675
SCErrorTypeXdr.SCE_VALUE -> {
7776
val value = SCErrorCodeXdr.decode(reader)
78-
Code(value)
77+
Code(discriminant, value)
7978
}
8079
SCErrorTypeXdr.SCE_AUTH -> {
8180
val value = SCErrorCodeXdr.decode(reader)
82-
Code(value)
81+
Code(discriminant, value)
8382
}
8483
else -> throw IllegalArgumentException("Unknown SCErrorXdr discriminant: $discriminant")
8584
}

stellar-sdk/src/commonMain/kotlin/com/soneso/stellar/sdk/xdr/TransactionResultResultXdr.kt

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,14 @@ sealed class TransactionResultResultXdr {
3737
abstract val discriminant: TransactionResultCodeXdr
3838

3939
data class InnerResultPair(
40+
override val discriminant: TransactionResultCodeXdr,
4041
val value: InnerTransactionResultPairXdr
41-
) : TransactionResultResultXdr() {
42-
override val discriminant: TransactionResultCodeXdr = TransactionResultCodeXdr.txFEE_BUMP_INNER_SUCCESS
43-
}
42+
) : TransactionResultResultXdr()
4443

4544
data class Results(
45+
override val discriminant: TransactionResultCodeXdr,
4646
val value: List<OperationResultXdr>
47-
) : TransactionResultResultXdr() {
48-
override val discriminant: TransactionResultCodeXdr = TransactionResultCodeXdr.txSUCCESS
49-
}
47+
) : TransactionResultResultXdr()
5048

5149
/** case txFEE_BUMP_INNER_FAILED: handled above */
5250
data class Void(
@@ -60,19 +58,19 @@ sealed class TransactionResultResultXdr {
6058
return when (discriminant) {
6159
TransactionResultCodeXdr.txFEE_BUMP_INNER_SUCCESS -> {
6260
val value = InnerTransactionResultPairXdr.decode(reader)
63-
InnerResultPair(value)
61+
InnerResultPair(discriminant, value)
6462
}
6563
TransactionResultCodeXdr.txFEE_BUMP_INNER_FAILED -> {
6664
val value = InnerTransactionResultPairXdr.decode(reader)
67-
InnerResultPair(value)
65+
InnerResultPair(discriminant, value)
6866
}
6967
TransactionResultCodeXdr.txSUCCESS -> {
7068
val value = List(reader.readInt()) { OperationResultXdr.decode(reader) }
71-
Results(value)
69+
Results(discriminant, value)
7270
}
7371
TransactionResultCodeXdr.txFAILED -> {
7472
val value = List(reader.readInt()) { OperationResultXdr.decode(reader) }
75-
Results(value)
73+
Results(discriminant, value)
7674
}
7775
TransactionResultCodeXdr.txTOO_EARLY -> Void(discriminant)
7876
TransactionResultCodeXdr.txTOO_LATE -> Void(discriminant)

stellar-sdk/src/commonTest/kotlin/com/soneso/stellar/sdk/unitTests/contract/ContractSpecTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1408,7 +1408,7 @@ class ContractSpecTest {
14081408
assertEquals(42u, (result as SCErrorXdr.ContractCode).value.value)
14091409

14101410
// Test with WasmVm error
1411-
val wasmError = SCErrorXdr.Code(SCErrorCodeXdr.SCEC_ARITH_DOMAIN)
1411+
val wasmError = SCErrorXdr.Code(SCErrorTypeXdr.SCE_WASM_VM, SCErrorCodeXdr.SCEC_ARITH_DOMAIN)
14121412
val scValCodeError = SCValXdr.Error(wasmError)
14131413
val codeResult = spec.scValToNative(scValCodeError, null)
14141414

stellar-sdk/src/commonTest/kotlin/com/soneso/stellar/sdk/unitTests/xdr/XdrBucketEntryTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ class XdrBucketEntryTest {
9595

9696
@Test
9797
fun testBucketEntryLiveEntry() {
98-
val entry = BucketEntryXdr.LiveEntry(simpleLedgerEntry())
98+
val entry = BucketEntryXdr.LiveEntry(BucketEntryTypeXdr.LIVEENTRY, simpleLedgerEntry())
9999
assertXdrRoundTrip(entry, { v, w -> v.encode(w) }, { r -> BucketEntryXdr.decode(r) })
100100
}
101101

0 commit comments

Comments
 (0)