Skip to content

Commit

Permalink
Kotlin: Generate sealed interfaces for tagged objects
Browse files Browse the repository at this point in the history
  • Loading branch information
tadfisher committed Mar 8, 2024
1 parent 66549a9 commit 251411c
Show file tree
Hide file tree
Showing 9 changed files with 22 additions and 24 deletions.
6 changes: 3 additions & 3 deletions .golden/kotlinEnumSumOfProductDocSpec/golden
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
/** Top-level documentation describing [Enum]. */
@JsonClassDiscriminator("tag")
@Serializable
sealed class Enum : Parcelable {
sealed interface Enum : Parcelable {
/** A constructor. */
@Parcelize
@Serializable
@SerialName("dataCons0")
data class DataCons0(val contents: Record0) : Enum()
data class DataCons0(val contents: Record0) : Enum

/** Another constructor. */
@Parcelize
@Serializable
@SerialName("dataCons1")
data class DataCons1(val contents: Record1) : Enum()
data class DataCons1(val contents: Record1) : Enum
}
2 changes: 1 addition & 1 deletion .golden/kotlinEnumSumOfProductSpec/golden
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
@Serializable
sealed class Enum : Parcelable
sealed interface Enum : Parcelable
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
@Serializable(with = Enum1Serializer::class)
sealed class Enum : Parcelable
sealed interface Enum : Parcelable
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
@Serializable
sealed class Enum : Parcelable
sealed interface Enum : Parcelable
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
@JsonClassDiscriminator("tag")
@Serializable
sealed class Enum : Parcelable {
sealed interface Enum : Parcelable {
@Parcelize
@Serializable
@SerialName("dataCons0")
data class DataCons0(val contents: List<Record0>) : Enum()
data class DataCons0(val contents: List<Record0>) : Enum

@Parcelize
@Serializable
@SerialName("dataCons1")
data class DataCons1(val contents: List<Record1>) : Enum()
data class DataCons1(val contents: List<Record1>) : Enum
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
@JsonClassDiscriminator("tag")
@Serializable
sealed class Enum : Parcelable {
sealed interface Enum : Parcelable {
@Parcelize
@Serializable
@SerialName("dataCons0")
data class DataCons0(val contents: Record0) : Enum()
data class DataCons0(val contents: Record0) : Enum

@Parcelize
@Serializable
@SerialName("dataCons1")
data object DataCons1 : Enum()
data object DataCons1 : Enum
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
@JsonClassDiscriminator("tag")
@Serializable
sealed class Enum : Parcelable {
sealed interface Enum : Parcelable {
@Parcelize
@Serializable
@SerialName("dataCons0")
data class DataCons0(val contents: Record0) : Enum()
data class DataCons0(val contents: Record0) : Enum

@Parcelize
@Serializable
@SerialName("dataCons1")
data class DataCons1(val contents: Record1) : Enum()
data class DataCons1(val contents: Record1) : Enum

@Parcelize
@Serializable
@SerialName("dataCons2")
data object DataCons2 : Enum()
data object DataCons2 : Enum
}
8 changes: 4 additions & 4 deletions .golden/kotlinSumOfProductWithTypeParameterSpec/golden
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
@JsonClassDiscriminator("direction")
@Serializable
sealed class CursorInput<A> {
sealed interface CursorInput<A> {
@Serializable
@SerialName("nextPage")
data class NextPage<A>(val key: A?) : CursorInput<A>()
data class NextPage<A>(val key: A?) : CursorInput<A>

@Serializable
@SerialName("previousPage")
data class PreviousPage<A>(val key: A) : CursorInput<A>()
data class PreviousPage<A>(val key: A) : CursorInput<A>

@Serializable
@SerialName("unknown")
data object Unknown : CursorInput<Nothing>()
data object Unknown : CursorInput<Nothing>
}
6 changes: 2 additions & 4 deletions src/Moat/Pretty/Kotlin.hs
Original file line number Diff line number Diff line change
Expand Up @@ -247,7 +247,6 @@ prettyTaggedObject parentName tyVars anns ifaces cases indents SumOfProductEncod
++ prettyMoatType caseTy
++ ") : "
++ parentTypeHeader
++ "()"
EnumCase caseNm caseDoc [] ->
prettyTypeDoc indents caseDoc []
++ prettyAnnotations (Just caseNm) indents anns
Expand All @@ -256,7 +255,6 @@ prettyTaggedObject parentName tyVars anns ifaces cases indents SumOfProductEncod
++ objectCaseTypeHeader caseNm
++ " : "
++ objectParentTypeHeader
++ "()"
EnumCase caseNm _ _ ->
error $
"prettyTaggedObject: The data constructor "
Expand Down Expand Up @@ -326,7 +324,7 @@ prettyEnum doc anns ifaces name tyVars cases sop@SumOfProductEncodingOptions {..
TaggedFlatObjectStyle ->
prettyTypeDoc noIndent doc []
++ prettyAnnotations Nothing noIndent (dontAddParcelizeToSealedClasses anns)
++ "sealed class "
++ "sealed interface "
++ classTyp
++ prettyInterfaces ifaces
TaggedObjectStyle ->
Expand All @@ -335,7 +333,7 @@ prettyEnum doc anns ifaces name tyVars cases sop@SumOfProductEncodingOptions {..
Nothing
noIndent
(dontAddParcelizeToSealedClasses (sumAnnotations ++ anns))
++ "sealed class "
++ "sealed interface "
++ classTyp
++ prettyInterfaces ifaces
++ " {\n"
Expand Down

0 comments on commit 251411c

Please sign in to comment.