Result.cs 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics.CodeAnalysis;
  4. using System.Text;
  5. namespace InABox.Core
  6. {
  7. public static class Result
  8. {
  9. public static Result<T, E> Ok<T, E>(T value)
  10. {
  11. return new Result<T, E>(value);
  12. }
  13. public static Result<T, E> Error<T, E>(E error)
  14. {
  15. return new Result<T, E>(error);
  16. }
  17. }
  18. public class Result<T, E>
  19. {
  20. public enum Status
  21. {
  22. Ok,
  23. Error
  24. }
  25. private T _value;
  26. private E _error;
  27. private Status _status;
  28. public Result(T value)
  29. {
  30. _value = value;
  31. _error = default;
  32. _status = Status.Ok;
  33. }
  34. public Result(E error)
  35. {
  36. _value = default;
  37. _error = error;
  38. _status = Status.Error;
  39. }
  40. public bool Get([NotNullWhen(true)][MaybeNull] out T value, [NotNullWhen(false)][MaybeNull] out E error)
  41. {
  42. value = _value;
  43. error = _error;
  44. return _status == Status.Ok;
  45. }
  46. }
  47. }