ParsingResult.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. using EdjCase.JsonRpc.Core;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Text;
  5. namespace Edjcase.JsonRpc.Router
  6. {
  7. public class ParsingResult
  8. {
  9. /// <summary>
  10. /// Successfully parsed request
  11. /// </summary>
  12. public List<RpcRequest> Requests { get; }
  13. /// <summary>
  14. /// Errors with the associated request id
  15. /// </summary>
  16. public List<(RpcId Id, RpcError Error)> Errors { get; }
  17. /// <summary>
  18. /// Flag to indicate if the request was an array vs singular
  19. /// </summary>
  20. public bool IsBulkRequest { get; }
  21. /// <summary>
  22. /// Count of total requests processed (successful and failed)
  23. /// </summary>
  24. public int RequestCount { get; }
  25. public ParsingResult(List<RpcRequest> requests, List<(RpcId, RpcError)> errors, bool isBulkRequest)
  26. {
  27. this.Requests = requests;
  28. this.Errors = errors;
  29. this.IsBulkRequest = isBulkRequest;
  30. this.RequestCount = requests.Count + errors.Count;
  31. }
  32. internal static ParsingResult FromResults(List<RpcRequestParseResult> results, bool isBulkRequest)
  33. {
  34. var requests = new List<RpcRequest>();
  35. var errors = new List<(RpcId, RpcError)>();
  36. foreach (RpcRequestParseResult result in results)
  37. {
  38. if (result.Error != null)
  39. {
  40. errors.Add((result.Id, result.Error));
  41. }
  42. else
  43. {
  44. requests.Add(result.Request);
  45. }
  46. }
  47. return new ParsingResult(requests, errors, isBulkRequest);
  48. }
  49. }
  50. internal class RpcRequestParseResult
  51. {
  52. public RpcId Id { get; }
  53. public RpcRequest Request { get; }
  54. public RpcError Error { get; }
  55. private RpcRequestParseResult(RpcId id, RpcRequest request, RpcError error)
  56. {
  57. this.Id = id;
  58. this.Request = request;
  59. this.Error = error;
  60. }
  61. public static RpcRequestParseResult Success(RpcRequest request)
  62. {
  63. return new RpcRequestParseResult(request.Id, request, null);
  64. }
  65. public static RpcRequestParseResult Fail(RpcId id, RpcError error)
  66. {
  67. return new RpcRequestParseResult(id, null, error);
  68. }
  69. }
  70. }