mirror of
https://github.com/chylex/TweetDuck.git
synced 2025-05-01 08:34:11 +02:00
* Switch to .NET Framework 4.7.2 & C# 8.0, update libraries * Add TweetLib.Core project targeting .NET Standard 2.0 * Enable reference nullability checks for TweetLib.Core * Move a bunch of utility classes into TweetLib.Core & refactor * Partially move TweetDuck plugin & update system to TweetLib.Core * Move some constants and CultureInfo setup to TweetLib.Core * Move some configuration classes to TweetLib.Core * Minor refactoring and warning suppression * Add App to TweetLib.Core * Add IAppErrorHandler w/ implementation * Continue moving config, plugin, and update classes to TweetLib.Core * Fix a few nullability checks * Update installers to check for .NET Framework 4.7.2
37 lines
1.1 KiB
C#
37 lines
1.1 KiB
C#
using System;
|
|
|
|
namespace TweetLib.Core.Data{
|
|
public sealed class Result<T>{
|
|
public bool HasValue => exception == null;
|
|
|
|
public T Value => HasValue ? value : throw new InvalidOperationException("Requested value from a failed result.");
|
|
public Exception Exception => exception ?? throw new InvalidOperationException("Requested exception from a successful result.");
|
|
|
|
private readonly T value;
|
|
private readonly Exception? exception;
|
|
|
|
public Result(T value){
|
|
this.value = value;
|
|
this.exception = null;
|
|
}
|
|
|
|
public Result(Exception exception){
|
|
this.value = default!;
|
|
this.exception = exception ?? throw new ArgumentNullException(nameof(exception));
|
|
}
|
|
|
|
public void Handle(Action<T> onSuccess, Action<Exception> onException){
|
|
if (HasValue){
|
|
onSuccess(value);
|
|
}
|
|
else{
|
|
onException(exception!);
|
|
}
|
|
}
|
|
|
|
public Result<R> Select<R>(Func<T, R> map){
|
|
return HasValue ? new Result<R>(map(value)) : new Result<R>(exception!);
|
|
}
|
|
}
|
|
}
|