thrift/compiler/generate/templates/java/ReactiveClient.mustache (538 lines of code) (raw):
{{!
Copyright (c) Facebook, Inc. and its affiliates.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
}}
{{> AutoGenerated}}
package {{service:javaPackage}};
import static com.facebook.swift.service.SwiftConstants.STICKY_HASH_KEY;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicLong;
import org.apache.thrift.protocol.*;
import org.apache.thrift.ClientPushMetadata;
import org.apache.thrift.InteractionCreate;
import org.apache.thrift.InteractionTerminate;
import com.facebook.thrift.client.ResponseWrapper;
import com.facebook.thrift.client.RpcOptions;
import com.facebook.thrift.util.Readers;
public class {{service:javaCapitalName}}ReactiveClient {{#service:extends}}extends {{service:javaPackage}}.{{service:javaCapitalName}}ReactiveClient{{/service:extends}}
implements {{service:javaCapitalName}}.Reactive {
private static final AtomicLong _interactionCounter = new AtomicLong(0);
{{^service:extends}}
protected final org.apache.thrift.ProtocolId _protocolId;
protected final reactor.core.publisher.Mono<? extends com.facebook.thrift.client.RpcClient> _rpcClient;
protected final Map<String, String> _headers;
protected final Map<String, String> _persistentHeaders;
protected final Set<Long> _activeInteractions;
{{/service:extends}}
{{#service:singleRequestFunctions}}
{{#function:args}}
private static final TField _{{function:javaName}}_{{field:javaTFieldName}} = new TField("{{field:name}}", TType.{{#field:type}}{{> TType}}{{/field:type}}, (short){{field:key}});
{{/function:args}}
private static final java.util.Map<Short, com.facebook.thrift.payload.Reader> _{{function:javaName}}_EXCEPTION_READERS = {{#function:exceptions?}}new HashMap<>();{{/function:exceptions?}}{{^function:exceptions?}}java.util.Collections.emptyMap();{{/function:exceptions?}}
{{#function:exceptions}}
private static final com.facebook.thrift.payload.Reader _{{function:javaName}}_EXCEPTION_READER{{field:index}} = Readers.wrap({{#field:type}}{{> BoxedType}}.asReader());{{/field:type}}
{{/function:exceptions}}
{{/service:singleRequestFunctions}}
{{#service:streamingFunctions}}
{{#function:args}}
private static final TField _{{function:javaName}}_{{field:javaTFieldName}} = new TField("{{field:name}}", TType.{{#field:type}}{{> TType}}{{/field:type}}, (short){{field:key}});
{{/function:args}}
private static final java.util.Map<Short, com.facebook.thrift.payload.Reader> _{{function:javaName}}_EXCEPTION_READERS = {{#function:exceptions?}}new HashMap<>();{{/function:exceptions?}}{{^function:exceptions?}}java.util.Collections.emptyMap();{{/function:exceptions?}}
private static final java.util.Map<Short, com.facebook.thrift.payload.Reader> _{{function:javaName}}_STREAM_EXCEPTION_READERS = {{#function:stream_exceptions?}}new HashMap<>();{{/function:stream_exceptions?}}{{^function:stream_exceptions?}}java.util.Collections.emptyMap();{{/function:stream_exceptions?}}
{{#function:exceptions}}
private static final com.facebook.thrift.payload.Reader _{{function:javaName}}_EXCEPTION_READER{{field:index}} = Readers.wrap({{#field:type}}{{> BoxedType}}.asReader());{{/field:type}}
{{/function:exceptions}}
{{#function:stream_exceptions}}
private static final com.facebook.thrift.payload.Reader _{{function:javaName}}_STREAM_EXCEPTION_READER{{field:index}} = Readers.wrap({{#field:type}}{{> BoxedType}}.asReader());{{/field:type}}
{{/function:stream_exceptions}}
{{/service:streamingFunctions}}
{{#service:sinkFunctions}}
{{#function:args}}
private static final TField _{{function:javaName}}_{{field:javaTFieldName}} = new TField("{{field:name}}", TType.{{#field:type}}{{> TType}}{{/field:type}}, (short){{field:key}});
{{/function:args}}
{{#function:return_type}}{{#type:sink_elem_type}}
private static final TField _{{function:javaName}}_SINK_TFIELD = new TField("payload", TType.{{> TType}}, (short)0);
{{/type:sink_elem_type}}{{/function:return_type}}
private static final java.util.Map<Short, com.facebook.thrift.payload.Reader> _{{function:javaName}}_EXCEPTION_READERS = {{#function:exceptions?}}new HashMap<>();{{/function:exceptions?}}{{^function:exceptions?}}java.util.Collections.emptyMap();{{/function:exceptions?}}
private static final java.util.Map<Short, com.facebook.thrift.payload.Reader> _{{function:javaName}}_STREAM_EXCEPTION_READERS = {{#function:sink_final_response_exceptions?}}new HashMap<>();{{/function:sink_final_response_exceptions?}}{{^function:sink_final_response_exceptions?}}java.util.Collections.emptyMap();{{/function:sink_final_response_exceptions?}}
{{#function:exceptions}}
private static final com.facebook.thrift.payload.Reader _{{function:javaName}}_EXCEPTION_READER{{field:index}} = Readers.wrap({{#field:type}}{{> BoxedType}}.asReader());{{/field:type}}
{{/function:exceptions}}
{{#function:sink_final_response_exceptions}}
private static final com.facebook.thrift.payload.Reader _{{function:javaName}}_STREAM_EXCEPTION_READER{{field:index}} = Readers.wrap({{#field:type}}{{> BoxedType}}.asReader());{{/field:type}}
{{/function:sink_final_response_exceptions}}
{{/service:sinkFunctions}}
{{#service:interactions}}
{{#service:singleRequestFunctions}}
{{#function:args}}
private static final TField _{{function:javaName}}_{{field:javaTFieldName}}_INT = new TField("{{field:name}}", TType.{{#field:type}}{{> TType}}{{/field:type}}, (short){{field:key}});
{{/function:args}}
private static final java.util.Map<Short, com.facebook.thrift.payload.Reader> _{{function:javaName}}_EXCEPTION_READERS_INT = {{#function:exceptions?}}new HashMap<>();{{/function:exceptions?}}{{^function:exceptions?}}java.util.Collections.emptyMap();{{/function:exceptions?}}
{{#function:exceptions}}
private static final com.facebook.thrift.payload.Reader _{{function:javaName}}_EXCEPTION_READER_INT{{field:index}} = Readers.wrap({{#field:type}}{{> BoxedType}}.asReader());{{/field:type}}
{{/function:exceptions}}
{{/service:singleRequestFunctions}}
{{#service:streamingFunctions}}
{{#function:args}}
private static final TField _{{function:javaName}}_{{field:javaTFieldName}}_INT = new TField("{{field:name}}", TType.{{#field:type}}{{> TType}}{{/field:type}}, (short){{field:key}});
{{/function:args}}
private static final java.util.Map<Short, com.facebook.thrift.payload.Reader> _{{function:javaName}}_EXCEPTION_READERS_INT = {{#function:exceptions?}}new HashMap<>();{{/function:exceptions?}}{{^function:exceptions?}}java.util.Collections.emptyMap();{{/function:exceptions?}}
private static final java.util.Map<Short, com.facebook.thrift.payload.Reader> _{{function:javaName}}_STREAM_EXCEPTION_READERS_INT = {{#function:stream_exceptions?}}new HashMap<>();{{/function:stream_exceptions?}}{{^function:stream_exceptions?}}java.util.Collections.emptyMap();{{/function:stream_exceptions?}}
{{#function:exceptions}}
private static final com.facebook.thrift.payload.Reader _{{function:javaName}}_EXCEPTION_READER_INT{{field:index}} = Readers.wrap({{#field:type}}{{> BoxedType}}.asReader());{{/field:type}}
{{/function:exceptions}}
{{#function:stream_exceptions}}
private static final com.facebook.thrift.payload.Reader _{{function:javaName}}_STREAM_EXCEPTION_READER_INT{{field:index}} = Readers.wrap({{#field:type}}{{> BoxedType}}.asReader());{{/field:type}}
{{/function:stream_exceptions}}
{{/service:streamingFunctions}}
{{/service:interactions}}
static {
{{#service:singleRequestFunctions}}{{#function:exceptions}}
_{{function:javaName}}_EXCEPTION_READERS.put((short){{field:key}}, _{{function:javaName}}_EXCEPTION_READER{{field:index}});
{{/function:exceptions}}{{/service:singleRequestFunctions}}
{{#service:streamingFunctions}}{{#function:exceptions}}
_{{function:javaName}}_EXCEPTION_READERS.put((short){{field:key}}, _{{function:javaName}}_EXCEPTION_READER{{field:index}});
{{/function:exceptions}}{{#function:stream_exceptions}}
_{{function:javaName}}_STREAM_EXCEPTION_READERS.put((short){{field:key}}, _{{function:javaName}}_STREAM_EXCEPTION_READER{{field:index}});
{{/function:stream_exceptions}}{{/service:streamingFunctions}}
{{#service:sinkFunctions}}{{#function:exceptions}}
_{{function:javaName}}_EXCEPTION_READERS.put((short){{field:key}}, _{{function:javaName}}_EXCEPTION_READER{{field:index}});
{{/function:exceptions}}{{#function:sink_final_response_exceptions}}
_{{function:javaName}}_STREAM_EXCEPTION_READERS.put((short){{field:key}}, _{{function:javaName}}_STREAM_EXCEPTION_READER{{field:index}});
{{/function:sink_final_response_exceptions}}{{/service:sinkFunctions}}
}
public {{service:javaCapitalName}}ReactiveClient(org.apache.thrift.ProtocolId _protocolId, reactor.core.publisher.Mono<? extends com.facebook.thrift.client.RpcClient> _rpcClient) {
{{#service:extends}}super(_protocolId, _rpcClient);{{/service:extends}}
{{^service:extends}}
this._protocolId = _protocolId;
this._rpcClient = _rpcClient;
this._headers = java.util.Collections.emptyMap();
this._persistentHeaders = java.util.Collections.emptyMap();
this._activeInteractions = ConcurrentHashMap.newKeySet();
{{/service:extends}}
}
public {{service:javaCapitalName}}ReactiveClient(org.apache.thrift.ProtocolId _protocolId, reactor.core.publisher.Mono<? extends com.facebook.thrift.client.RpcClient> _rpcClient, Map<String, String> _headers, Map<String, String> _persistentHeaders) {
this(_protocolId, _rpcClient, _headers, _persistentHeaders, new AtomicLong(), ConcurrentHashMap.newKeySet());
}
public {{service:javaCapitalName}}ReactiveClient(org.apache.thrift.ProtocolId _protocolId, reactor.core.publisher.Mono<? extends com.facebook.thrift.client.RpcClient> _rpcClient, Map<String, String> _headers, Map<String, String> _persistentHeaders, AtomicLong interactionCounter, Set<Long> activeInteractions) {
{{#service:extends}}super(_protocolId, _rpcClient, _headers, _persistentHeaders, interactionCounter, activeInteractions);{{/service:extends}}
{{^service:extends}}
this._protocolId = _protocolId;
this._rpcClient = _rpcClient;
this._headers = _headers;
this._persistentHeaders = _persistentHeaders;
this._activeInteractions = activeInteractions;
{{/service:extends}}
}
@java.lang.Override
public void dispose() {}
{{#service:singleRequestFunctions}}
private com.facebook.thrift.payload.Writer _create{{function:javaName}}Writer({{#function:args}}final {{#field:type}}{{> Type}}{{/field:type}} {{field:javaName}}{{^last?}}, {{/last?}}{{/function:args}}) {
return oprot -> {
try {
{{#function:args}}
{{#field:type}}
{
oprot.writeFieldBegin(_{{function:javaName}}_{{field:javaTFieldName}});
{{> FieldType}} _iter0 = {{field:javaName}};
{{#field:type}}
{{field:nestedDepth++}}{{> WriteRequestType}}{{field:nestedDepth--}}
{{/field:type}}
oprot.writeFieldEnd();
}
{{/field:type}}
{{/function:args}}
} catch (Throwable _e) {
throw reactor.core.Exceptions.propagate(_e);
}
};
}
private static final com.facebook.thrift.payload.Reader _{{function:javaName}}_READER = {{!
}}{{#function:voidType}}Readers.voidReader(){{/function:voidType}}{{!
}}{{^function:voidType}}{{#function:return_type}}{{> TypeReader }}{{/function:return_type}}{{/function:voidType}};
@java.lang.Override
public reactor.core.publisher.Mono<com.facebook.thrift.client.ResponseWrapper<{{#function:return_type}}{{> BoxedType}}{{/function:return_type}}>> {{function:javaName}}Wrapper({{#function:args}}final {{#field:type}}{{> Type}}{{/field:type}} {{field:javaName}}, {{/function:args}} final com.facebook.thrift.client.RpcOptions rpcOptions) {
return _rpcClient
.flatMap(_rpc -> {
org.apache.thrift.RequestRpcMetadata _metadata = new org.apache.thrift.RequestRpcMetadata.Builder()
.setName("{{function:name}}")
.setKind(org.apache.thrift.RpcKind.{{#function:oneway?}}SINGLE_REQUEST_NO_RESPONSE{{/function:oneway?}}{{^function:oneway?}}SINGLE_REQUEST_SINGLE_RESPONSE{{/function:oneway?}})
.setOtherMetadata(getHeaders(rpcOptions))
.setProtocol(_protocolId)
.build();
com.facebook.thrift.payload.ClientRequestPayload<{{#function:return_type}}{{> BoxedType}}{{/function:return_type}}> _crp =
com.facebook.thrift.payload.ClientRequestPayload.create(
_create{{function:javaName}}Writer({{#function:args}}{{field:javaName}}{{^last?}}, {{/last?}}{{/function:args}}),
_{{function:javaName}}_READER,
_{{function:javaName}}_EXCEPTION_READERS,
_metadata,
java.util.Collections.emptyMap());
return _rpc
{{#function:oneway?}}.singleRequestNoResponse(_crp, rpcOptions).thenReturn(ResponseWrapper.create(null, java.util.Collections.emptyMap(), java.util.Collections.emptyMap())){{/function:oneway?}}{{!
}}{{^function:oneway?}}.singleRequestSingleResponse(_crp, rpcOptions).doOnNext(_p -> {if(_p.getException() != null) throw com.facebook.thrift.util.ExceptionUtil.propagate(_p);}){{/function:oneway?}};
});
}
@java.lang.Override
public reactor.core.publisher.Mono<{{#function:return_type}}{{> BoxedType}}{{/function:return_type}}> {{function:javaName}}({{#function:args}}final {{#field:type}}{{> Type}}{{/field:type}} {{field:javaName}}, {{/function:args}} final com.facebook.thrift.client.RpcOptions rpcOptions) {
return {{function:javaName}}Wrapper({{#function:args}}{{field:javaName}}, {{/function:args}} rpcOptions){{#function:oneway?}}.then(){{/function:oneway?}}{{!
}}{{^function:oneway?}}{{^function:voidType}}.map(_p -> _p.getData()){{/function:voidType}}{{/function:oneway?}}{{!
}}{{^function:oneway?}}{{#function:voidType}}.then(){{/function:voidType}}{{/function:oneway?}};
}
@java.lang.Override
public reactor.core.publisher.Mono<{{#function:return_type}}{{> BoxedType}}{{/function:return_type}}> {{function:javaName}}({{#function:args}}final {{#field:type}}{{> Type}}{{/field:type}} {{field:javaName}}{{^last?}}, {{/last?}}{{/function:args}}) {
return {{function:javaName}}({{#function:args}}{{field:javaName}}, {{/function:args}} com.facebook.thrift.client.RpcOptions.EMPTY);
}
{{/service:singleRequestFunctions}}
{{#service:streamingFunctions}}
private com.facebook.thrift.payload.Writer _create{{function:javaName}}Writer({{#function:args}}final {{#field:type}}{{> Type}}{{/field:type}} {{field:javaName}}{{^last?}}, {{/last?}}{{/function:args}}) {
return oprot -> {
try {
{{#function:args}}
{{#field:type}}
{
oprot.writeFieldBegin(_{{function:javaName}}_{{field:javaTFieldName}});
{{> FieldType}} _iter0 = {{field:javaName}};
{{#field:type}}
{{field:nestedDepth++}}{{> WriteRequestType}}{{field:nestedDepth--}}
{{/field:type}}
oprot.writeFieldEnd();
}
{{/field:type}}
{{/function:args}}
} catch (Throwable _e) {
throw reactor.core.Exceptions.propagate(_e);
}
};
}
private static final com.facebook.thrift.payload.Reader _{{function:javaName}}_READER = {{!
}}{{#function:voidType}}Readers.voidReader(){{/function:voidType}}{{!
}}{{^function:voidType}}{{#function:return_type}}{{#type:stream_elem_type}}{{> TypeReader }}{{/type:stream_elem_type}}{{/function:return_type}}{{/function:voidType}};
{{#function:return_type}}{{#type:stream_has_first_response?}}
private static final com.facebook.thrift.payload.Reader _{{function:javaName}}_FIRST_READER = {{!
}}{{#function:voidType}}Readers.voidReader(){{/function:voidType}}{{!
}}{{^function:voidType}}{{#function:return_type}}{{#type:stream_first_response_type}}{{> TypeReader }}{{/type:stream_first_response_type}}{{/function:return_type}}{{/function:voidType}};
{{/type:stream_has_first_response?}}{{/function:return_type}}
@java.lang.Override
public reactor.core.publisher.Flux<com.facebook.thrift.client.ResponseWrapper<{{#function:return_type}}{{> StreamReturnType}}{{/function:return_type}}>> {{function:javaName}}Wrapper({{#function:args}}final {{#field:type}}{{> Type}}{{/field:type}} {{field:javaName}}, {{/function:args}} final com.facebook.thrift.client.RpcOptions rpcOptions) {
return _rpcClient
.flatMapMany(_rpc -> {
org.apache.thrift.RequestRpcMetadata _metadata = new org.apache.thrift.RequestRpcMetadata.Builder()
.setName("{{function:name}}")
.setKind(org.apache.thrift.RpcKind.SINGLE_REQUEST_STREAMING_RESPONSE)
.setOtherMetadata(getHeaders(rpcOptions))
.setProtocol(_protocolId)
.build();
com.facebook.thrift.payload.ClientRequestPayload<{{#function:return_type}}{{#type:stream_elem_type}}{{> BoxedType}}{{/type:stream_elem_type}}{{/function:return_type}}> _crp =
com.facebook.thrift.payload.ClientRequestPayload.create(
_create{{function:javaName}}Writer({{#function:args}}{{field:javaName}}{{^last?}}, {{/last?}}{{/function:args}}),
_{{function:javaName}}_READER,{{#function:return_type}}{{#type:stream_has_first_response?}}
_{{function:javaName}}_FIRST_READER,{{/type:stream_has_first_response?}}{{/function:return_type}}
_{{function:javaName}}_EXCEPTION_READERS,
_{{function:javaName}}_STREAM_EXCEPTION_READERS,
_metadata,
java.util.Collections.emptyMap());
return _rpc
.singleRequestStreamingResponse(_crp, rpcOptions)
.doOnNext(_p -> {if(_p.getException() != null) throw reactor.core.Exceptions.propagate(_p.getException());}){{#function:return_type}}{{^type:stream_has_first_response?}}
.filter((_p) -> ((com.facebook.thrift.model.StreamResponse)_p.getData()).isSetData()){{/type:stream_has_first_response?}}{{/function:return_type}}
.map(_p -> ResponseWrapper.create((({{#function:return_type}}{{> StreamResponseGeneric}}{{/function:return_type}})_p.getData()){{#function:return_type}}{{^type:stream_has_first_response?}}.getData(){{/type:stream_has_first_response?}}{{/function:return_type}}, _p.getHeaders(), _p.getBinaryHeaders()));
});
}
@java.lang.Override
public reactor.core.publisher.Flux<{{#function:return_type}}{{> StreamReturnType}}{{/function:return_type}}> {{function:javaName}}({{#function:args}}final {{#field:type}}{{> Type}}{{/field:type}} {{field:javaName}}, {{/function:args}} final com.facebook.thrift.client.RpcOptions rpcOptions) {
return {{function:javaName}}Wrapper({{#function:args}}{{field:javaName}}, {{/function:args}} rpcOptions).map(_p -> _p.getData());
}
@java.lang.Override
public reactor.core.publisher.Flux<{{#function:return_type}}{{> StreamReturnType}}{{/function:return_type}}> {{function:javaName}}({{#function:args}}final {{#field:type}}{{> Type}}{{/field:type}} {{field:javaName}}{{^last?}}, {{/last?}}{{/function:args}}) {
return {{function:javaName}}({{#function:args}}{{field:javaName}}, {{/function:args}} com.facebook.thrift.client.RpcOptions.EMPTY);
}
{{/service:streamingFunctions}}
{{#service:sinkFunctions}}
private com.facebook.thrift.payload.Writer _create{{function:javaName}}Writer({{#function:args}}final {{#field:type}}{{> Type}}{{/field:type}} {{field:javaName}}{{^last?}}, {{/last?}}{{/function:args}}) {
return oprot -> {
try {
{{#function:args}}
{{#field:type}}
{
oprot.writeFieldBegin(_{{function:javaName}}_{{field:javaTFieldName}});
{{> FieldType}} _iter0 = {{field:javaName}};
{{#field:type}}
{{field:nestedDepth++}}{{> WriteRequestType}}{{field:nestedDepth--}}
{{/field:type}}
oprot.writeFieldEnd();
}
{{/field:type}}
{{/function:args}}
} catch (Throwable _e) {
throw reactor.core.Exceptions.propagate(_e);
}
};
}
private com.facebook.thrift.payload.Writer _create{{function:javaName}}SinkWriter({{#function:return_type}}{{#type:sink_elem_type}}{{ >BoxedType}} _p{{/type:sink_elem_type}}{{/function:return_type}}) {
return oprot -> {
try {
oprot.writeFieldBegin(_{{function:javaName}}_SINK_TFIELD);
{{#function:return_type}}{{#type:sink_elem_type}}
{{> WriteSinkPayloadType}}
{{/type:sink_elem_type}}{{/function:return_type}}
oprot.writeFieldEnd();
} catch (Throwable _e) {
throw reactor.core.Exceptions.propagate(_e);
}
};
}
private static final com.facebook.thrift.payload.Reader _{{function:javaName}}_READER = {{!
}}{{#function:voidType}}Readers.voidReader(){{/function:voidType}}{{!
}}{{^function:voidType}}{{#function:return_type}}{{#type:sink_final_response_type}}{{> TypeReader }}{{/type:sink_final_response_type}}{{/function:return_type}}{{/function:voidType}};
{{#function:return_type}}{{#type:sink_has_first_response?}}
private static final com.facebook.thrift.payload.Reader _{{function:javaName}}_FIRST_READER = {{!
}}{{#function:voidType}}Readers.voidReader(){{/function:voidType}}{{!
}}{{^function:voidType}}{{#function:return_type}}{{#type:sink_first_response_type}}{{> TypeReader }}{{/type:sink_first_response_type}}{{/function:return_type}}{{/function:voidType}};
{{/type:sink_has_first_response?}}{{/function:return_type}}
@java.lang.Override
public {{#function:return_type}}{{> SinkWrapperReturnType}}{{/function:return_type}} {{function:javaName}}Wrapper({{#function:args}}final {{#field:type}}{{> Type}}{{/field:type}} {{field:javaName}}, {{/function:args}} org.reactivestreams.Publisher<{{#function:return_type}}{{#type:sink_elem_type}}{{ >BoxedType}}{{/type:sink_elem_type}}{{/function:return_type}}> payloads, com.facebook.thrift.client.RpcOptions rpcOptions) {
return _rpcClient
.flatMapMany(_rpc -> {
org.apache.thrift.RequestRpcMetadata _metadata = new org.apache.thrift.RequestRpcMetadata.Builder()
.setName("{{function:name}}")
.setKind(org.apache.thrift.RpcKind.SINK)
.setOtherMetadata(getHeaders(rpcOptions))
.setProtocol(_protocolId)
.build();
com.facebook.thrift.payload.ClientRequestPayload<{{#function:return_type}}{{#type:sink_final_response_type}}{{> BoxedType}}{{/type:sink_final_response_type}}{{/function:return_type}}> _crp =
com.facebook.thrift.payload.ClientRequestPayload.create(
_create{{function:javaName}}Writer({{#function:args}}{{field:javaName}}{{^last?}}, {{/last?}}{{/function:args}}),
_{{function:javaName}}_READER,{{#function:return_type}}{{#type:sink_has_first_response?}}
_{{function:javaName}}_FIRST_READER,{{/type:sink_has_first_response?}}{{/function:return_type}}
_{{function:javaName}}_EXCEPTION_READERS,
_{{function:javaName}}_STREAM_EXCEPTION_READERS,
_metadata,
java.util.Collections.emptyMap());
reactor.core.publisher.Flux<com.facebook.thrift.payload.ClientRequestPayload<{{#function:return_type}}{{#type:sink_final_response_type}}{{> BoxedType}}{{/type:sink_final_response_type}}{{/function:return_type}}>> _sink =
reactor.core.publisher.Mono.just(_crp).concatWith(reactor.core.publisher.Flux.from(payloads)
.map(_p -> com.facebook.thrift.payload.ClientRequestPayload.create(
_create{{function:javaName}}SinkWriter(_p),
_{{function:javaName}}_READER,{{#function:return_type}}{{#type:sink_has_first_response?}}
_{{function:javaName}}_FIRST_READER,{{/type:sink_has_first_response?}}{{/function:return_type}}
_{{function:javaName}}_EXCEPTION_READERS,
_{{function:javaName}}_STREAM_EXCEPTION_READERS,
_metadata,
java.util.Collections.emptyMap())));
return _rpc
.streamingRequestStreamingResponse(_sink, rpcOptions)
.doOnNext(_p -> {if(_p.getException() != null) throw reactor.core.Exceptions.propagate(_p.getException());})
.limitRequest(2){{#function:return_type}}{{^type:sink_has_first_response?}}
.filter((_p) -> ((com.facebook.thrift.model.StreamResponse)_p.getData()).isSetData()){{/type:sink_has_first_response?}}{{/function:return_type}}
.map(_p -> ResponseWrapper.create((({{#function:return_type}}{{> SinkResponseGeneric}}{{/function:return_type}})_p.getData()){{#function:return_type}}{{^type:sink_has_first_response?}}.getData(){{/type:sink_has_first_response?}}{{/function:return_type}}, _p.getHeaders(), _p.getBinaryHeaders()));
}){{#function:return_type}}{{^type:sink_has_first_response?}}.single(){{/type:sink_has_first_response?}}{{/function:return_type}};
}
@java.lang.Override
public {{#function:return_type}}{{> SinkReturnType}}{{/function:return_type}} {{function:javaName}}({{#function:args}}final {{#field:type}}{{> Type}}{{/field:type}} {{field:javaName}}, {{/function:args}} org.reactivestreams.Publisher<{{#function:return_type}}{{#type:sink_elem_type}}{{ >BoxedType}}{{/type:sink_elem_type}}{{/function:return_type}}> payloads, com.facebook.thrift.client.RpcOptions rpcOptions) {
return {{function:javaName}}Wrapper({{#function:args}}{{field:javaName}}, {{/function:args}} payloads, rpcOptions).map(_p -> _p.getData());
}
@java.lang.Override
public {{#function:return_type}}{{> SinkReturnType}}{{/function:return_type}} {{function:javaName}}({{#function:args}}final {{#field:type}}{{> Type}}{{/field:type}} {{field:javaName}}, {{/function:args}} org.reactivestreams.Publisher<{{#function:return_type}}{{#type:sink_elem_type}}{{ >BoxedType}}{{/type:sink_elem_type}}{{/function:return_type}}> payloads) {
return {{function:javaName}}({{#function:args}}{{field:javaName}}, {{/function:args}} payloads, com.facebook.thrift.client.RpcOptions.EMPTY);
}
{{/service:sinkFunctions}}
{{#service:interactions}}
public class {{service:name}}Impl implements {{service:name}} {
private final long interactionId;
{{service:name}}Impl(long interactionId) {
this.interactionId = interactionId;
}
{{#service:singleRequestFunctions}}
private final java.util.Map<Short, com.facebook.thrift.payload.Reader> _{{function:javaName}}_EXCEPTION_READERS = {{#function:exceptions?}}new HashMap<>();{{/function:exceptions?}}{{^function:exceptions?}}java.util.Collections.emptyMap();{{/function:exceptions?}}
{{#function:exceptions}}
private final com.facebook.thrift.payload.Reader _{{function:javaName}}_EXCEPTION_READER_INT{{field:index}} = Readers.wrap({{#field:type}}{{> BoxedType}}.asReader());{{/field:type}}
{{/function:exceptions}}
{{/service:singleRequestFunctions}}
{{#service:singleRequestFunctions}}
private com.facebook.thrift.payload.Writer _create{{function:javaName}}Writer({{#function:args}}final {{#field:type}}{{> Type}}{{/field:type}} {{field:javaName}}{{^last?}}, {{/last?}}{{/function:args}}) {
return oprot -> {
try {
{{#function:args}}
{{#field:type}}
{
oprot.writeFieldBegin(_{{function:javaName}}_{{field:javaTFieldName}}_INT);
{{> FieldType}} _iter0 = {{field:javaName}};
{{#field:type}}
{{field:nestedDepth++}}{{> WriteRequestType}}{{field:nestedDepth--}}
{{/field:type}}
oprot.writeFieldEnd();
}
{{/field:type}}
{{/function:args}}
} catch (Throwable _e) {
throw reactor.core.Exceptions.propagate(_e);
}
};
}
private final com.facebook.thrift.payload.Reader _{{function:javaName}}_READER = {{!
}}{{#function:voidType}}Readers.voidReader(){{/function:voidType}}{{!
}}{{^function:voidType}}{{#function:return_type}}{{> TypeReader }}{{/function:return_type}}{{/function:voidType}};
public reactor.core.publisher.Mono<{{#function:return_type}}{{> BoxedType}}{{/function:return_type}}> {{function:javaName}}({{#function:args}}
final {{#field:type}}{{> Type}}{{/field:type}} {{field:javaName}}{{^last?}},{{/last?}}{{/function:args}}) {
return {{function:javaName}}Wrapper({{#function:args}}{{field:javaName}}, {{/function:args}} com.facebook.thrift.client.RpcOptions.EMPTY){{#function:oneway?}}.then(){{/function:oneway?}}{{!
}}{{^function:oneway?}}{{^function:voidType}}.map(_p -> _p.getData()){{/function:voidType}}{{/function:oneway?}}{{!
}}{{^function:oneway?}}{{#function:voidType}}.then(){{/function:voidType}}{{/function:oneway?}};
}
@java.lang.Override
public reactor.core.publisher.Mono<{{#function:return_type}}{{> BoxedType}}{{/function:return_type}}> {{function:javaName}}({{#function:args}}final {{#field:type}}{{> Type}}{{/field:type}} {{field:javaName}}, {{/function:args}}RpcOptions rpcOptions) {
return {{function:javaName}}Wrapper({{#function:args}}{{field:javaName}}, {{/function:args}} rpcOptions){{#function:oneway?}}.then(){{/function:oneway?}}{{!
}}{{^function:oneway?}}{{^function:voidType}}.map(_p -> _p.getData()){{/function:voidType}}{{/function:oneway?}}{{!
}}{{^function:oneway?}}{{#function:voidType}}.then(){{/function:voidType}}{{/function:oneway?}};
}
@java.lang.Override
public reactor.core.publisher.Mono<ResponseWrapper<{{#function:return_type}}{{> BoxedType}}{{/function:return_type}}>> {{function:javaName}}Wrapper({{#function:args}}final {{#field:type}}{{> Type}}{{/field:type}} {{field:javaName}}, {{/function:args}}RpcOptions rpcOptions) {
return _rpcClient
.subscriberContext(ctx -> ctx.put(STICKY_HASH_KEY, interactionId))
.flatMap(_rpc -> {
String interactionName = "{{service:name}}.{{function:name}}";
org.apache.thrift.RequestRpcMetadata.Builder _metadataBuilder = new org.apache.thrift.RequestRpcMetadata.Builder()
.setName(interactionName)
.setKind(org.apache.thrift.RpcKind.{{#function:oneway?}}SINGLE_REQUEST_NO_RESPONSE{{/function:oneway?}}{{^function:oneway?}}SINGLE_REQUEST_SINGLE_RESPONSE{{/function:oneway?}})
.setOtherMetadata(getHeaders(rpcOptions))
.setProtocol(_protocolId);
if (_activeInteractions.contains(interactionId)) {
_metadataBuilder.setInteractionId(interactionId);
} else {
_metadataBuilder.setInteractionCreate(
new InteractionCreate.Builder()
.setInteractionId(interactionId)
.setInteractionName("{{service:name}}")
.build());
_metadataBuilder.setInteractionId(0L);
_activeInteractions.add(interactionId);
}
org.apache.thrift.RequestRpcMetadata _metadata = _metadataBuilder.build();
com.facebook.thrift.payload.ClientRequestPayload<{{#function:return_type}}{{> BoxedType}}{{/function:return_type}}> _crp =
com.facebook.thrift.payload.ClientRequestPayload.create(
_create{{function:javaName}}Writer({{#function:args}}{{field:javaName}}{{^last?}}, {{/last?}}{{/function:args}}),
_{{function:javaName}}_READER,
_{{function:javaName}}_EXCEPTION_READERS_INT,
_metadata,
java.util.Collections.emptyMap());
return _rpc
{{#function:oneway?}}.singleRequestNoResponse(_crp, rpcOptions).thenReturn(ResponseWrapper.create(null, java.util.Collections.emptyMap(), java.util.Collections.emptyMap())){{/function:oneway?}}{{!
}}{{^function:oneway?}}.singleRequestSingleResponse(_crp, rpcOptions).doOnNext(_p -> {if(_p.getException() != null) throw com.facebook.thrift.util.ExceptionUtil.propagate(_p);}){{/function:oneway?}};
});
}
{{/service:singleRequestFunctions}}
{{#service:streamingFunctions}}
private com.facebook.thrift.payload.Writer _create{{function:javaName}}Writer({{#function:args}}final {{#field:type}}{{> Type}}{{/field:type}} {{field:javaName}}{{^last?}}, {{/last?}}{{/function:args}}) {
return oprot -> {
try {
{{#function:args}}
{{#field:type}}
{
oprot.writeFieldBegin(_{{function:javaName}}_{{field:javaTFieldName}}_INT);
{{> FieldType}} _iter0 = {{field:javaName}};
{{#field:type}}
{{field:nestedDepth++}}{{> WriteRequestType}}{{field:nestedDepth--}}
{{/field:type}}
oprot.writeFieldEnd();
}
{{/field:type}}
{{/function:args}}
} catch (Throwable _e) {
throw reactor.core.Exceptions.propagate(_e);
}
};
}
private final com.facebook.thrift.payload.Reader _{{function:javaName}}_READER = {{!
}}{{#function:voidType}}Readers.voidReader(){{/function:voidType}}{{!
}}{{^function:voidType}}{{#function:return_type}}{{#type:stream_elem_type}}{{> TypeReader }}{{/type:stream_elem_type}}{{/function:return_type}}{{/function:voidType}};
{{#function:return_type}}{{#type:stream_has_first_response?}}
private final com.facebook.thrift.payload.Reader _{{function:javaName}}_FIRST_READER = {{!
}}{{#function:voidType}}Readers.voidReader(){{/function:voidType}}{{!
}}{{^function:voidType}}{{#function:return_type}}{{#type:stream_first_response_type}}{{> TypeReader }}{{/type:stream_first_response_type}}{{/function:return_type}}{{/function:voidType}};
{{/type:stream_has_first_response?}}{{/function:return_type}}
@java.lang.Override
public reactor.core.publisher.Flux<com.facebook.thrift.client.ResponseWrapper<{{#function:return_type}}{{> StreamReturnType}}{{/function:return_type}}>> {{function:javaName}}Wrapper({{#function:args}}final {{#field:type}}{{> Type}}{{/field:type}} {{field:javaName}}, {{/function:args}} final com.facebook.thrift.client.RpcOptions rpcOptions) {
return _rpcClient
.subscriberContext(ctx -> ctx.put(STICKY_HASH_KEY, interactionId))
.flatMapMany(_rpc -> {
String interactionName = "{{service:name}}.{{function:name}}";
org.apache.thrift.RequestRpcMetadata.Builder _metadataBuilder = new org.apache.thrift.RequestRpcMetadata.Builder()
.setName(interactionName)
.setKind(org.apache.thrift.RpcKind.SINGLE_REQUEST_STREAMING_RESPONSE)
.setOtherMetadata(getHeaders(rpcOptions))
.setProtocol(_protocolId);
if (_activeInteractions.contains(interactionId)) {
_metadataBuilder.setInteractionId(interactionId);
} else {
_metadataBuilder.setInteractionCreate(
new InteractionCreate.Builder()
.setInteractionId(interactionId)
.setInteractionName("{{service:name}}")
.build());
_metadataBuilder.setInteractionId(0L);
_activeInteractions.add(interactionId);
}
com.facebook.thrift.payload.ClientRequestPayload<{{#function:return_type}}{{#type:stream_elem_type}}{{> BoxedType}}{{/type:stream_elem_type}}{{/function:return_type}}> _crp =
com.facebook.thrift.payload.ClientRequestPayload.create(
_create{{function:javaName}}Writer({{#function:args}}{{field:javaName}}{{^last?}}, {{/last?}}{{/function:args}}),
_{{function:javaName}}_READER,{{#function:return_type}}{{#type:stream_has_first_response?}}
_{{function:javaName}}_FIRST_READER,{{/type:stream_has_first_response?}}{{/function:return_type}}
_{{function:javaName}}_EXCEPTION_READERS_INT,
_{{function:javaName}}_STREAM_EXCEPTION_READERS_INT,
_metadataBuilder.build(),
java.util.Collections.emptyMap());
return _rpc
.singleRequestStreamingResponse(_crp, rpcOptions)
.doOnNext(_p -> {if(_p.getException() != null) throw reactor.core.Exceptions.propagate(_p.getException());}){{#function:return_type}}{{^type:stream_has_first_response?}}
.filter((_p) -> ((com.facebook.thrift.model.StreamResponse)_p.getData()).isSetData()){{/type:stream_has_first_response?}}{{/function:return_type}}
.map(_p -> ResponseWrapper.create((({{#function:return_type}}{{> StreamResponseGeneric}}{{/function:return_type}})_p.getData()){{#function:return_type}}{{^type:stream_has_first_response?}}.getData(){{/type:stream_has_first_response?}}{{/function:return_type}}, _p.getHeaders(), _p.getBinaryHeaders()));
});
}
@java.lang.Override
public reactor.core.publisher.Flux<{{#function:return_type}}{{> StreamReturnType}}{{/function:return_type}}> {{function:javaName}}({{#function:args}}final {{#field:type}}{{> Type}}{{/field:type}} {{field:javaName}}, {{/function:args}} final com.facebook.thrift.client.RpcOptions rpcOptions) {
return {{function:javaName}}Wrapper({{#function:args}}{{field:javaName}}, {{/function:args}} rpcOptions).map(_p -> _p.getData());
}
@java.lang.Override
public reactor.core.publisher.Flux<{{#function:return_type}}{{> StreamReturnType}}{{/function:return_type}}> {{function:javaName}}({{#function:args}}final {{#field:type}}{{> Type}}{{/field:type}} {{field:javaName}}{{^last?}}, {{/last?}}{{/function:args}}) {
return {{function:javaName}}({{#function:args}}{{field:javaName}}, {{/function:args}} com.facebook.thrift.client.RpcOptions.EMPTY);
}
{{/service:streamingFunctions}}
@java.lang.Override
public void dispose() {
_activeInteractions.remove(interactionId);
_rpcClient
.subscriberContext(ctx -> ctx.put(STICKY_HASH_KEY, interactionId))
.flatMap(_rpc -> {
InteractionTerminate term = new InteractionTerminate.Builder().setInteractionId(interactionId).build();
ClientPushMetadata metadata = ClientPushMetadata.fromInteractionTerminate(term);
return _rpc.metadataPush(metadata, com.facebook.thrift.client.RpcOptions.EMPTY);
}).subscribe();
}
}
public {{service:name}} create{{service:name}}() {
return new {{service:name}}Impl(_interactionCounter.incrementAndGet());
}
{{^last?}}
{{/last?}}
{{/service:interactions}}
private Map<String, String> getHeaders(com.facebook.thrift.client.RpcOptions rpcOptions) {
Map<String, String> headers = new HashMap<>();
if (rpcOptions.getRequestHeaders() != null && !rpcOptions.getRequestHeaders().isEmpty()) {
headers.putAll(rpcOptions.getRequestHeaders());
}
if (_headers != null && !_headers.isEmpty()) {
headers.putAll(_headers);
}
if (_persistentHeaders != null && !_persistentHeaders.isEmpty()) {
headers.putAll(_persistentHeaders);
}
return headers;
}
}