package com.github.nullptroma.wallenc.vault.contract

import com.github.nullptroma.wallenc.domain.interfaces.IVault

/**
 * Хелперы фильтрации списка vault'ов по [VaultDescriptor].
 *
 * Все реализации vault'а обязаны быть [DescribedVault];
 * [described] отбрасывает те, что не соответствуют контракту (на случай
 * вспомогательных тест-двойников и т.п.).
 */
fun List<IVault>.described(): List<DescribedVault> = filterIsInstance<DescribedVault>()

val List<DescribedVault>.locals: List<DescribedVault>
    get() = filter { it.descriptor is VaultDescriptor.LocalDevice }

val List<DescribedVault>.remotes: List<DescribedVault>
    get() = filter { it.descriptor is VaultDescriptor.LinkedRemote }
