anchor.diff:      LResponseStream := TGCMemoryStream.Create;
       try
         ObjectToStream<T>(Client.Request, ARequestEntity, LRequestStream);
  -      Client.Patch(URL, LRequestStream, LResponseStream, CustomHeaders);
  +      InternalHttpRequest(AHttpMethod, LRequestStream, LResponseStream, CustomHeaders);
         StreamToObject(AResponseEntity, Client.Response, LResponseStream);
       finally
         LResponseStream.Free;
  
positive.code:     procedure AfterOPTIONS; virtual;
  
      procedure InitHttpRequest; virtual;
    public
      constructor Create(AOwner: TComponent); override;
      destructor Destroy; override;
  
negative.code:   WiRL.Rtti.Utils,
    WiRL.Core.Utils;
  
  type
    THttpMethodImplementation = reference to procedure (
      AResource: TWiRLClientCustomResource;
      ARequestStream, AResponseStream: TStream;
      ACustomHeaders: TWiRLHeaders);
  
    THttpMethodImplementations = array [TWiRLHttpMethod] of THttpMethodImplementation;
  
  var
    HttpMethodImplementations: THttpMethodImplementations;
  
  procedure RegisterHttpMethodImplementations;
  begin
    HttpMethodImplementations[TWiRLHttpMethod.GET] :=
      procedure (AResource: TWiRLClientCustomResource; ARequestStream, AResponseStream: TStream; ACustomHeaders: TWiRLHeaders)
      begin
        AResource.Client.Get(AResource.URL, AResponseStream, ACustomHeaders);
      end;
  
    HttpMethodImplementations[TWiRLHttpMethod.POST] :=
      procedure (AResource: TWiRLClientCustomResource; ARequestStream, AResponseStream: TStream; ACustomHeaders: TWiRLHeaders)
      begin
        AResource.Client.Post(AResource.URL, ARequestStream, AResponseStream, ACustomHeaders);
      end;
  
    HttpMethodImplementations[TWiRLHttpMethod.PUT] :=
      procedure (AResource: TWiRLClientCustomResource; ARequestStream, AResponseStream: TStream; ACustomHeaders: TWiRLHeaders)
      begin
        AResource.Client.Put(AResource.URL, ARequestStream, AResponseStream, ACustomHeaders);
      end;
  
    HttpMethodImplementations[TWiRLHttpMethod.DELETE] :=
      procedure (AResource: TWiRLClientCustomResource; ARequestStream, AResponseStream: TStream; ACustomHeaders: TWiRLHeaders)
      begin
        AResource.Client.Delete(AResource.URL, AResponseStream, ACustomHeaders);
      end;
  
    HttpMethodImplementations[TWiRLHttpMethod.PATCH] :=
      procedure (AResource: TWiRLClientCustomResource; ARequestStream, AResponseStream: TStream; ACustomHeaders: TWiRLHeaders)
      begin
        AResource.Client.Patch(AResource.URL, ARequestStream, AResponseStream, ACustomHeaders);
      end;
  
  end;
  
  { TWiRLClientCustomResource }
  
  procedure TWiRLClientCustomResource.AfterDELETE;
  