From 1657fbd5ac659157078038bbbd343d359a95cd03 Mon Sep 17 00:00:00 2001 From: Him188 <Him188@mamoe.net> Date: Thu, 12 Nov 2020 10:06:33 +0800 Subject: [PATCH] Review SemVersion: Update docs --- backend/mirai-console/src/util/SemVersion.kt | 29 ++++++++++++++++---- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/backend/mirai-console/src/util/SemVersion.kt b/backend/mirai-console/src/util/SemVersion.kt index f350c0f58..d920ad2eb 100644 --- a/backend/mirai-console/src/util/SemVersion.kt +++ b/backend/mirai-console/src/util/SemVersion.kt @@ -26,12 +26,13 @@ import net.mamoe.mirai.console.internal.data.map import net.mamoe.mirai.console.internal.util.semver.SemVersionInternal import net.mamoe.mirai.console.util.SemVersion.Companion.equals import net.mamoe.mirai.console.util.SemVersion.Requirement +import net.mamoe.mirai.console.util.SemVersion.SemVersionAsStringSerializer import kotlin.LazyThreadSafetyMode.PUBLICATION /** * [语义化版本](https://semver.org/lang/zh-CN/) 支持 * - * 解析示例: + * ### 解析示例 * * `1.0.0-M4+c25733b8` 将会解析出下面的内容, * [major] (主本号), [minor] (次版本号), [patch] (修订号), [identifier] (先行版本号) 和 [metadata] (元数据). @@ -48,10 +49,13 @@ import kotlin.LazyThreadSafetyMode.PUBLICATION * * 对于核心版本号, 此实现稍微比语义化版本规范宽松一些, 允许 x.y 的存在. * + * ### 序列化 + * 使用 [SemVersionAsStringSerializer], [SemVersion] 被序列化为 [toString] 的字符串. + * * @see Requirement 版本号要修 * @see SemVersion.invoke 由字符串解析 */ -@Serializable(with = SemVersion.SemVersionAsStringSerializer::class) +@Serializable(with = SemVersionAsStringSerializer::class) public data class SemVersion /** * @see SemVersion.invoke 字符串解析 @@ -88,7 +92,7 @@ internal constructor( * * @see [SemVersion.parseRangeRequirement] */ - val rule: String + val rule: String, ) { @Transient private val impl = SemVersionInternal.parseRangeRequirement(rule) @@ -98,18 +102,27 @@ internal constructor( return impl.test(version) } + /** + * 序列化为字符串, [rule]. 从字符串反序列化, [parseRangeRequirement]. + */ public object RequirementAsStringSerializer : KSerializer<Requirement> by String.serializer().map( serializer = { it.rule }, deserializer = { parseRangeRequirement(it) } ) public companion object { + /** + * @see parseRangeRequirement + */ @JvmSynthetic public operator fun invoke(@ResolveContext(VERSION_REQUIREMENT) requirement: String): Requirement = parseRangeRequirement(requirement) } } + /** + * 使用 [SemVersion.toString] 序列化, 使用 [SemVersion.invoke] 反序列化. + */ public object SemVersionAsStringSerializer : KSerializer<SemVersion> by String.serializer().map( serializer = { it.toString() }, deserializer = { SemVersion(it) } @@ -172,8 +185,8 @@ internal constructor( */ @JvmStatic @Throws(IllegalArgumentException::class) - public fun parseRangeRequirement(@ResolveContext(VERSION_REQUIREMENT) requirement: String): Requirement = - Requirement(requirement) + public fun parseRangeRequirement(@ResolveContext(VERSION_REQUIREMENT) rule: String): Requirement = + Requirement(rule) /** @see [Requirement.test] */ @JvmStatic @@ -225,7 +238,11 @@ internal constructor( public override fun toString(): String = toString /** - * 将 [SemVersion] 转为 Kotlin data class 风格的 [String] + * 将 [SemVersion] 转为 Kotlin data class 风格的 [String]. + * + * ``` + * return "SemVersion(major=$major, minor=$minor, patch=$patch, identifier=$identifier, metadata=$metadata)" + * ``` */ public fun toStructuredString(): String { return "SemVersion(major=$major, minor=$minor, patch=$patch, identifier=$identifier, metadata=$metadata)"