• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2017 Google LLC
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are
6  * met:
7  *
8  *     * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  *     * Redistributions in binary form must reproduce the above
11  * copyright notice, this list of conditions and the following disclaimer
12  * in the documentation and/or other materials provided with the
13  * distribution.
14  *     * Neither the name of Google LLC nor the names of its
15  * contributors may be used to endorse or promote products derived from
16  * this software without specific prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30 package com.google.api.gax.grpc;
31 
32 import com.google.api.core.BetaApi;
33 import com.google.api.gax.rpc.RequestParamsExtractor;
34 import io.grpc.MethodDescriptor;
35 
36 /** Grpc-specific settings for creating callables. */
37 public class GrpcCallSettings<RequestT, ResponseT> {
38   private final MethodDescriptor<RequestT, ResponseT> methodDescriptor;
39   private final RequestParamsExtractor<RequestT> paramsExtractor;
40   private final boolean alwaysAwaitTrailers;
41 
GrpcCallSettings(Builder<RequestT, ResponseT> builder)42   private GrpcCallSettings(Builder<RequestT, ResponseT> builder) {
43     this.methodDescriptor = builder.methodDescriptor;
44     this.paramsExtractor = builder.paramsExtractor;
45     this.alwaysAwaitTrailers = builder.shouldAwaitTrailers;
46   }
47 
getMethodDescriptor()48   public MethodDescriptor<RequestT, ResponseT> getMethodDescriptor() {
49     return methodDescriptor;
50   }
51 
getParamsExtractor()52   public RequestParamsExtractor<RequestT> getParamsExtractor() {
53     return paramsExtractor;
54   }
55 
56   @BetaApi
shouldAwaitTrailers()57   public boolean shouldAwaitTrailers() {
58     return alwaysAwaitTrailers;
59   }
60 
newBuilder()61   public static <RequestT, ResponseT> Builder<RequestT, ResponseT> newBuilder() {
62     return new Builder<RequestT, ResponseT>().setShouldAwaitTrailers(true);
63   }
64 
create( MethodDescriptor<RequestT, ResponseT> methodDescriptor)65   public static <RequestT, ResponseT> GrpcCallSettings<RequestT, ResponseT> create(
66       MethodDescriptor<RequestT, ResponseT> methodDescriptor) {
67     return GrpcCallSettings.<RequestT, ResponseT>newBuilder()
68         .setMethodDescriptor(methodDescriptor)
69         .build();
70   }
71 
toBuilder()72   public Builder toBuilder() {
73     return new Builder<>(this);
74   }
75 
76   public static class Builder<RequestT, ResponseT> {
77     private MethodDescriptor<RequestT, ResponseT> methodDescriptor;
78     private RequestParamsExtractor<RequestT> paramsExtractor;
79     private boolean shouldAwaitTrailers;
80 
Builder()81     private Builder() {}
82 
Builder(GrpcCallSettings<RequestT, ResponseT> settings)83     private Builder(GrpcCallSettings<RequestT, ResponseT> settings) {
84       this.methodDescriptor = settings.methodDescriptor;
85       this.paramsExtractor = settings.paramsExtractor;
86       this.shouldAwaitTrailers = settings.alwaysAwaitTrailers;
87     }
88 
setMethodDescriptor( MethodDescriptor<RequestT, ResponseT> methodDescriptor)89     public Builder<RequestT, ResponseT> setMethodDescriptor(
90         MethodDescriptor<RequestT, ResponseT> methodDescriptor) {
91       this.methodDescriptor = methodDescriptor;
92       return this;
93     }
94 
setParamsExtractor( RequestParamsExtractor<RequestT> paramsExtractor)95     public Builder<RequestT, ResponseT> setParamsExtractor(
96         RequestParamsExtractor<RequestT> paramsExtractor) {
97       this.paramsExtractor = paramsExtractor;
98       return this;
99     }
100 
101     @BetaApi
setShouldAwaitTrailers(boolean b)102     public Builder<RequestT, ResponseT> setShouldAwaitTrailers(boolean b) {
103       this.shouldAwaitTrailers = b;
104       return this;
105     }
106 
build()107     public GrpcCallSettings<RequestT, ResponseT> build() {
108       return new GrpcCallSettings<>(this);
109     }
110   }
111 }
112