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.httpjson; 31 32 import com.google.api.core.BetaApi; 33 import com.google.auth.Credentials; 34 import com.google.auto.value.AutoValue; 35 import com.google.protobuf.TypeRegistry; 36 import java.time.Duration; 37 import javax.annotation.Nullable; 38 import org.threeten.bp.Instant; 39 40 /** Options for an http-json call, including deadline and credentials. */ 41 @BetaApi 42 @AutoValue 43 public abstract class HttpJsonCallOptions { 44 public static final HttpJsonCallOptions DEFAULT = newBuilder().build(); 45 46 @Nullable getTimeout()47 public abstract Duration getTimeout(); 48 49 @Nullable getDeadline()50 public abstract Instant getDeadline(); 51 52 @Nullable getCredentials()53 public abstract Credentials getCredentials(); 54 55 @Nullable getTypeRegistry()56 public abstract TypeRegistry getTypeRegistry(); 57 toBuilder()58 public abstract Builder toBuilder(); 59 newBuilder()60 public static Builder newBuilder() { 61 return new AutoValue_HttpJsonCallOptions.Builder(); 62 } 63 merge(HttpJsonCallOptions inputOptions)64 public HttpJsonCallOptions merge(HttpJsonCallOptions inputOptions) { 65 if (inputOptions == null) { 66 return this; 67 } 68 69 Builder builder = this.toBuilder(); 70 71 Instant newDeadline = inputOptions.getDeadline(); 72 if (newDeadline != null) { 73 builder.setDeadline(newDeadline); 74 } 75 76 if (inputOptions.getTimeout() != null) { 77 Duration newTimeout = java.time.Duration.ofMillis(inputOptions.getTimeout().toMillis()); 78 if (newTimeout != null) { 79 builder.setTimeout(newTimeout); 80 } 81 } 82 83 Credentials newCredentials = inputOptions.getCredentials(); 84 if (newCredentials != null) { 85 builder.setCredentials(newCredentials); 86 } 87 88 TypeRegistry newTypeRegistry = inputOptions.getTypeRegistry(); 89 if (newTypeRegistry != null) { 90 builder.setTypeRegistry(newTypeRegistry); 91 } 92 93 return builder.build(); 94 } 95 96 @AutoValue.Builder 97 public abstract static class Builder { setTimeout(java.time.Duration value)98 public abstract Builder setTimeout(java.time.Duration value); 99 setDeadline(Instant value)100 public abstract Builder setDeadline(Instant value); 101 setCredentials(Credentials value)102 public abstract Builder setCredentials(Credentials value); 103 setTypeRegistry(TypeRegistry value)104 public abstract Builder setTypeRegistry(TypeRegistry value); 105 build()106 public abstract HttpJsonCallOptions build(); 107 } 108 } 109