package com.mongodb.mongosh.service internal sealed class Either { abstract fun map(transform: (T) -> T1): Either abstract fun flatMap(transform: (T) -> Either): Either abstract fun getOrThrow(): T } internal class Left(val value: Throwable) : Either() { override fun map(transform: (T) -> T1): Either { return Left(value) } override fun flatMap(transform: (T) -> Either): Either { return Left(value) } override fun getOrThrow() = throw value } internal class Right(val value: T) : Either() { override fun map(transform: (T) -> T1): Either { return Right(transform(value)) } override fun flatMap(transform: (T) -> Either): Either { return transform(value) } override fun getOrThrow() = value }