docs: @Override
      public final <RQ, RS> Maybe<Response<RS>> executeRequest(RestCommand<RQ, RS> command)
              throws RestEndpointIOException {
          URI uri = spliceUrl(command.getUri());
          HttpUriRequest rq;
          Serializer serializer;
          switch (command.getHttpMethod()) {
          case GET:
              rq = new HttpGet(uri);
              break;
          case POST:
              if (command.isMultipart()) {
                  MultiPartRequest rqData = (MultiPartRequest) command.getRequest();
                  rq = buildMultipartRequest(uri, rqData);
              } else {
                  serializer = getSupportedSerializer(command.getRequest());
                  rq = new HttpPost(uri);
                  ((HttpPost) rq)
                          .setEntity(new ByteArrayEntity(serializer.serialize(command.getRequest()), ContentType.create(
                                  serializer.getMimeType())));
              }
              break;
          case PUT:
              serializer = getSupportedSerializer(command.getRequest());
              rq = new HttpPut(uri);
              ((HttpPut) rq).setEntity(new ByteArrayEntity(serializer.serialize(command.getRequest()), ContentType.create(
                      serializer.getMimeType())));
              break;
          case DELETE:
              rq = new HttpDelete(uri);
              break;
          case PATCH:
              serializer = getSupportedSerializer(command.getRequest());
              rq = new HttpPatch(uri);
              ((HttpPatch) rq)
                      .setEntity(new ByteArrayEntity(serializer.serialize(command.getRequest()), ContentType.create(
                              serializer.getMimeType())));
              break;
          default:
              throw new IllegalArgumentException("Method '" + command.getHttpMethod() + "' is unsupported");
          }
  
          return executeInternal(rq, new TypeConverterCallback<RS>(serializers, command.getResponseType()));
      }