Created
June 23, 2020 20:03
-
-
Save xsoheilalizadeh/eb1944003c87f971fa631a1f86097acb to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using static Domain.Result; | |
namespace Domain | |
{ | |
public readonly struct Result | |
{ | |
private readonly Result<int, StringError> _result => new Result<int, StringError>(0); | |
public int Value => _result.Value; | |
public StringError? Error => _result.Error; | |
public bool Succeeded => _result.Succeeded; | |
public static Result<TValue, StringError> Ok<TValue>(TValue value) => new Result<TValue, StringError>(value); | |
} | |
public readonly struct Result<TValue> | |
{ | |
public Result(TValue value) : this() | |
{ | |
_result = new Result<TValue, StringError>(value); | |
} | |
private readonly Result<TValue, StringError> _result; | |
public TValue Value => _result.Value; | |
public StringError? Error => _result.Error; | |
public bool Succeeded => _result.Succeeded; | |
public static Result<TValue, StringError> Ok(TValue value) => new Result<TValue, StringError>(value); | |
public static implicit operator Result<TValue>(Result<TValue, StringError> result) => | |
new Result<TValue>(result.Value); | |
} | |
public readonly struct Result<TValue, TError> where TError : Error | |
{ | |
public Result(TValue value, TError? error = null) | |
{ | |
Value = value; | |
Error = error; | |
} | |
public TValue Value { get; } | |
public TError? Error { get; } | |
public bool Succeeded => !(Error is null); | |
public static Result<TValue, TError> Ok(TValue value) => new Result<TValue, TError>(value); | |
} | |
public class StringError : Error | |
{ | |
public override void Throw() | |
{ | |
throw new NotImplementedException(); | |
} | |
} | |
public abstract class Error | |
{ | |
public static readonly Error Default = new StringError(); | |
public abstract void Throw(); | |
} | |
public class Order | |
{ | |
public int Id { get; set; } | |
public Order(int id) | |
{ | |
Id = id; | |
} | |
public static Result<Order> New() => Ok(new Order(1)); | |
} | |
class Program | |
{ | |
public static void Main(string[] args) | |
{ | |
var result = Order.New(); | |
if (result.Succeeded) | |
{ | |
Console.WriteLine("Success!"); | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment