NestService.kt

package de.pflugradts.passbird.domain.service.nest

import de.pflugradts.kotlinextensions.Option
import de.pflugradts.kotlinextensions.TryResult
import de.pflugradts.passbird.domain.model.nest.Nest
import de.pflugradts.passbird.domain.model.shell.Shell
import de.pflugradts.passbird.domain.model.slot.Slot
import java.util.stream.Stream

interface NestService {
    fun populate(nestShells: List<Shell>)
    fun place(nestShell: Shell, slot: Slot): TryResult<Unit>
    fun discardNestAt(slot: Slot): TryResult<Unit>
    fun atNestSlot(slot: Slot): Option<Nest>
    fun all(includeDefault: Boolean = false): Stream<Option<Nest>>
    fun currentNest(): Nest
    fun moveToNestAt(slot: Slot)
}