summaryrefslogtreecommitdiff
path: root/src/jsMain/kotlin/io
diff options
context:
space:
mode:
Diffstat (limited to 'src/jsMain/kotlin/io')
-rw-r--r--src/jsMain/kotlin/io/Path.kt18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/jsMain/kotlin/io/Path.kt b/src/jsMain/kotlin/io/Path.kt
index f486581..20e4a90 100644
--- a/src/jsMain/kotlin/io/Path.kt
+++ b/src/jsMain/kotlin/io/Path.kt
@@ -1,12 +1,14 @@
package io
-sealed interface Path {
- val parts: List<String>
+sealed class Path {
+ abstract val parts: List<String>
fun toAbsolutePath(relativeTo: Absolute): Absolute {
return relativeTo.resolve(this)
}
- fun resolve(path: Path): Path
+ abstract fun resolve(path: Path): Path
+
+ abstract val stringPath: String
companion object {
val root = Absolute(listOf())
@@ -38,19 +40,23 @@ sealed interface Path {
}
}
- data class Relative internal constructor(override val parts: List<String>) : Path {
+ data class Relative internal constructor(override val parts: List<String>) : Path() {
override fun resolve(path: Path): Path {
if (path is Absolute) return path
return Relative(this.parts + path.parts)
}
+
+ override val stringPath: String get() = parts.joinToString("/")
}
- data class Absolute internal constructor(override val parts: List<String>) : Path {
+ data class Absolute internal constructor(override val parts: List<String>) : Path() {
override fun resolve(path: Path): Absolute {
if (path is Absolute) return path
return Absolute(this.parts + path.parts)
}
+ override val stringPath: String get() = "/" + parts.joinToString("/")
+
fun relativize(path: Path): Relative = when (path) {
is Relative -> path
is Absolute -> {
@@ -72,4 +78,6 @@ sealed interface Path {
}
}
}
+
+ override fun toString(): String = "Path($stringPath)"
}