Sounds like it’s a convoluted way to implement the same kind of thing that you’d get with a traditional error throwing paradigm
You also know what type the error will be. No need to derive a new class from `Error` and add custom functions to extract the data from your failure case, just pass the data along.