1package com.peachpasswords.vault234internal class VaultSlotRollback(private val store: VaultStorage) {5 fun restoreTriad(6 priorA: StoredVault?,7 priorB: String?,8 priorD: StoredVault?,9 ): List<String> {10 val failures = mutableListOf<String>()11 if (priorA == null) {12 runCatching { store.clearVault() }.onFailure { failures += "clearVault: $it" }13 return failures14 }1516 attempt(failures, "writeSlotA") { store.writeSlotA(priorA) }17 if (priorB != null) attempt(failures, "writeSlotB") { store.writeSlotB(priorB) }18 if (priorD != null) {19 attempt(failures, "writeDecoySlot") { store.writeDecoySlot(priorD) }20 } else {21 runCatching { store.clearDecoySlot() }.onFailure { failures += "clearDecoySlot: $it" }22 }23 return failures24 }2526 fun restorePair(priorA: StoredVault, priorB: String?): List<String> {27 val failures = mutableListOf<String>()28 attempt(failures, "writeSlotA") { store.writeSlotA(priorA) }29 if (priorB != null) attempt(failures, "writeSlotB") { store.writeSlotB(priorB) }30 return failures31 }3233 private inline fun attempt(34 failures: MutableList<String>,35 operation: String,36 block: () -> Boolean,37 ) {38 runCatching { if (!block()) failures += "$operation returned false" }39 .onFailure { failures += "$operation: $it" }40 }41}