Skip to content

Commit c10bf9b

Browse files
authored
Merge pull request #80 from MercuryTechnologies/tad/sealed-interface
Kotlin: Generate sealed interfaces for tagged objects
2 parents 66549a9 + 251411c commit c10bf9b

File tree

9 files changed

+22
-24
lines changed
  • .golden
    • kotlinEnumSumOfProductDocSpec
    • kotlinEnumSumOfProductSpec
    • kotlinEnumSumOfProductWithLinkEnumInterfaceSpec
    • kotlinEnumSumOfProductWithTaggedFlatObjectStyleSpec
    • kotlinEnumSumOfProductWithTaggedObjectAndNonConcreteCasesSpec
    • kotlinEnumSumOfProductWithTaggedObjectAndSingleNullarySpec
    • kotlinEnumSumOfProductWithTaggedObjectStyleSpec
    • kotlinSumOfProductWithTypeParameterSpec
  • src/Moat/Pretty

9 files changed

+22
-24
lines changed
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
/** Top-level documentation describing [Enum]. */
22
@JsonClassDiscriminator("tag")
33
@Serializable
4-
sealed class Enum : Parcelable {
4+
sealed interface Enum : Parcelable {
55
/** A constructor. */
66
@Parcelize
77
@Serializable
88
@SerialName("dataCons0")
9-
data class DataCons0(val contents: Record0) : Enum()
9+
data class DataCons0(val contents: Record0) : Enum
1010

1111
/** Another constructor. */
1212
@Parcelize
1313
@Serializable
1414
@SerialName("dataCons1")
15-
data class DataCons1(val contents: Record1) : Enum()
15+
data class DataCons1(val contents: Record1) : Enum
1616
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
@Serializable
2-
sealed class Enum : Parcelable
2+
sealed interface Enum : Parcelable
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
@Serializable(with = Enum1Serializer::class)
2-
sealed class Enum : Parcelable
2+
sealed interface Enum : Parcelable
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
@Serializable
2-
sealed class Enum : Parcelable
2+
sealed interface Enum : Parcelable
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
@JsonClassDiscriminator("tag")
22
@Serializable
3-
sealed class Enum : Parcelable {
3+
sealed interface Enum : Parcelable {
44
@Parcelize
55
@Serializable
66
@SerialName("dataCons0")
7-
data class DataCons0(val contents: List<Record0>) : Enum()
7+
data class DataCons0(val contents: List<Record0>) : Enum
88

99
@Parcelize
1010
@Serializable
1111
@SerialName("dataCons1")
12-
data class DataCons1(val contents: List<Record1>) : Enum()
12+
data class DataCons1(val contents: List<Record1>) : Enum
1313
}
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
@JsonClassDiscriminator("tag")
22
@Serializable
3-
sealed class Enum : Parcelable {
3+
sealed interface Enum : Parcelable {
44
@Parcelize
55
@Serializable
66
@SerialName("dataCons0")
7-
data class DataCons0(val contents: Record0) : Enum()
7+
data class DataCons0(val contents: Record0) : Enum
88

99
@Parcelize
1010
@Serializable
1111
@SerialName("dataCons1")
12-
data object DataCons1 : Enum()
12+
data object DataCons1 : Enum
1313
}
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
@JsonClassDiscriminator("tag")
22
@Serializable
3-
sealed class Enum : Parcelable {
3+
sealed interface Enum : Parcelable {
44
@Parcelize
55
@Serializable
66
@SerialName("dataCons0")
7-
data class DataCons0(val contents: Record0) : Enum()
7+
data class DataCons0(val contents: Record0) : Enum
88

99
@Parcelize
1010
@Serializable
1111
@SerialName("dataCons1")
12-
data class DataCons1(val contents: Record1) : Enum()
12+
data class DataCons1(val contents: Record1) : Enum
1313

1414
@Parcelize
1515
@Serializable
1616
@SerialName("dataCons2")
17-
data object DataCons2 : Enum()
17+
data object DataCons2 : Enum
1818
}
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
@JsonClassDiscriminator("direction")
22
@Serializable
3-
sealed class CursorInput<A> {
3+
sealed interface CursorInput<A> {
44
@Serializable
55
@SerialName("nextPage")
6-
data class NextPage<A>(val key: A?) : CursorInput<A>()
6+
data class NextPage<A>(val key: A?) : CursorInput<A>
77

88
@Serializable
99
@SerialName("previousPage")
10-
data class PreviousPage<A>(val key: A) : CursorInput<A>()
10+
data class PreviousPage<A>(val key: A) : CursorInput<A>
1111

1212
@Serializable
1313
@SerialName("unknown")
14-
data object Unknown : CursorInput<Nothing>()
14+
data object Unknown : CursorInput<Nothing>
1515
}

src/Moat/Pretty/Kotlin.hs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,6 @@ prettyTaggedObject parentName tyVars anns ifaces cases indents SumOfProductEncod
247247
++ prettyMoatType caseTy
248248
++ ") : "
249249
++ parentTypeHeader
250-
++ "()"
251250
EnumCase caseNm caseDoc [] ->
252251
prettyTypeDoc indents caseDoc []
253252
++ prettyAnnotations (Just caseNm) indents anns
@@ -256,7 +255,6 @@ prettyTaggedObject parentName tyVars anns ifaces cases indents SumOfProductEncod
256255
++ objectCaseTypeHeader caseNm
257256
++ " : "
258257
++ objectParentTypeHeader
259-
++ "()"
260258
EnumCase caseNm _ _ ->
261259
error $
262260
"prettyTaggedObject: The data constructor "
@@ -326,7 +324,7 @@ prettyEnum doc anns ifaces name tyVars cases sop@SumOfProductEncodingOptions {..
326324
TaggedFlatObjectStyle ->
327325
prettyTypeDoc noIndent doc []
328326
++ prettyAnnotations Nothing noIndent (dontAddParcelizeToSealedClasses anns)
329-
++ "sealed class "
327+
++ "sealed interface "
330328
++ classTyp
331329
++ prettyInterfaces ifaces
332330
TaggedObjectStyle ->
@@ -335,7 +333,7 @@ prettyEnum doc anns ifaces name tyVars cases sop@SumOfProductEncodingOptions {..
335333
Nothing
336334
noIndent
337335
(dontAddParcelizeToSealedClasses (sumAnnotations ++ anns))
338-
++ "sealed class "
336+
++ "sealed interface "
339337
++ classTyp
340338
++ prettyInterfaces ifaces
341339
++ " {\n"

0 commit comments

Comments
 (0)