https://github.com/esensar/kotlinx-serialization-msgpack
MsgPack support for kotlinx.serialization -- msgpack.org[kotlinx.serialization]
https://github.com/esensar/kotlinx-serialization-msgpack
kotlin kotlin-native kotlin-serialization messagepack msgpack native
Last synced: 2 months ago
JSON representation
MsgPack support for kotlinx.serialization -- msgpack.org[kotlinx.serialization]
- Host: GitHub
- URL: https://github.com/esensar/kotlinx-serialization-msgpack
- Owner: esensar
- License: mit
- Created: 2020-10-09T13:51:20.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2025-01-09T16:40:20.000Z (5 months ago)
- Last Synced: 2025-04-09T15:00:56.230Z (2 months ago)
- Topics: kotlin, kotlin-native, kotlin-serialization, messagepack, msgpack, native
- Language: Kotlin
- Homepage: https://www.ensarsarajcic.com/kotlinx-serialization-msgpack/
- Size: 286 KB
- Stars: 48
- Watchers: 2
- Forks: 11
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# kotlinx-serialization-msgpack
[](https://github.com/esensar/kotlinx-serialization-msgpack/actions)
[](https://javadoc.io/doc/com.ensarsarajcic.kotlinx/serialization-msgpack)
[](https://maven-badges.herokuapp.com/maven-central/com.ensarsarajcic.kotlinx/serialization-msgpack)
[](https://s01.oss.sonatype.org/content/repositories/snapshots/com/ensarsarajcic/kotlinx/serialization-msgpack/)**Project is under active development! Important features may be missing and bugs are present!**
Check out [milestones](https://github.com/esensar/kotlinx-serialization-msgpack/milestones) for progress.
## About
This library provides [MsgPack](https://github.com/Kotlin/kotlinx.serialization) support for [kotlinx.serialization](https://github.com/Kotlin/kotlinx.serialization). It supports all of kotlin targets (JVM, JS, Native).## Integration
### Maven central
**Gradle:**
```kotlin
implementation("com.ensarsarajcic.kotlinx:serialization-msgpack:${kotlinxSerializationMsgPackVersion}")
```To also use timestamp support with [kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime), use `serialization-msgpack-timestamp-extension`:
```kotlin
implementation("com.ensarsarajcic.kotlinx:serialization-msgpack-timestamp-extension:${kotlinxSerializationMsgPackVersion}")
```**NOTE**:
Timestamp support is available in core library as well, the additional library just adds a specific serializer that can be used with [kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) types. These are `MsgPackTimestamp32DatetimeSerializer`, `MsgPackTimestamp64DatetimeSerializer` and `MsgPackTimestamp96DatetimeSerializer`.For experimental kotlin unsigned types support, use `serialization-msgpack-unsigned-support`:
```kotlin
implementation("com.ensarsarajcic.kotlinx:serialization-msgpack-unsigned-support:${kotlinxSerializationMsgPackVersion}")
```### Snapshot builds
**Gradle:**
```kotlin
repositories {
maven {
url = uri("https://oss.sonatype.org/content/repositories/snapshots")
}
}
implementation("com.ensarsarajcic.kotlinx:serialization-msgpack:${kotlinxSerializationMsgPackSnapshotVersion}")
```To also use timestamp support with [kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime), use `serialization-msgpack-timestamp-extension`:
```kotlin
implementation("com.ensarsarajcic.kotlinx:serialization-msgpack-timestamp-extension:${kotlinxSerializationMsgPackSnapshotVersion}")
```For experimental kotlin unsigned types support, use `serialization-msgpack-unsigned-support`:
```kotlin
implementation("com.ensarsarajcic.kotlinx:serialization-msgpack-unsigned-support:${kotlinxSerializationMsgPackSnapshotVersion}")
```## Usage
Library should be used in same way as any other kotlinx.serialization library. Created models are annotated with `@Serializable` annotation and their `serializer()` can be passed to `MsgPack`.
**Example:**
```kotlin
@Serializable
data class SampleClass(
val testString: String,
val testInt: Int,
val testBoolean: Boolean
)fun encode() {
println(
MsgPack.encodeToByteArray(
SampleClass.serializer(),
SampleClass("def", 123, true)
).joinToString(separator = "") { it.toInt().and(0xff).toString(16).padStart(2, '0') }
) // Outputs: 83aa74657374537472696e67a3646566a774657374496e747bab74657374426f6f6c65616ec3
}fun decode() {
println(
MsgPack.decodeFromByteArray(
SampleClass.serializer(),
"83aa74657374537472696e67a3646566a774657374496e747bab74657374426f6f6c65616ec3".let { bytesString ->
ByteArray(bytesString.length / 2) { bytesString.substring(it * 2, it * 2 + 2).toInt(16).toByte() }
}
)
) // Outputs: SampleClass(testString=def, testInt=123, testBoolean=true)
}
```## Contributing
Check out [contributing guidelines](CONTRIBUTING.md).
## License
[MIT](LICENSE)