Advertisement
Guest User

Untitled

a guest
Apr 3rd, 2021
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.76 KB | None | 0 0
  1. using System.Collections.Generic;
  2. using System.Diagnostics.CodeAnalysis;
  3. using System.Net;
  4.  
  5. namespace CryptoExchange.Net.Objects
  6. {
  7.     /// <summary>
  8.     /// The result of an operation
  9.     /// </summary>
  10.     public class CallResult
  11.     {
  12.         /// <summary>
  13.         /// An error if the call didn't succeed
  14.         /// </summary>
  15.         public Error? Error { get; internal set; }
  16.         /// <summary>
  17.         /// Whether the call was successful
  18.         /// </summary>
  19.         public bool Success => Error == null;
  20.  
  21.         /// <summary>
  22.         /// ctor
  23.         /// </summary>
  24.         /// <param name="error"></param>
  25.         public CallResult(Error? error)
  26.         {
  27.             Error = error;
  28.         }
  29.  
  30.         /// <summary>
  31.         /// Overwrite bool check so we can use if(callResult) instead of if(callResult.Success)
  32.         /// </summary>
  33.         /// <param name="obj"></param>
  34.         public static implicit operator bool(CallResult obj)
  35.         {
  36.             return obj?.Success == true;
  37.         }
  38.        
  39.         /// <summary>
  40.         /// Create an error result
  41.         /// </summary>
  42.         /// <param name="error"></param>
  43.         /// <returns></returns>
  44.         public static WebCallResult CreateErrorResult(Error error)
  45.         {
  46.             return new WebCallResult(null, null, error);
  47.         }
  48.     }
  49.  
  50.     /// <summary>
  51.     /// The result of an operation
  52.     /// </summary>
  53.     /// <typeparam name="T"></typeparam>
  54.     public class CallResult<T>: CallResult
  55.     {
  56.         /// <summary>
  57.         /// The data returned by the call
  58.         /// </summary>
  59.         public T Data { get; internal set; }
  60.  
  61.         /// <summary>
  62.         /// ctor
  63.         /// </summary>
  64.         /// <param name="data"></param>
  65.         /// <param name="error"></param>
  66.         public CallResult([AllowNull]T data, Error? error): base(error)
  67.         {
  68. #pragma warning disable 8601
  69.             Data = data;
  70. #pragma warning disable 8601
  71.         }
  72.  
  73.         /// <summary>
  74.         /// Overwrite bool check so we can use if(callResult) instead of if(callResult.Success)
  75.         /// </summary>
  76.         /// <param name="obj"></param>
  77.         public static implicit operator bool(CallResult<T> obj)
  78.         {
  79.             return obj?.Success == true;
  80.         }
  81.  
  82.         /// <summary>
  83.         /// Whether the call was successful or not. Useful for nullability checking.
  84.         /// </summary>
  85.         /// <param name="data">The data returned by the call.</param>
  86.         /// <param name="error"><see cref="Error"/> on failure.</param>
  87.         /// <returns><c>true</c> when <see cref="CallResult{T}"/> succeeded, <c>false</c> otherwise.</returns>
  88.         public bool GetResultOrError([MaybeNullWhen(false)] out T data, [NotNullWhen(false)] out Error? error)
  89.         {
  90.             if (Success)
  91.             {
  92.                 data = Data!;
  93.                 error = null;
  94.  
  95.                 return true;
  96.             }
  97.             else
  98.             {
  99.                 data = default;
  100.                 error = Error!;
  101.  
  102.                 return false;
  103.             }
  104.         }
  105.  
  106.         /// <summary>
  107.         /// Create an error result
  108.         /// </summary>
  109.         /// <param name="error"></param>
  110.         /// <returns></returns>
  111.         public new static WebCallResult<T> CreateErrorResult(Error error)
  112.         {
  113.             return new WebCallResult<T>(null, null, default, error);
  114.         }
  115.     }
  116.  
  117.     /// <summary>
  118.     /// The result of a request
  119.     /// </summary>
  120.     public class WebCallResult : CallResult
  121.     {
  122.         /// <summary>
  123.         /// The status code of the response. Note that a OK status does not always indicate success, check the Success parameter for this.
  124.         /// </summary>
  125.         public HttpStatusCode? ResponseStatusCode { get; set; }
  126.  
  127.         /// <summary>
  128.         /// The response headers
  129.         /// </summary>
  130.         public IEnumerable<KeyValuePair<string, IEnumerable<string>>>? ResponseHeaders { get; set; }
  131.  
  132.         /// <summary>
  133.         /// ctor
  134.         /// </summary>
  135.         /// <param name="code"></param>
  136.         /// <param name="responseHeaders"></param>
  137.         /// <param name="error"></param>
  138.         public WebCallResult(
  139.             HttpStatusCode? code,
  140.             IEnumerable<KeyValuePair<string, IEnumerable<string>>>? responseHeaders, Error? error) : base(error)
  141.         {
  142.             ResponseHeaders = responseHeaders;
  143.             ResponseStatusCode = code;
  144.         }
  145.  
  146.         /// <summary>
  147.         /// Create an error result
  148.         /// </summary>
  149.         /// <param name="code"></param>
  150.         /// <param name="responseHeaders"></param>
  151.         /// <param name="error"></param>
  152.         /// <returns></returns>
  153.         public static WebCallResult CreateErrorResult(HttpStatusCode? code, IEnumerable<KeyValuePair<string, IEnumerable<string>>>? responseHeaders, Error error)
  154.         {
  155.             return new WebCallResult(code, responseHeaders, error);
  156.         }
  157.  
  158.         /// <summary>
  159.         /// Create an error result
  160.         /// </summary>
  161.         /// <param name="result"></param>
  162.         /// <returns></returns>
  163.         public static WebCallResult CreateErrorResult(WebCallResult result)
  164.         {
  165.             return new WebCallResult(result.ResponseStatusCode, result.ResponseHeaders, result.Error);
  166.         }
  167.     }
  168.  
  169.     /// <summary>
  170.     /// The result of a request
  171.     /// </summary>
  172.     /// <typeparam name="T"></typeparam>
  173.     public class WebCallResult<T>: CallResult<T>
  174.     {
  175.         /// <summary>
  176.         /// The status code of the response. Note that a OK status does not always indicate success, check the Success parameter for this.
  177.         /// </summary>
  178.         public HttpStatusCode? ResponseStatusCode { get; set; }
  179.  
  180.         /// <summary>
  181.         /// The response headers
  182.         /// </summary>
  183.         public IEnumerable<KeyValuePair<string, IEnumerable<string>>>? ResponseHeaders { get; set; }
  184.        
  185.         /// <summary>
  186.         /// ctor
  187.         /// </summary>
  188.         /// <param name="code"></param>
  189.         /// <param name="responseHeaders"></param>
  190.         /// <param name="data"></param>
  191.         /// <param name="error"></param>
  192.         public WebCallResult(
  193.             HttpStatusCode? code,
  194.             IEnumerable<KeyValuePair<string, IEnumerable<string>>>? responseHeaders, [AllowNull] T data, Error? error): base(data, error)
  195.         {
  196.             ResponseStatusCode = code;
  197.             ResponseHeaders = responseHeaders;
  198.         }
  199.  
  200.         /// <summary>
  201.         /// Create new based on existing
  202.         /// </summary>
  203.         /// <param name="callResult"></param>
  204.         public WebCallResult(WebCallResult<T> callResult): base(callResult.Data, callResult.Error)
  205.         {
  206.             ResponseHeaders = callResult.ResponseHeaders;
  207.             ResponseStatusCode = callResult.ResponseStatusCode;
  208.         }
  209.  
  210.         /// <summary>
  211.         /// Create from a call result
  212.         /// </summary>
  213.         /// <typeparam name="Y"></typeparam>
  214.         /// <param name="source"></param>
  215.         /// <returns></returns>
  216.         public static WebCallResult<T> CreateFrom<Y>(WebCallResult<Y> source) where Y : T
  217.         {
  218.             return new WebCallResult<T>(source.ResponseStatusCode, source.ResponseHeaders, (T)source.Data, source.Error);
  219.         }
  220.  
  221.         /// <summary>
  222.         /// Create an error result
  223.         /// </summary>
  224.         /// <param name="code"></param>
  225.         /// <param name="responseHeaders"></param>
  226.         /// <param name="error"></param>
  227.         /// <returns></returns>
  228.         public static WebCallResult<T> CreateErrorResult(HttpStatusCode? code, IEnumerable<KeyValuePair<string, IEnumerable<string>>>? responseHeaders, Error error)
  229.         {
  230.             return new WebCallResult<T>(code, responseHeaders, default, error);
  231.         }
  232.     }
  233. }
  234.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement