feat: yield the patch result

This commit is contained in:
oSumAtrIX 2022-06-23 01:41:36 +02:00
parent 930768dfb3
commit dde5385232
No known key found for this signature in database
GPG Key ID: A9B3094ACDB604B4

View File

@ -302,29 +302,23 @@ class Patcher(private val options: PatcherOptions) {
/** /**
* Apply patches loaded into the patcher. * Apply patches loaded into the patcher.
* @param stopOnError If true, the patches will stop on the first error. * @param stopOnError If true, the patches will stop on the first error.
* @return A map of [PatchResultSuccess]. If the [Patch] was successfully applied, * @return A pair of the name of the [Patch] and its [PatchResult].
* [PatchResultSuccess] will always be returned to the wrapping Result object.
* If the [Patch] failed to apply, an Exception will always be returned to the wrapping Result object.
*/ */
fun applyPatches( fun applyPatches(stopOnError: Boolean = false) = sequence {
stopOnError: Boolean = false, callback: (Class<out Patch<Data>>, Boolean) -> Unit = { _, _ -> }
): Map<String, Result<PatchResultSuccess>> {
logger.trace("Applying all patches") logger.trace("Applying all patches")
val appliedPatches = mutableListOf<String>() val appliedPatches = mutableListOf<String>()
return buildMap {
for (patch in data.patches) { for (patch in data.patches) {
val result = applyPatch(patch, appliedPatches) val patchResult = applyPatch(patch, appliedPatches)
this[patch.patchName] = if (result.isSuccess()) { val result = if (patchResult.isSuccess()) {
Result.success(result.success()!!) Result.success(patchResult.success()!!)
} else { } else {
Result.failure(result.error()!!) Result.failure(patchResult.error()!!)
} }
callback(patch, result.isSuccess()) yield(patch.name to result)
if (stopOnError && result.isError()) break if (stopOnError && patchResult.isError()) break
}
} }
} }
} }