-
-
Notifications
You must be signed in to change notification settings - Fork 757
/
DefaultValue.kt
79 lines (63 loc) · 2.93 KB
/
DefaultValue.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package io.gitlab.arturbosch.detekt.generator.collection
import io.github.detekt.utils.YamlNode
import io.github.detekt.utils.keyValue
import io.github.detekt.utils.list
import io.github.detekt.utils.listOfMaps
import io.gitlab.arturbosch.detekt.api.ValuesWithReason
sealed interface DefaultValue {
fun getPlainValue(): String
fun printAsYaml(name: String, yaml: YamlNode)
fun printAsMarkdownCode(): String
companion object {
fun of(defaultValue: String): DefaultValue = StringDefault(defaultValue)
fun of(defaultValue: Boolean): DefaultValue = BooleanDefault(defaultValue)
fun of(defaultValue: Int): DefaultValue = IntegerDefault(defaultValue)
fun of(defaultValue: List<String>): DefaultValue = StringListDefault(defaultValue)
fun of(defaultValue: ValuesWithReason): DefaultValue = ValuesWithReasonDefault(defaultValue)
}
}
private data class StringDefault(private val defaultValue: String) : DefaultValue {
private val quoted = "'$defaultValue'"
override fun printAsYaml(name: String, yaml: YamlNode) {
yaml.keyValue { name to quoted }
}
override fun printAsMarkdownCode(): String = quoted
override fun getPlainValue(): String = defaultValue
}
private data class BooleanDefault(private val defaultValue: Boolean) : DefaultValue {
override fun getPlainValue(): String = defaultValue.toString()
override fun printAsYaml(name: String, yaml: YamlNode) {
yaml.keyValue { name to defaultValue.toString() }
}
override fun printAsMarkdownCode(): String = defaultValue.toString()
}
private data class IntegerDefault(private val defaultValue: Int) : DefaultValue {
override fun getPlainValue(): String = defaultValue.toString()
override fun printAsYaml(name: String, yaml: YamlNode) {
yaml.keyValue { name to defaultValue.toString() }
}
override fun printAsMarkdownCode(): String = defaultValue.toString()
}
private data class StringListDefault(private val defaultValue: List<String>) : DefaultValue {
private val quoted: String = defaultValue.map { "'$it'" }.toString()
override fun printAsYaml(name: String, yaml: YamlNode) {
yaml.list(name, defaultValue)
}
override fun printAsMarkdownCode(): String = quoted
override fun getPlainValue(): String {
error("there is no plain string representation for list defaults")
}
}
private data class ValuesWithReasonDefault(private val defaultValue: ValuesWithReason) : DefaultValue {
override fun getPlainValue(): String {
error("there is no plain string representation for values with reason defaults")
}
override fun printAsYaml(name: String, yaml: YamlNode) {
val asMap: List<Map<String, String?>> =
defaultValue.map { mapOf("value" to it.value, "reason" to it.reason) }
yaml.listOfMaps(name, asMap)
}
override fun printAsMarkdownCode(): String {
return defaultValue.map { "'${it.value}'" }.toString()
}
}