Shuffle/app/lib/core/result/result.dart
cschlaefke e5df79ee0a feat(app): add Flutter scaffold with config, logging, routing and l10n
Refs #31

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-02 20:17:24 +01:00

40 lines
1.1 KiB
Dart

/// Einfaches Ergebnis-Typ für erwartbare Fehler (kein zusätzliches Paket).
sealed class Result<T, E> {
const Result();
const factory Result.success(T value) = Success<T, E>;
const factory Result.failure(E error) = Failure<T, E>;
bool get isSuccess => this is Success<T, E>;
bool get isFailure => this is Failure<T, E>;
/// Wert bei Erfolg, sonst `null`.
T? get valueOrNull => switch (this) {
Success<T, E>(:final value) => value,
Failure<T, E>() => null,
};
/// Fehler bei Misserfolg, sonst `null`.
E? get errorOrNull => switch (this) {
Success<T, E>() => null,
Failure<T, E>(:final error) => error,
};
R when<R>({
required R Function(T value) success,
required R Function(E error) failure,
}) => switch (this) {
Success<T, E>(:final value) => success(value),
Failure<T, E>(:final error) => failure(error),
};
}
final class Success<T, E> extends Result<T, E> {
const Success(this.value);
final T value;
}
final class Failure<T, E> extends Result<T, E> {
const Failure(this.error);
final E error;
}