Skip to content

Commit

Permalink
Updated builtin-classes.md to mention Duration
Browse files Browse the repository at this point in the history
Resolves #1986
  • Loading branch information
shanshin committed Sep 23, 2022
1 parent e311eb8 commit 687d917
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -245,7 +245,7 @@ public fun UShort.Companion.serializer(): KSerializer<UShort> = UShortSerializer

/**
* Returns serializer for [Duration].
* It is serialized as a string that represents a duration in the ISO-8601 format.
* It is serialized as a string that represents a duration in the ISO-8601-2 format.
*
* The result of serialization is similar to calling [Duration.toIsoString], for deserialization is [Duration.parseIsoString].
*/
Expand Down
27 changes: 26 additions & 1 deletion docs/builtin-classes.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ including the standard collections, is built into Kotlin Serialization. This cha
* [Deserializing collections](#deserializing-collections)
* [Maps](#maps)
* [Unit and singleton objects](#unit-and-singleton-objects)
* [Duration](#duration)

<!--- END -->

Expand Down Expand Up @@ -380,6 +381,30 @@ which is explained in the [Polymorphism. Objects](polymorphism.md#objects) secti

> Serialization of objects is format specific. Other formats may represent objects differently,
> e.g. using their fully-qualified names.
### Duration

Since Kotlin `1.7.20` the [Duration] class has become serializable.

<!--- INCLUDE
import kotlin.time.*
-->

```kotlin
fun main() {
val duration = 1000.toDuration(DurationUnit.SECONDS)
println(Json.encodeToString(duration))
}
```
> You can get the full code [here](../guide/example/example-builtin-12.kt).
Duration is serialized as a string in the ISO-8601-2 format.
```text
"PT16M40S"
```

<!--- TEST -->

---

The next chapter covers [Serializers](serializers.md).
Expand All @@ -392,6 +417,7 @@ The next chapter covers [Serializers](serializers.md).
[List]: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/
[Set]: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-set/
[Map]: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-map/
[Duration]: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.time/-duration/

<!--- MODULE /kotlinx-serialization-core -->
<!--- INDEX kotlinx-serialization-core/kotlinx.serialization -->
Expand All @@ -405,4 +431,3 @@ The next chapter covers [Serializers](serializers.md).
[LongAsStringSerializer]: https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization.builtins/-long-as-string-serializer/

<!--- END -->

1 change: 1 addition & 0 deletions docs/serialization-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ Once the project is set up, we can start serializing some classes.
* <a name='deserializing-collections'></a>[Deserializing collections](builtin-classes.md#deserializing-collections)
* <a name='maps'></a>[Maps](builtin-classes.md#maps)
* <a name='unit-and-singleton-objects'></a>[Unit and singleton objects](builtin-classes.md#unit-and-singleton-objects)
* <a name='duration'></a>[Duration](builtin-classes.md#duration)
<!--- END -->

**Chapter 3.** [Serializers](serializers.md)
Expand Down
12 changes: 12 additions & 0 deletions guide/example/example-builtin-12.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// This file was automatically generated from builtin-classes.md by Knit tool. Do not edit.
package example.exampleBuiltin12

import kotlinx.serialization.*
import kotlinx.serialization.json.*

import kotlin.time.*

fun main() {
val duration = 1000.toDuration(DurationUnit.SECONDS)
println(Json.encodeToString(duration))
}
7 changes: 7 additions & 0 deletions guide/test/BuiltinClassesTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -82,4 +82,11 @@ class BuiltinClassesTest {
"{}"
)
}

@Test
fun testExampleBuiltin12() {
captureOutput("ExampleBuiltin12") { example.exampleBuiltin12.main() }.verifyOutputLines(
"\"PT16M40S\""
)
}
}

0 comments on commit 687d917

Please sign in to comment.