ResultExtensions.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. namespace Caliburn.Micro.Core {
  2. using System;
  3. /// <summary>
  4. /// Extension methods for <see cref="IResult"/> instances.
  5. /// </summary>
  6. public static class ResultExtensions {
  7. /// <summary>
  8. /// Adds behavior to the result which is executed when the <paramref name ="result"/> was cancelled.
  9. /// </summary>
  10. /// <param name="result">The result to decorate.</param>
  11. /// <param name="coroutine">The coroutine to execute when <paramref name="result"/> was canceled.</param>
  12. /// <returns></returns>
  13. public static IResult WhenCancelled(this IResult result, Func<IResult> coroutine) {
  14. return new ContinueResultDecorator(result, coroutine);
  15. }
  16. /// <summary>
  17. /// Overrides <see cref="ResultCompletionEventArgs.WasCancelled"/> of the decorated <paramref name="result"/> instance.
  18. /// </summary>
  19. /// <param name="result">The result to decorate.</param>
  20. /// <returns></returns>
  21. public static IResult OverrideCancel(this IResult result) {
  22. return new OverrideCancelResultDecorator(result);
  23. }
  24. /// <summary>
  25. /// Rescues <typeparamref name="TException"/> from the decorated <paramref name="result"/> by executing a <paramref name="rescue"/> coroutine.
  26. /// </summary>
  27. /// <typeparam name = "TException">The type of the exception we want to perform the rescue on.</typeparam>
  28. /// <param name="result">The result to decorate.</param>
  29. /// <param name="rescue">The rescue coroutine.</param>
  30. /// <param name="cancelResult">Set to true to cancel the result after executing rescue.</param>
  31. /// <returns></returns>
  32. public static IResult Rescue<TException>(this IResult result, Func<TException, IResult> rescue,
  33. bool cancelResult = true)
  34. where TException : Exception {
  35. return new RescueResultDecorator<TException>(result, rescue, cancelResult);
  36. }
  37. /// <summary>
  38. /// Rescues any exception from the decorated <paramref name="result"/> by executing a <paramref name="rescue"/> coroutine.
  39. /// </summary>
  40. /// <param name="result">The result to decorate.</param>
  41. /// <param name="rescue">The rescue coroutine.</param>
  42. /// <param name="cancelResult">Set to true to cancel the result after executing rescue.</param>
  43. /// <returns></returns>
  44. public static IResult Rescue(this IResult result, Func<Exception, IResult> rescue,
  45. bool cancelResult = true) {
  46. return Rescue<Exception>(result, rescue, cancelResult);
  47. }
  48. }
  49. }