summaryrefslogtreecommitdiffhomepage
path: root/android/lib/model/src
diff options
context:
space:
mode:
Diffstat (limited to 'android/lib/model/src')
-rw-r--r--android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/RelayItem.kt25
1 files changed, 25 insertions, 0 deletions
diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/RelayItem.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/RelayItem.kt
index 3ff0788776..27ce80c016 100644
--- a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/RelayItem.kt
+++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/RelayItem.kt
@@ -4,6 +4,31 @@ import arrow.optics.optics
typealias DomainCustomList = CustomList
+sealed interface Hop {
+ data class Single<R : RelayItem>(val relay: R) : Hop
+
+ data class Multi(val entry: RelayItem, val exit: RelayItem) : Hop
+
+ val isActive: Boolean
+ get() =
+ when (this) {
+ is Multi -> entry.active && exit.active
+ is Single<*> -> relay.active
+ }
+
+ fun entry(): RelayItem =
+ when (this) {
+ is Multi -> entry
+ is Single<*> -> relay
+ }
+
+ fun exit(): RelayItem =
+ when (this) {
+ is Multi -> exit
+ is Single<*> -> relay
+ }
+}
+
@optics
sealed interface RelayItem {
val id: RelayItemId