sealed class ExecutionResult<out T>
data class Failure : ExecutionResult<Nothing>
data class Success<out T> : ExecutionResult<T>