// Template asset: copy or adapt this only when the project does not already // have an equivalent typed result/error model. /// Utility class to wrap result data /// /// Evaluate the result using a switch statement: /// ```dart /// switch (result) { /// case Ok(): /// print(result.value); /// case Error(): /// print(result.error); /// } /// ``` sealed class Result { const Result(); /// Creates an instance of Result containing a value factory Result.ok(T value) => Ok(value); /// Create an instance of Result containing an error factory Result.error(Exception error) => Error(error); /// Convenience method to cast to Ok Ok get asOk => this as Ok; /// Convenience method to cast to Error Error get asError => this as Error; } /// Subclass of Result for values final class Ok extends Result { const Ok(this.value); /// Returned value in result final T value; @override String toString() => 'Result<$T>.ok($value)'; } /// Subclass of Result for errors final class Error extends Result { const Error(this.error); /// Returned error in result final Exception error; @override String toString() => 'Result<$T>.error($error)'; }