Example of getting a blob of a specific in the bucket. + * + *
{@code
+ * String blobName = "my_blob_name";
+ * long generation = 42;
+ * Blob blob = bucket.get(blobName, generation);
+ * }
+ *
+ * @param blob name of the requested blob
+ * @param generation the generation to get
+ * @param options blob search options
+ * @throws StorageException upon failure
+ */
+ @TransportCompatibility({Transport.HTTP, Transport.GRPC})
+ public Blob get(String blob, Long generation, BlobGetOption... options) {
+ return storage.get(BlobId.of(getName(), blob, generation), options);
+ }
+
/**
* Returns a list of requested blobs in this bucket. Blobs that do not exist are null.
*
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/BucketInfo.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/BucketInfo.java
index 9fb46b5bdb..3235559222 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/BucketInfo.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/BucketInfo.java
@@ -118,6 +118,9 @@ public class BucketInfo implements Serializable {
private final Logging logging;
private final CustomPlacementConfig customPlacementConfig;
private final ObjectRetention objectRetention;
+ private final HierarchicalNamespace hierarchicalNamespace;
+
+ private final SoftDeletePolicy softDeletePolicy;
private final transient ImmutableSetDefault: {@link PartMetadataFieldDecorator#noOp()} + * + * @since 2.36.0 This new api is in preview and is subject to breaking changes. + */ + @BetaApi + public ParallelCompositeUploadBlobWriteSessionConfig withPartMetadataFieldDecorator( + PartMetadataFieldDecorator partMetadataFieldDecorator) { + checkNotNull(partMetadataFieldDecorator, "partMetadataFieldDecorator must be non null"); + return new ParallelCompositeUploadBlobWriteSessionConfig( + maxPartsPerCompose, + executorSupplier, + bufferAllocationStrategy, + partNamingStrategy, + partCleanupStrategy, + partMetadataFieldDecorator); } @BetaApi @@ -241,7 +273,8 @@ static ParallelCompositeUploadBlobWriteSessionConfig withDefaults() { ExecutorSupplier.cachedPool(), BufferAllocationStrategy.simple(ByteSizeConstants._16MiB), PartNamingStrategy.noPrefix(), - PartCleanupStrategy.always()); + PartCleanupStrategy.always(), + PartMetadataFieldDecorator.noOp()); } @InternalApi @@ -249,7 +282,10 @@ static ParallelCompositeUploadBlobWriteSessionConfig withDefaults() { WriterFactory createFactory(Clock clock) throws IOException { Executor executor = executorSupplier.get(); BufferHandlePool bufferHandlePool = bufferAllocationStrategy.get(); - return new ParallelCompositeUploadWriterFactory(clock, executor, bufferHandlePool); + PartMetadataFieldDecoratorInstance partMetadataFieldDecoratorInstance = + partMetadataFieldDecorator.newInstance(clock); + return new ParallelCompositeUploadWriterFactory( + clock, executor, bufferHandlePool, partMetadataFieldDecoratorInstance); } /** @@ -277,6 +313,7 @@ private BufferAllocationStrategy() {} */ @BetaApi public static BufferAllocationStrategy simple(int capacity) { + checkArgument(capacity > 0, "bufferCapacity must be > 0"); return new SimpleBufferAllocationStrategy(capacity); } @@ -291,6 +328,8 @@ public static BufferAllocationStrategy simple(int capacity) { */ @BetaApi public static BufferAllocationStrategy fixedPool(int bufferCount, int bufferCapacity) { + checkArgument(bufferCount > 0, "bufferCount must be > 0"); + checkArgument(bufferCapacity > 0, "bufferCapacity must be > 0"); return new FixedPoolBufferAllocationStrategy(bufferCount, bufferCapacity); } @@ -361,6 +400,7 @@ public static ExecutorSupplier cachedPool() { */ @BetaApi public static ExecutorSupplier fixedPool(int poolSize) { + checkArgument(poolSize > 0, "poolSize must be > 0"); return new FixedSupplier(poolSize); } @@ -612,7 +652,10 @@ public NoPrefix(SecureRandom rand) { } @Override - protected String fmtFields(String randomKey, String nameDigest, String partRange) { + protected String fmtFields(String randomKey, String ultimateObjectName, String partRange) { + HashCode hashCode = + OBJECT_NAME_HASH_FUNCTION.hashString(ultimateObjectName, StandardCharsets.UTF_8); + String nameDigest = B64.encodeToString(hashCode.asBytes()); return randomKey + FIELD_SEPARATOR // todo: do we want to @@ -628,6 +671,79 @@ protected String fmtFields(String randomKey, String nameDigest, String partRange } } + /** + * A Decorator which is used to manipulate metadata fields, specifically on the part objects + * created in a Parallel Composite Upload + * + * @see #withPartMetadataFieldDecorator(PartMetadataFieldDecorator) + * @since 2.36.0 This new api is in preview and is subject to breaking changes. + */ + @BetaApi + @Immutable + public abstract static class PartMetadataFieldDecorator implements Serializable { + + abstract PartMetadataFieldDecoratorInstance newInstance(Clock clock); + + /** + * A decorator that is used to manipulate the Custom Time Metadata field of part files. {@link + * BlobInfo#getCustomTimeOffsetDateTime()} + * + *
When provided with a duration, a time in the future will be calculated for each part + * object upon upload, this new value can be used in OLM rules to cleanup abandoned part files. + * + *
See [CustomTime OLM
+ * documentation](https://cloud.google.com/storage/docs/lifecycle#dayssincecustomtime)
+ *
+ * @see #withPartMetadataFieldDecorator(PartMetadataFieldDecorator)
+ * @since 2.36.0 This new api is in preview and is subject to breaking changes.
+ */
+ @BetaApi
+ public static PartMetadataFieldDecorator setCustomTimeInFuture(Duration timeInFuture) {
+ checkNotNull(timeInFuture, "timeInFuture must not be null");
+ return new CustomTimeInFuture(timeInFuture);
+ }
+
+ @BetaApi
+ public static PartMetadataFieldDecorator noOp() {
+ return NoOp.INSTANCE;
+ }
+
+ @BetaApi
+ private static final class CustomTimeInFuture extends PartMetadataFieldDecorator {
+ private static final long serialVersionUID = -6213742554954751892L;
+ private final Duration duration;
+
+ CustomTimeInFuture(Duration duration) {
+ this.duration = duration;
+ }
+
+ @Override
+ PartMetadataFieldDecoratorInstance newInstance(Clock clock) {
+ return builder -> {
+ OffsetDateTime futureTime =
+ OffsetDateTime.from(
+ clock.instant().plus(duration).atZone(clock.getZone()).toOffsetDateTime());
+ return builder.setCustomTimeOffsetDateTime(futureTime);
+ };
+ }
+ }
+
+ private static final class NoOp extends PartMetadataFieldDecorator {
+ private static final long serialVersionUID = -4569486383992999205L;
+ private static final NoOp INSTANCE = new NoOp();
+
+ @Override
+ PartMetadataFieldDecoratorInstance newInstance(Clock clock) {
+ return builder -> builder;
+ }
+
+ /** prevent java serialization from using a new instance */
+ private Object readResolve() {
+ return INSTANCE;
+ }
+ }
+ }
+
/**
* A cleanup strategy which will dictate what cleanup operations are performed automatically when
* performing a parallel composite upload.
@@ -705,6 +821,8 @@ public static PartCleanupStrategy never() {
}
}
+ interface PartMetadataFieldDecoratorInstance extends UnaryOperator Example of restoring an object.
+ *
+ * {@code
+ * String bucketName = "my-unique-bucket";
+ * String blobName = "my-blob-name";
+ * long generation = 42;
+ * BlobId blobId = BlobId.of(bucketName, blobName, gen);
+ * Blob blob = storage.restore(blobId);
+ * }
+ */
+ @TransportCompatibility({Transport.HTTP, Transport.GRPC})
+ Blob restore(BlobId blob, BlobRestoreOption... options);
+
/**
* Lists the project's buckets.
*
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/StorageImpl.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/StorageImpl.java
index 9af54fee20..a5df68b832 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/StorageImpl.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/StorageImpl.java
@@ -341,6 +341,24 @@ public Blob get(BlobId blob) {
return get(blob, new BlobGetOption[0]);
}
+ @Override
+ public Blob restore(BlobId blob, BlobRestoreOption... options) {
+ ImmutableMap
+ * Optional. Enables the hierarchical namespace feature. + *+ * + *
bool enabled = 1 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ * @return The enabled.
+ */
+ boolean getEnabled();
+ }
+ /**
+ *
+ *
+ * + * Configuration for a bucket's hierarchical namespace feature. + *+ * + * Protobuf type {@code google.storage.v2.Bucket.HierarchicalNamespace} + */ + public static final class HierarchicalNamespace extends com.google.protobuf.GeneratedMessageV3 + implements + // @@protoc_insertion_point(message_implements:google.storage.v2.Bucket.HierarchicalNamespace) + HierarchicalNamespaceOrBuilder { + private static final long serialVersionUID = 0L; + // Use HierarchicalNamespace.newBuilder() to construct. + private HierarchicalNamespace(com.google.protobuf.GeneratedMessageV3.Builder> builder) { + super(builder); + } + + private HierarchicalNamespace() {} + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance(UnusedPrivateParameter unused) { + return new HierarchicalNamespace(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.storage.v2.StorageProto + .internal_static_google_storage_v2_Bucket_HierarchicalNamespace_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.storage.v2.StorageProto + .internal_static_google_storage_v2_Bucket_HierarchicalNamespace_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.storage.v2.Bucket.HierarchicalNamespace.class, + com.google.storage.v2.Bucket.HierarchicalNamespace.Builder.class); + } + + public static final int ENABLED_FIELD_NUMBER = 1; + private boolean enabled_ = false; + /** + * + * + *
+ * Optional. Enables the hierarchical namespace feature. + *+ * + *
bool enabled = 1 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ * @return The enabled.
+ */
+ @java.lang.Override
+ public boolean getEnabled() {
+ return enabled_;
+ }
+
+ private byte memoizedIsInitialized = -1;
+
+ @java.lang.Override
+ public final boolean isInitialized() {
+ byte isInitialized = memoizedIsInitialized;
+ if (isInitialized == 1) return true;
+ if (isInitialized == 0) return false;
+
+ memoizedIsInitialized = 1;
+ return true;
+ }
+
+ @java.lang.Override
+ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+ if (enabled_ != false) {
+ output.writeBool(1, enabled_);
+ }
+ getUnknownFields().writeTo(output);
+ }
+
+ @java.lang.Override
+ public int getSerializedSize() {
+ int size = memoizedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ if (enabled_ != false) {
+ size += com.google.protobuf.CodedOutputStream.computeBoolSize(1, enabled_);
+ }
+ size += getUnknownFields().getSerializedSize();
+ memoizedSize = size;
+ return size;
+ }
+
+ @java.lang.Override
+ public boolean equals(final java.lang.Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof com.google.storage.v2.Bucket.HierarchicalNamespace)) {
+ return super.equals(obj);
+ }
+ com.google.storage.v2.Bucket.HierarchicalNamespace other =
+ (com.google.storage.v2.Bucket.HierarchicalNamespace) obj;
+
+ if (getEnabled() != other.getEnabled()) return false;
+ if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+ return true;
+ }
+
+ @java.lang.Override
+ public int hashCode() {
+ if (memoizedHashCode != 0) {
+ return memoizedHashCode;
+ }
+ int hash = 41;
+ hash = (19 * hash) + getDescriptor().hashCode();
+ hash = (37 * hash) + ENABLED_FIELD_NUMBER;
+ hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getEnabled());
+ hash = (29 * hash) + getUnknownFields().hashCode();
+ memoizedHashCode = hash;
+ return hash;
+ }
+
+ public static com.google.storage.v2.Bucket.HierarchicalNamespace parseFrom(
+ java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+
+ public static com.google.storage.v2.Bucket.HierarchicalNamespace parseFrom(
+ java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+
+ public static com.google.storage.v2.Bucket.HierarchicalNamespace parseFrom(
+ com.google.protobuf.ByteString data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+
+ public static com.google.storage.v2.Bucket.HierarchicalNamespace parseFrom(
+ com.google.protobuf.ByteString data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+
+ public static com.google.storage.v2.Bucket.HierarchicalNamespace parseFrom(byte[] data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+
+ public static com.google.storage.v2.Bucket.HierarchicalNamespace parseFrom(
+ byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+
+ public static com.google.storage.v2.Bucket.HierarchicalNamespace parseFrom(
+ java.io.InputStream input) throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+ }
+
+ public static com.google.storage.v2.Bucket.HierarchicalNamespace parseFrom(
+ java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+ PARSER, input, extensionRegistry);
+ }
+
+ public static com.google.storage.v2.Bucket.HierarchicalNamespace parseDelimitedFrom(
+ java.io.InputStream input) throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+ }
+
+ public static com.google.storage.v2.Bucket.HierarchicalNamespace parseDelimitedFrom(
+ java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
+ PARSER, input, extensionRegistry);
+ }
+
+ public static com.google.storage.v2.Bucket.HierarchicalNamespace parseFrom(
+ com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+ }
+
+ public static com.google.storage.v2.Bucket.HierarchicalNamespace parseFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+ PARSER, input, extensionRegistry);
+ }
+
+ @java.lang.Override
+ public Builder newBuilderForType() {
+ return newBuilder();
+ }
+
+ public static Builder newBuilder() {
+ return DEFAULT_INSTANCE.toBuilder();
+ }
+
+ public static Builder newBuilder(com.google.storage.v2.Bucket.HierarchicalNamespace prototype) {
+ return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+ }
+
+ @java.lang.Override
+ public Builder toBuilder() {
+ return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+ }
+
+ @java.lang.Override
+ protected Builder newBuilderForType(
+ com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ Builder builder = new Builder(parent);
+ return builder;
+ }
+ /**
+ *
+ *
+ * + * Configuration for a bucket's hierarchical namespace feature. + *+ * + * Protobuf type {@code google.storage.v2.Bucket.HierarchicalNamespace} + */ + public static final class Builder + extends com.google.protobuf.GeneratedMessageV3.Builder
+ * Optional. Enables the hierarchical namespace feature. + *+ * + *
bool enabled = 1 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ * @return The enabled.
+ */
+ @java.lang.Override
+ public boolean getEnabled() {
+ return enabled_;
+ }
+ /**
+ *
+ *
+ * + * Optional. Enables the hierarchical namespace feature. + *+ * + *
bool enabled = 1 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ * @param value The enabled to set.
+ * @return This builder for chaining.
+ */
+ public Builder setEnabled(boolean value) {
+
+ enabled_ = value;
+ bitField0_ |= 0x00000001;
+ onChanged();
+ return this;
+ }
+ /**
+ *
+ *
+ * + * Optional. Enables the hierarchical namespace feature. + *+ * + *
bool enabled = 1 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ * @return This builder for chaining.
+ */
+ public Builder clearEnabled() {
+ bitField0_ = (bitField0_ & ~0x00000001);
+ enabled_ = false;
+ onChanged();
+ return this;
+ }
+
+ @java.lang.Override
+ public final Builder setUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.setUnknownFields(unknownFields);
+ }
+
+ @java.lang.Override
+ public final Builder mergeUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.mergeUnknownFields(unknownFields);
+ }
+
+ // @@protoc_insertion_point(builder_scope:google.storage.v2.Bucket.HierarchicalNamespace)
+ }
+
+ // @@protoc_insertion_point(class_scope:google.storage.v2.Bucket.HierarchicalNamespace)
+ private static final com.google.storage.v2.Bucket.HierarchicalNamespace DEFAULT_INSTANCE;
+
+ static {
+ DEFAULT_INSTANCE = new com.google.storage.v2.Bucket.HierarchicalNamespace();
+ }
+
+ public static com.google.storage.v2.Bucket.HierarchicalNamespace getDefaultInstance() {
+ return DEFAULT_INSTANCE;
+ }
+
+ private static final com.google.protobuf.Parser+ * Optional. The bucket's hierarchical namespace configuration. If there is no + * configuration, the hierarchical namespace feature will be disabled and have + * no effect on the bucket. + *+ * + *
+ * .google.storage.v2.Bucket.HierarchicalNamespace hierarchical_namespace = 32 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ *
+ * @return Whether the hierarchicalNamespace field is set.
+ */
+ @java.lang.Override
+ public boolean hasHierarchicalNamespace() {
+ return ((bitField0_ & 0x00002000) != 0);
+ }
+ /**
+ *
+ *
+ * + * Optional. The bucket's hierarchical namespace configuration. If there is no + * configuration, the hierarchical namespace feature will be disabled and have + * no effect on the bucket. + *+ * + *
+ * .google.storage.v2.Bucket.HierarchicalNamespace hierarchical_namespace = 32 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ *
+ * @return The hierarchicalNamespace.
+ */
+ @java.lang.Override
+ public com.google.storage.v2.Bucket.HierarchicalNamespace getHierarchicalNamespace() {
+ return hierarchicalNamespace_ == null
+ ? com.google.storage.v2.Bucket.HierarchicalNamespace.getDefaultInstance()
+ : hierarchicalNamespace_;
+ }
+ /**
+ *
+ *
+ * + * Optional. The bucket's hierarchical namespace configuration. If there is no + * configuration, the hierarchical namespace feature will be disabled and have + * no effect on the bucket. + *+ * + *
+ * .google.storage.v2.Bucket.HierarchicalNamespace hierarchical_namespace = 32 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ */
+ @java.lang.Override
+ public com.google.storage.v2.Bucket.HierarchicalNamespaceOrBuilder
+ getHierarchicalNamespaceOrBuilder() {
+ return hierarchicalNamespace_ == null
+ ? com.google.storage.v2.Bucket.HierarchicalNamespace.getDefaultInstance()
+ : hierarchicalNamespace_;
+ }
+
public static final int SOFT_DELETE_POLICY_FIELD_NUMBER = 31;
private com.google.storage.v2.Bucket.SoftDeletePolicy softDeletePolicy_;
/**
@@ -19653,7 +20255,7 @@ public com.google.storage.v2.Bucket.AutoclassOrBuilder getAutoclassOrBuilder() {
*/
@java.lang.Override
public boolean hasSoftDeletePolicy() {
- return ((bitField0_ & 0x00002000) != 0);
+ return ((bitField0_ & 0x00004000) != 0);
}
/**
*
@@ -19791,9 +20393,12 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io
if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(etag_)) {
com.google.protobuf.GeneratedMessageV3.writeString(output, 29, etag_);
}
- if (((bitField0_ & 0x00002000) != 0)) {
+ if (((bitField0_ & 0x00004000) != 0)) {
output.writeMessage(31, getSoftDeletePolicy());
}
+ if (((bitField0_ & 0x00002000) != 0)) {
+ output.writeMessage(32, getHierarchicalNamespace());
+ }
getUnknownFields().writeTo(output);
}
@@ -19895,9 +20500,13 @@ public int getSerializedSize() {
if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(etag_)) {
size += com.google.protobuf.GeneratedMessageV3.computeStringSize(29, etag_);
}
- if (((bitField0_ & 0x00002000) != 0)) {
+ if (((bitField0_ & 0x00004000) != 0)) {
size += com.google.protobuf.CodedOutputStream.computeMessageSize(31, getSoftDeletePolicy());
}
+ if (((bitField0_ & 0x00002000) != 0)) {
+ size +=
+ com.google.protobuf.CodedOutputStream.computeMessageSize(32, getHierarchicalNamespace());
+ }
size += getUnknownFields().getSerializedSize();
memoizedSize = size;
return size;
@@ -19980,6 +20589,10 @@ public boolean equals(final java.lang.Object obj) {
if (hasAutoclass()) {
if (!getAutoclass().equals(other.getAutoclass())) return false;
}
+ if (hasHierarchicalNamespace() != other.hasHierarchicalNamespace()) return false;
+ if (hasHierarchicalNamespace()) {
+ if (!getHierarchicalNamespace().equals(other.getHierarchicalNamespace())) return false;
+ }
if (hasSoftDeletePolicy() != other.hasSoftDeletePolicy()) return false;
if (hasSoftDeletePolicy()) {
if (!getSoftDeletePolicy().equals(other.getSoftDeletePolicy())) return false;
@@ -20085,6 +20698,10 @@ public int hashCode() {
hash = (37 * hash) + AUTOCLASS_FIELD_NUMBER;
hash = (53 * hash) + getAutoclass().hashCode();
}
+ if (hasHierarchicalNamespace()) {
+ hash = (37 * hash) + HIERARCHICAL_NAMESPACE_FIELD_NUMBER;
+ hash = (53 * hash) + getHierarchicalNamespace().hashCode();
+ }
if (hasSoftDeletePolicy()) {
hash = (37 * hash) + SOFT_DELETE_POLICY_FIELD_NUMBER;
hash = (53 * hash) + getSoftDeletePolicy().hashCode();
@@ -20264,6 +20881,7 @@ private void maybeForceBuilderInitialization() {
getIamConfigFieldBuilder();
getCustomPlacementConfigFieldBuilder();
getAutoclassFieldBuilder();
+ getHierarchicalNamespaceFieldBuilder();
getSoftDeletePolicyFieldBuilder();
}
}
@@ -20370,6 +20988,11 @@ public Builder clear() {
autoclassBuilder_.dispose();
autoclassBuilder_ = null;
}
+ hierarchicalNamespace_ = null;
+ if (hierarchicalNamespaceBuilder_ != null) {
+ hierarchicalNamespaceBuilder_.dispose();
+ hierarchicalNamespaceBuilder_ = null;
+ }
softDeletePolicy_ = null;
if (softDeletePolicyBuilder_ != null) {
softDeletePolicyBuilder_.dispose();
@@ -20535,9 +21158,16 @@ private void buildPartial0(com.google.storage.v2.Bucket result) {
to_bitField0_ |= 0x00001000;
}
if (((from_bitField0_ & 0x10000000) != 0)) {
+ result.hierarchicalNamespace_ =
+ hierarchicalNamespaceBuilder_ == null
+ ? hierarchicalNamespace_
+ : hierarchicalNamespaceBuilder_.build();
+ to_bitField0_ |= 0x00002000;
+ }
+ if (((from_bitField0_ & 0x20000000) != 0)) {
result.softDeletePolicy_ =
softDeletePolicyBuilder_ == null ? softDeletePolicy_ : softDeletePolicyBuilder_.build();
- to_bitField0_ |= 0x00002000;
+ to_bitField0_ |= 0x00004000;
}
result.bitField0_ |= to_bitField0_;
}
@@ -20758,6 +21388,9 @@ public Builder mergeFrom(com.google.storage.v2.Bucket other) {
if (other.hasAutoclass()) {
mergeAutoclass(other.getAutoclass());
}
+ if (other.hasHierarchicalNamespace()) {
+ mergeHierarchicalNamespace(other.getHierarchicalNamespace());
+ }
if (other.hasSoftDeletePolicy()) {
mergeSoftDeletePolicy(other.getSoftDeletePolicy());
}
@@ -20987,9 +21620,16 @@ public Builder mergeFrom(
{
input.readMessage(
getSoftDeletePolicyFieldBuilder().getBuilder(), extensionRegistry);
- bitField0_ |= 0x10000000;
+ bitField0_ |= 0x20000000;
break;
} // case 250
+ case 258:
+ {
+ input.readMessage(
+ getHierarchicalNamespaceFieldBuilder().getBuilder(), extensionRegistry);
+ bitField0_ |= 0x10000000;
+ break;
+ } // case 258
default:
{
if (!super.parseUnknownField(input, extensionRegistry, tag)) {
@@ -26086,6 +26726,233 @@ public com.google.storage.v2.Bucket.AutoclassOrBuilder getAutoclassOrBuilder() {
return autoclassBuilder_;
}
+ private com.google.storage.v2.Bucket.HierarchicalNamespace hierarchicalNamespace_;
+ private com.google.protobuf.SingleFieldBuilderV3<
+ com.google.storage.v2.Bucket.HierarchicalNamespace,
+ com.google.storage.v2.Bucket.HierarchicalNamespace.Builder,
+ com.google.storage.v2.Bucket.HierarchicalNamespaceOrBuilder>
+ hierarchicalNamespaceBuilder_;
+ /**
+ *
+ *
+ * + * Optional. The bucket's hierarchical namespace configuration. If there is no + * configuration, the hierarchical namespace feature will be disabled and have + * no effect on the bucket. + *+ * + *
+ * .google.storage.v2.Bucket.HierarchicalNamespace hierarchical_namespace = 32 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ *
+ * @return Whether the hierarchicalNamespace field is set.
+ */
+ public boolean hasHierarchicalNamespace() {
+ return ((bitField0_ & 0x10000000) != 0);
+ }
+ /**
+ *
+ *
+ * + * Optional. The bucket's hierarchical namespace configuration. If there is no + * configuration, the hierarchical namespace feature will be disabled and have + * no effect on the bucket. + *+ * + *
+ * .google.storage.v2.Bucket.HierarchicalNamespace hierarchical_namespace = 32 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ *
+ * @return The hierarchicalNamespace.
+ */
+ public com.google.storage.v2.Bucket.HierarchicalNamespace getHierarchicalNamespace() {
+ if (hierarchicalNamespaceBuilder_ == null) {
+ return hierarchicalNamespace_ == null
+ ? com.google.storage.v2.Bucket.HierarchicalNamespace.getDefaultInstance()
+ : hierarchicalNamespace_;
+ } else {
+ return hierarchicalNamespaceBuilder_.getMessage();
+ }
+ }
+ /**
+ *
+ *
+ * + * Optional. The bucket's hierarchical namespace configuration. If there is no + * configuration, the hierarchical namespace feature will be disabled and have + * no effect on the bucket. + *+ * + *
+ * .google.storage.v2.Bucket.HierarchicalNamespace hierarchical_namespace = 32 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ */
+ public Builder setHierarchicalNamespace(
+ com.google.storage.v2.Bucket.HierarchicalNamespace value) {
+ if (hierarchicalNamespaceBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ hierarchicalNamespace_ = value;
+ } else {
+ hierarchicalNamespaceBuilder_.setMessage(value);
+ }
+ bitField0_ |= 0x10000000;
+ onChanged();
+ return this;
+ }
+ /**
+ *
+ *
+ * + * Optional. The bucket's hierarchical namespace configuration. If there is no + * configuration, the hierarchical namespace feature will be disabled and have + * no effect on the bucket. + *+ * + *
+ * .google.storage.v2.Bucket.HierarchicalNamespace hierarchical_namespace = 32 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ */
+ public Builder setHierarchicalNamespace(
+ com.google.storage.v2.Bucket.HierarchicalNamespace.Builder builderForValue) {
+ if (hierarchicalNamespaceBuilder_ == null) {
+ hierarchicalNamespace_ = builderForValue.build();
+ } else {
+ hierarchicalNamespaceBuilder_.setMessage(builderForValue.build());
+ }
+ bitField0_ |= 0x10000000;
+ onChanged();
+ return this;
+ }
+ /**
+ *
+ *
+ * + * Optional. The bucket's hierarchical namespace configuration. If there is no + * configuration, the hierarchical namespace feature will be disabled and have + * no effect on the bucket. + *+ * + *
+ * .google.storage.v2.Bucket.HierarchicalNamespace hierarchical_namespace = 32 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ */
+ public Builder mergeHierarchicalNamespace(
+ com.google.storage.v2.Bucket.HierarchicalNamespace value) {
+ if (hierarchicalNamespaceBuilder_ == null) {
+ if (((bitField0_ & 0x10000000) != 0)
+ && hierarchicalNamespace_ != null
+ && hierarchicalNamespace_
+ != com.google.storage.v2.Bucket.HierarchicalNamespace.getDefaultInstance()) {
+ getHierarchicalNamespaceBuilder().mergeFrom(value);
+ } else {
+ hierarchicalNamespace_ = value;
+ }
+ } else {
+ hierarchicalNamespaceBuilder_.mergeFrom(value);
+ }
+ if (hierarchicalNamespace_ != null) {
+ bitField0_ |= 0x10000000;
+ onChanged();
+ }
+ return this;
+ }
+ /**
+ *
+ *
+ * + * Optional. The bucket's hierarchical namespace configuration. If there is no + * configuration, the hierarchical namespace feature will be disabled and have + * no effect on the bucket. + *+ * + *
+ * .google.storage.v2.Bucket.HierarchicalNamespace hierarchical_namespace = 32 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ */
+ public Builder clearHierarchicalNamespace() {
+ bitField0_ = (bitField0_ & ~0x10000000);
+ hierarchicalNamespace_ = null;
+ if (hierarchicalNamespaceBuilder_ != null) {
+ hierarchicalNamespaceBuilder_.dispose();
+ hierarchicalNamespaceBuilder_ = null;
+ }
+ onChanged();
+ return this;
+ }
+ /**
+ *
+ *
+ * + * Optional. The bucket's hierarchical namespace configuration. If there is no + * configuration, the hierarchical namespace feature will be disabled and have + * no effect on the bucket. + *+ * + *
+ * .google.storage.v2.Bucket.HierarchicalNamespace hierarchical_namespace = 32 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ */
+ public com.google.storage.v2.Bucket.HierarchicalNamespace.Builder
+ getHierarchicalNamespaceBuilder() {
+ bitField0_ |= 0x10000000;
+ onChanged();
+ return getHierarchicalNamespaceFieldBuilder().getBuilder();
+ }
+ /**
+ *
+ *
+ * + * Optional. The bucket's hierarchical namespace configuration. If there is no + * configuration, the hierarchical namespace feature will be disabled and have + * no effect on the bucket. + *+ * + *
+ * .google.storage.v2.Bucket.HierarchicalNamespace hierarchical_namespace = 32 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ */
+ public com.google.storage.v2.Bucket.HierarchicalNamespaceOrBuilder
+ getHierarchicalNamespaceOrBuilder() {
+ if (hierarchicalNamespaceBuilder_ != null) {
+ return hierarchicalNamespaceBuilder_.getMessageOrBuilder();
+ } else {
+ return hierarchicalNamespace_ == null
+ ? com.google.storage.v2.Bucket.HierarchicalNamespace.getDefaultInstance()
+ : hierarchicalNamespace_;
+ }
+ }
+ /**
+ *
+ *
+ * + * Optional. The bucket's hierarchical namespace configuration. If there is no + * configuration, the hierarchical namespace feature will be disabled and have + * no effect on the bucket. + *+ * + *
+ * .google.storage.v2.Bucket.HierarchicalNamespace hierarchical_namespace = 32 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ */
+ private com.google.protobuf.SingleFieldBuilderV3<
+ com.google.storage.v2.Bucket.HierarchicalNamespace,
+ com.google.storage.v2.Bucket.HierarchicalNamespace.Builder,
+ com.google.storage.v2.Bucket.HierarchicalNamespaceOrBuilder>
+ getHierarchicalNamespaceFieldBuilder() {
+ if (hierarchicalNamespaceBuilder_ == null) {
+ hierarchicalNamespaceBuilder_ =
+ new com.google.protobuf.SingleFieldBuilderV3<
+ com.google.storage.v2.Bucket.HierarchicalNamespace,
+ com.google.storage.v2.Bucket.HierarchicalNamespace.Builder,
+ com.google.storage.v2.Bucket.HierarchicalNamespaceOrBuilder>(
+ getHierarchicalNamespace(), getParentForChildren(), isClean());
+ hierarchicalNamespace_ = null;
+ }
+ return hierarchicalNamespaceBuilder_;
+ }
+
private com.google.storage.v2.Bucket.SoftDeletePolicy softDeletePolicy_;
private com.google.protobuf.SingleFieldBuilderV3<
com.google.storage.v2.Bucket.SoftDeletePolicy,
@@ -26107,7 +26974,7 @@ public com.google.storage.v2.Bucket.AutoclassOrBuilder getAutoclassOrBuilder() {
* @return Whether the softDeletePolicy field is set.
*/
public boolean hasSoftDeletePolicy() {
- return ((bitField0_ & 0x10000000) != 0);
+ return ((bitField0_ & 0x20000000) != 0);
}
/**
*
@@ -26153,7 +27020,7 @@ public Builder setSoftDeletePolicy(com.google.storage.v2.Bucket.SoftDeletePolicy
} else {
softDeletePolicyBuilder_.setMessage(value);
}
- bitField0_ |= 0x10000000;
+ bitField0_ |= 0x20000000;
onChanged();
return this;
}
@@ -26176,7 +27043,7 @@ public Builder setSoftDeletePolicy(
} else {
softDeletePolicyBuilder_.setMessage(builderForValue.build());
}
- bitField0_ |= 0x10000000;
+ bitField0_ |= 0x20000000;
onChanged();
return this;
}
@@ -26194,7 +27061,7 @@ public Builder setSoftDeletePolicy(
*/
public Builder mergeSoftDeletePolicy(com.google.storage.v2.Bucket.SoftDeletePolicy value) {
if (softDeletePolicyBuilder_ == null) {
- if (((bitField0_ & 0x10000000) != 0)
+ if (((bitField0_ & 0x20000000) != 0)
&& softDeletePolicy_ != null
&& softDeletePolicy_
!= com.google.storage.v2.Bucket.SoftDeletePolicy.getDefaultInstance()) {
@@ -26206,7 +27073,7 @@ public Builder mergeSoftDeletePolicy(com.google.storage.v2.Bucket.SoftDeletePoli
softDeletePolicyBuilder_.mergeFrom(value);
}
if (softDeletePolicy_ != null) {
- bitField0_ |= 0x10000000;
+ bitField0_ |= 0x20000000;
onChanged();
}
return this;
@@ -26224,7 +27091,7 @@ public Builder mergeSoftDeletePolicy(com.google.storage.v2.Bucket.SoftDeletePoli
*
*/
public Builder clearSoftDeletePolicy() {
- bitField0_ = (bitField0_ & ~0x10000000);
+ bitField0_ = (bitField0_ & ~0x20000000);
softDeletePolicy_ = null;
if (softDeletePolicyBuilder_ != null) {
softDeletePolicyBuilder_.dispose();
@@ -26246,7 +27113,7 @@ public Builder clearSoftDeletePolicy() {
*
*/
public com.google.storage.v2.Bucket.SoftDeletePolicy.Builder getSoftDeletePolicyBuilder() {
- bitField0_ |= 0x10000000;
+ bitField0_ |= 0x20000000;
onChanged();
return getSoftDeletePolicyFieldBuilder().getBuilder();
}
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/BucketOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/BucketOrBuilder.java
index 41ca1c7167..8c6c315be4 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/BucketOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/BucketOrBuilder.java
@@ -1075,6 +1075,53 @@ java.lang.String getLabelsOrDefault(
*/
com.google.storage.v2.Bucket.AutoclassOrBuilder getAutoclassOrBuilder();
+ /**
+ *
+ *
+ * + * Optional. The bucket's hierarchical namespace configuration. If there is no + * configuration, the hierarchical namespace feature will be disabled and have + * no effect on the bucket. + *+ * + *
+ * .google.storage.v2.Bucket.HierarchicalNamespace hierarchical_namespace = 32 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ *
+ * @return Whether the hierarchicalNamespace field is set.
+ */
+ boolean hasHierarchicalNamespace();
+ /**
+ *
+ *
+ * + * Optional. The bucket's hierarchical namespace configuration. If there is no + * configuration, the hierarchical namespace feature will be disabled and have + * no effect on the bucket. + *+ * + *
+ * .google.storage.v2.Bucket.HierarchicalNamespace hierarchical_namespace = 32 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ *
+ * @return The hierarchicalNamespace.
+ */
+ com.google.storage.v2.Bucket.HierarchicalNamespace getHierarchicalNamespace();
+ /**
+ *
+ *
+ * + * Optional. The bucket's hierarchical namespace configuration. If there is no + * configuration, the hierarchical namespace feature will be disabled and have + * no effect on the bucket. + *+ * + *
+ * .google.storage.v2.Bucket.HierarchicalNamespace hierarchical_namespace = 32 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ */
+ com.google.storage.v2.Bucket.HierarchicalNamespaceOrBuilder getHierarchicalNamespaceOrBuilder();
+
/**
*
*
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListObjectsRequest.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListObjectsRequest.java
index 043db519fd..22ec3b58ea 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListObjectsRequest.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListObjectsRequest.java
@@ -540,6 +540,25 @@ public boolean getSoftDeleted() {
return softDeleted_;
}
+ public static final int INCLUDE_FOLDERS_AS_PREFIXES_FIELD_NUMBER = 13;
+ private boolean includeFoldersAsPrefixes_ = false;
+ /**
+ *
+ *
+ * + * Optional. If true, will also include folders and managed folders (besides + * objects) in the returned `prefixes`. Requires `delimiter` to be set to '/'. + *+ * + *
bool include_folders_as_prefixes = 13 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ * @return The includeFoldersAsPrefixes.
+ */
+ @java.lang.Override
+ public boolean getIncludeFoldersAsPrefixes() {
+ return includeFoldersAsPrefixes_;
+ }
+
public static final int MATCH_GLOB_FIELD_NUMBER = 14;
@SuppressWarnings("serial")
@@ -644,6 +663,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io
if (softDeleted_ != false) {
output.writeBool(12, softDeleted_);
}
+ if (includeFoldersAsPrefixes_ != false) {
+ output.writeBool(13, includeFoldersAsPrefixes_);
+ }
if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(matchGlob_)) {
com.google.protobuf.GeneratedMessageV3.writeString(output, 14, matchGlob_);
}
@@ -689,6 +711,9 @@ public int getSerializedSize() {
if (softDeleted_ != false) {
size += com.google.protobuf.CodedOutputStream.computeBoolSize(12, softDeleted_);
}
+ if (includeFoldersAsPrefixes_ != false) {
+ size += com.google.protobuf.CodedOutputStream.computeBoolSize(13, includeFoldersAsPrefixes_);
+ }
if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(matchGlob_)) {
size += com.google.protobuf.GeneratedMessageV3.computeStringSize(14, matchGlob_);
}
@@ -721,6 +746,7 @@ public boolean equals(final java.lang.Object obj) {
if (!getLexicographicStart().equals(other.getLexicographicStart())) return false;
if (!getLexicographicEnd().equals(other.getLexicographicEnd())) return false;
if (getSoftDeleted() != other.getSoftDeleted()) return false;
+ if (getIncludeFoldersAsPrefixes() != other.getIncludeFoldersAsPrefixes()) return false;
if (!getMatchGlob().equals(other.getMatchGlob())) return false;
if (!getUnknownFields().equals(other.getUnknownFields())) return false;
return true;
@@ -757,6 +783,8 @@ public int hashCode() {
hash = (53 * hash) + getLexicographicEnd().hashCode();
hash = (37 * hash) + SOFT_DELETED_FIELD_NUMBER;
hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getSoftDeleted());
+ hash = (37 * hash) + INCLUDE_FOLDERS_AS_PREFIXES_FIELD_NUMBER;
+ hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getIncludeFoldersAsPrefixes());
hash = (37 * hash) + MATCH_GLOB_FIELD_NUMBER;
hash = (53 * hash) + getMatchGlob().hashCode();
hash = (29 * hash) + getUnknownFields().hashCode();
@@ -922,6 +950,7 @@ public Builder clear() {
lexicographicStart_ = "";
lexicographicEnd_ = "";
softDeleted_ = false;
+ includeFoldersAsPrefixes_ = false;
matchGlob_ = "";
return this;
}
@@ -995,6 +1024,9 @@ private void buildPartial0(com.google.storage.v2.ListObjectsRequest result) {
result.softDeleted_ = softDeleted_;
}
if (((from_bitField0_ & 0x00000800) != 0)) {
+ result.includeFoldersAsPrefixes_ = includeFoldersAsPrefixes_;
+ }
+ if (((from_bitField0_ & 0x00001000) != 0)) {
result.matchGlob_ = matchGlob_;
}
result.bitField0_ |= to_bitField0_;
@@ -1090,9 +1122,12 @@ public Builder mergeFrom(com.google.storage.v2.ListObjectsRequest other) {
if (other.getSoftDeleted() != false) {
setSoftDeleted(other.getSoftDeleted());
}
+ if (other.getIncludeFoldersAsPrefixes() != false) {
+ setIncludeFoldersAsPrefixes(other.getIncludeFoldersAsPrefixes());
+ }
if (!other.getMatchGlob().isEmpty()) {
matchGlob_ = other.matchGlob_;
- bitField0_ |= 0x00000800;
+ bitField0_ |= 0x00001000;
onChanged();
}
this.mergeUnknownFields(other.getUnknownFields());
@@ -1187,10 +1222,16 @@ public Builder mergeFrom(
bitField0_ |= 0x00000400;
break;
} // case 96
+ case 104:
+ {
+ includeFoldersAsPrefixes_ = input.readBool();
+ bitField0_ |= 0x00000800;
+ break;
+ } // case 104
case 114:
{
matchGlob_ = input.readStringRequireUtf8();
- bitField0_ |= 0x00000800;
+ bitField0_ |= 0x00001000;
break;
} // case 114
default:
@@ -2365,6 +2406,62 @@ public Builder clearSoftDeleted() {
return this;
}
+ private boolean includeFoldersAsPrefixes_;
+ /**
+ *
+ *
+ * + * Optional. If true, will also include folders and managed folders (besides + * objects) in the returned `prefixes`. Requires `delimiter` to be set to '/'. + *+ * + *
bool include_folders_as_prefixes = 13 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ * @return The includeFoldersAsPrefixes.
+ */
+ @java.lang.Override
+ public boolean getIncludeFoldersAsPrefixes() {
+ return includeFoldersAsPrefixes_;
+ }
+ /**
+ *
+ *
+ * + * Optional. If true, will also include folders and managed folders (besides + * objects) in the returned `prefixes`. Requires `delimiter` to be set to '/'. + *+ * + *
bool include_folders_as_prefixes = 13 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ * @param value The includeFoldersAsPrefixes to set.
+ * @return This builder for chaining.
+ */
+ public Builder setIncludeFoldersAsPrefixes(boolean value) {
+
+ includeFoldersAsPrefixes_ = value;
+ bitField0_ |= 0x00000800;
+ onChanged();
+ return this;
+ }
+ /**
+ *
+ *
+ * + * Optional. If true, will also include folders and managed folders (besides + * objects) in the returned `prefixes`. Requires `delimiter` to be set to '/'. + *+ * + *
bool include_folders_as_prefixes = 13 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ * @return This builder for chaining.
+ */
+ public Builder clearIncludeFoldersAsPrefixes() {
+ bitField0_ = (bitField0_ & ~0x00000800);
+ includeFoldersAsPrefixes_ = false;
+ onChanged();
+ return this;
+ }
+
private java.lang.Object matchGlob_ = "";
/**
*
@@ -2436,7 +2533,7 @@ public Builder setMatchGlob(java.lang.String value) {
throw new NullPointerException();
}
matchGlob_ = value;
- bitField0_ |= 0x00000800;
+ bitField0_ |= 0x00001000;
onChanged();
return this;
}
@@ -2456,7 +2553,7 @@ public Builder setMatchGlob(java.lang.String value) {
*/
public Builder clearMatchGlob() {
matchGlob_ = getDefaultInstance().getMatchGlob();
- bitField0_ = (bitField0_ & ~0x00000800);
+ bitField0_ = (bitField0_ & ~0x00001000);
onChanged();
return this;
}
@@ -2481,7 +2578,7 @@ public Builder setMatchGlobBytes(com.google.protobuf.ByteString value) {
}
checkByteStringIsUtf8(value);
matchGlob_ = value;
- bitField0_ |= 0x00000800;
+ bitField0_ |= 0x00001000;
onChanged();
return this;
}
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListObjectsRequestOrBuilder.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListObjectsRequestOrBuilder.java
index 34a381657c..215d9afc59 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListObjectsRequestOrBuilder.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/ListObjectsRequestOrBuilder.java
@@ -307,6 +307,20 @@ public interface ListObjectsRequestOrBuilder
*/
boolean getSoftDeleted();
+ /**
+ *
+ *
+ * + * Optional. If true, will also include folders and managed folders (besides + * objects) in the returned `prefixes`. Requires `delimiter` to be set to '/'. + *+ * + *
bool include_folders_as_prefixes = 13 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ * @return The includeFoldersAsPrefixes.
+ */
+ boolean getIncludeFoldersAsPrefixes();
+
/**
*
*
diff --git a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StorageProto.java b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StorageProto.java
index 7c9d8f2248..fab5bd6825 100644
--- a/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StorageProto.java
+++ b/proto-google-cloud-storage-v2/src/main/java/com/google/storage/v2/StorageProto.java
@@ -276,6 +276,10 @@ public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry r
internal_static_google_storage_v2_Bucket_Autoclass_descriptor;
static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
internal_static_google_storage_v2_Bucket_Autoclass_fieldAccessorTable;
+ static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_google_storage_v2_Bucket_HierarchicalNamespace_descriptor;
+ static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internal_static_google_storage_v2_Bucket_HierarchicalNamespace_fieldAccessorTable;
static final com.google.protobuf.Descriptors.Descriptor
internal_static_google_storage_v2_Bucket_LabelsEntry_descriptor;
static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
@@ -528,7 +532,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
+ "\006\n\004data\"r\n\027BidiWriteObjectResponse\022\030\n\016pe"
+ "rsisted_size\030\001 \001(\003H\000\022-\n\010resource\030\002 \001(\0132\031"
+ ".google.storage.v2.ObjectH\000B\016\n\014write_sta"
- + "tus\"\203\003\n\022ListObjectsRequest\0225\n\006parent\030\001 \001"
+ + "tus\"\255\003\n\022ListObjectsRequest\0225\n\006parent\030\001 \001"
+ "(\tB%\340A\002\372A\037\n\035storage.googleapis.com/Bucke"
+ "t\022\021\n\tpage_size\030\002 \001(\005\022\022\n\npage_token\030\003 \001(\t"
+ "\022\021\n\tdelimiter\030\004 \001(\t\022\"\n\032include_trailing_"
@@ -536,411 +540,416 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
+ "ons\030\007 \001(\010\0222\n\tread_mask\030\010 \001(\0132\032.google.pr"
+ "otobuf.FieldMaskH\000\210\001\001\022 \n\023lexicographic_s"
+ "tart\030\n \001(\tB\003\340A\001\022\036\n\021lexicographic_end\030\013 \001"
- + "(\tB\003\340A\001\022\031\n\014soft_deleted\030\014 \001(\010B\003\340A\001\022\027\n\nma"
- + "tch_glob\030\016 \001(\tB\003\340A\001B\014\n\n_read_mask\"\205\001\n\027Qu"
- + "eryWriteStatusRequest\022\026\n\tupload_id\030\001 \001(\t"
- + "B\003\340A\002\022R\n\034common_object_request_params\030\002 "
- + "\001(\0132,.google.storage.v2.CommonObjectRequ"
- + "estParams\"s\n\030QueryWriteStatusResponse\022\030\n"
- + "\016persisted_size\030\001 \001(\003H\000\022-\n\010resource\030\002 \001("
- + "\0132\031.google.storage.v2.ObjectH\000B\016\n\014write_"
- + "status\"\250\n\n\024RewriteObjectRequest\022 \n\020desti"
- + "nation_name\030\030 \001(\tB\006\340A\002\340A\005\022D\n\022destination"
- + "_bucket\030\031 \001(\tB(\340A\002\340A\005\372A\037\n\035storage.google"
- + "apis.com/Bucket\022C\n\023destination_kms_key\030\033"
- + " \001(\tB&\372A#\n!cloudkms.googleapis.com/Crypt"
- + "oKey\022.\n\013destination\030\001 \001(\0132\031.google.stora"
- + "ge.v2.Object\022<\n\rsource_bucket\030\002 \001(\tB%\340A\002"
- + "\372A\037\n\035storage.googleapis.com/Bucket\022\032\n\rso"
- + "urce_object\030\003 \001(\tB\003\340A\002\022\031\n\021source_generat"
- + "ion\030\004 \001(\003\022\025\n\rrewrite_token\030\005 \001(\t\022\"\n\032dest"
- + "ination_predefined_acl\030\034 \001(\t\022 \n\023if_gener"
- + "ation_match\030\007 \001(\003H\000\210\001\001\022$\n\027if_generation_"
- + "not_match\030\010 \001(\003H\001\210\001\001\022$\n\027if_metageneratio"
- + "n_match\030\t \001(\003H\002\210\001\001\022(\n\033if_metageneration_"
- + "not_match\030\n \001(\003H\003\210\001\001\022\'\n\032if_source_genera"
- + "tion_match\030\013 \001(\003H\004\210\001\001\022+\n\036if_source_gener"
- + "ation_not_match\030\014 \001(\003H\005\210\001\001\022+\n\036if_source_"
- + "metageneration_match\030\r \001(\003H\006\210\001\001\022/\n\"if_so"
- + "urce_metageneration_not_match\030\016 \001(\003H\007\210\001\001"
- + "\022$\n\034max_bytes_rewritten_per_call\030\017 \001(\003\022("
- + "\n copy_source_encryption_algorithm\030\020 \001(\t"
- + "\022(\n copy_source_encryption_key_bytes\030\025 \001"
- + "(\014\022/\n\'copy_source_encryption_key_sha256_"
- + "bytes\030\026 \001(\014\022R\n\034common_object_request_par"
- + "ams\030\023 \001(\0132,.google.storage.v2.CommonObje"
- + "ctRequestParams\022<\n\020object_checksums\030\035 \001("
- + "\0132\".google.storage.v2.ObjectChecksumsB\026\n"
- + "\024_if_generation_matchB\032\n\030_if_generation_"
- + "not_matchB\032\n\030_if_metageneration_matchB\036\n"
- + "\034_if_metageneration_not_matchB\035\n\033_if_sou"
- + "rce_generation_matchB!\n\037_if_source_gener"
- + "ation_not_matchB!\n\037_if_source_metagenera"
- + "tion_matchB%\n#_if_source_metageneration_"
- + "not_match\"\227\001\n\017RewriteResponse\022\035\n\025total_b"
- + "ytes_rewritten\030\001 \001(\003\022\023\n\013object_size\030\002 \001("
- + "\003\022\014\n\004done\030\003 \001(\010\022\025\n\rrewrite_token\030\004 \001(\t\022+"
- + "\n\010resource\030\005 \001(\0132\031.google.storage.v2.Obj"
- + "ect\"\362\001\n\032StartResumableWriteRequest\022B\n\021wr"
- + "ite_object_spec\030\001 \001(\0132\".google.storage.v"
- + "2.WriteObjectSpecB\003\340A\002\022R\n\034common_object_"
- + "request_params\030\003 \001(\0132,.google.storage.v2"
- + ".CommonObjectRequestParams\022<\n\020object_che"
- + "cksums\030\005 \001(\0132\".google.storage.v2.ObjectC"
- + "hecksums\"0\n\033StartResumableWriteResponse\022"
- + "\021\n\tupload_id\030\001 \001(\t\"\357\003\n\023UpdateObjectReque"
- + "st\022.\n\006object\030\001 \001(\0132\031.google.storage.v2.O"
- + "bjectB\003\340A\002\022 \n\023if_generation_match\030\002 \001(\003H"
- + "\000\210\001\001\022$\n\027if_generation_not_match\030\003 \001(\003H\001\210"
- + "\001\001\022$\n\027if_metageneration_match\030\004 \001(\003H\002\210\001\001"
- + "\022(\n\033if_metageneration_not_match\030\005 \001(\003H\003\210"
- + "\001\001\022\026\n\016predefined_acl\030\n \001(\t\0224\n\013update_mas"
- + "k\030\007 \001(\0132\032.google.protobuf.FieldMaskB\003\340A\002"
- + "\022R\n\034common_object_request_params\030\010 \001(\0132,"
- + ".google.storage.v2.CommonObjectRequestPa"
- + "ramsB\026\n\024_if_generation_matchB\032\n\030_if_gene"
- + "ration_not_matchB\032\n\030_if_metageneration_m"
- + "atchB\036\n\034_if_metageneration_not_match\"`\n\030"
- + "GetServiceAccountRequest\022D\n\007project\030\001 \001("
- + "\tB3\340A\002\372A-\n+cloudresourcemanager.googleap"
- + "is.com/Project\"\200\001\n\024CreateHmacKeyRequest\022"
- + "D\n\007project\030\001 \001(\tB3\340A\002\372A-\n+cloudresourcem"
- + "anager.googleapis.com/Project\022\"\n\025service"
- + "_account_email\030\002 \001(\tB\003\340A\002\"g\n\025CreateHmacK"
- + "eyResponse\0224\n\010metadata\030\001 \001(\0132\".google.st"
- + "orage.v2.HmacKeyMetadata\022\030\n\020secret_key_b"
- + "ytes\030\003 \001(\014\"t\n\024DeleteHmacKeyRequest\022\026\n\tac"
- + "cess_id\030\001 \001(\tB\003\340A\002\022D\n\007project\030\002 \001(\tB3\340A\002"
- + "\372A-\n+cloudresourcemanager.googleapis.com"
- + "/Project\"q\n\021GetHmacKeyRequest\022\026\n\taccess_"
- + "id\030\001 \001(\tB\003\340A\002\022D\n\007project\030\002 \001(\tB3\340A\002\372A-\n+"
- + "cloudresourcemanager.googleapis.com/Proj"
- + "ect\"\274\001\n\023ListHmacKeysRequest\022D\n\007project\030\001"
- + " \001(\tB3\340A\002\372A-\n+cloudresourcemanager.googl"
- + "eapis.com/Project\022\021\n\tpage_size\030\002 \001(\005\022\022\n\n"
- + "page_token\030\003 \001(\t\022\035\n\025service_account_emai"
- + "l\030\004 \001(\t\022\031\n\021show_deleted_keys\030\005 \001(\010\"f\n\024Li"
- + "stHmacKeysResponse\0225\n\thmac_keys\030\001 \003(\0132\"."
- + "google.storage.v2.HmacKeyMetadata\022\027\n\017nex"
- + "t_page_token\030\002 \001(\t\"\202\001\n\024UpdateHmacKeyRequ"
- + "est\0229\n\010hmac_key\030\001 \001(\0132\".google.storage.v"
- + "2.HmacKeyMetadataB\003\340A\002\022/\n\013update_mask\030\003 "
- + "\001(\0132\032.google.protobuf.FieldMask\"|\n\031Commo"
- + "nObjectRequestParams\022\034\n\024encryption_algor"
- + "ithm\030\001 \001(\t\022\034\n\024encryption_key_bytes\030\004 \001(\014"
- + "\022#\n\033encryption_key_sha256_bytes\030\005 \001(\014\"\312\005"
- + "\n\020ServiceConstants\"\265\005\n\006Values\022\026\n\022VALUES_"
- + "UNSPECIFIED\020\000\022\033\n\024MAX_READ_CHUNK_BYTES\020\200\200"
- + "\200\001\022\034\n\025MAX_WRITE_CHUNK_BYTES\020\200\200\200\001\022\031\n\022MAX_"
- + "OBJECT_SIZE_MB\020\200\200\300\002\022)\n$MAX_CUSTOM_METADA"
- + "TA_FIELD_NAME_BYTES\020\200\010\022*\n%MAX_CUSTOM_MET"
- + "ADATA_FIELD_VALUE_BYTES\020\200 \022)\n$MAX_CUSTOM"
- + "_METADATA_TOTAL_SIZE_BYTES\020\200@\022*\n$MAX_BUC"
- + "KET_METADATA_TOTAL_SIZE_BYTES\020\200\240\001\022\'\n#MAX"
- + "_NOTIFICATION_CONFIGS_PER_BUCKET\020d\022\"\n\036MA"
- + "X_LIFECYCLE_RULES_PER_BUCKET\020d\022&\n\"MAX_NO"
- + "TIFICATION_CUSTOM_ATTRIBUTES\020\005\0221\n,MAX_NO"
- + "TIFICATION_CUSTOM_ATTRIBUTE_KEY_LENGTH\020\200"
- + "\002\0223\n.MAX_NOTIFICATION_CUSTOM_ATTRIBUTE_V"
- + "ALUE_LENGTH\020\200\010\022\034\n\030MAX_LABELS_ENTRIES_COU"
- + "NT\020@\022\037\n\033MAX_LABELS_KEY_VALUE_LENGTH\020?\022\037\n"
- + "\032MAX_LABELS_KEY_VALUE_BYTES\020\200\001\022.\n)MAX_OB"
- + "JECT_IDS_PER_DELETE_OBJECTS_REQUEST\020\350\007\022\036"
- + "\n\032SPLIT_TOKEN_MAX_VALID_DAYS\020\016\032\002\020\001\"\215\033\n\006B"
- + "ucket\022\021\n\004name\030\001 \001(\tB\003\340A\005\022\026\n\tbucket_id\030\002 "
- + "\001(\tB\003\340A\003\022\014\n\004etag\030\035 \001(\t\022D\n\007project\030\003 \001(\tB"
- + "3\340A\005\372A-\n+cloudresourcemanager.googleapis"
- + ".com/Project\022\033\n\016metageneration\030\004 \001(\003B\003\340A"
- + "\003\022\025\n\010location\030\005 \001(\tB\003\340A\005\022\032\n\rlocation_typ"
- + "e\030\006 \001(\tB\003\340A\003\022\025\n\rstorage_class\030\007 \001(\t\022\013\n\003r"
- + "po\030\033 \001(\t\0223\n\003acl\030\010 \003(\0132&.google.storage.v"
- + "2.BucketAccessControl\022B\n\022default_object_"
- + "acl\030\t \003(\0132&.google.storage.v2.ObjectAcce"
- + "ssControl\0226\n\tlifecycle\030\n \001(\0132#.google.st"
- + "orage.v2.Bucket.Lifecycle\0224\n\013create_time"
- + "\030\013 \001(\0132\032.google.protobuf.TimestampB\003\340A\003\022"
- + ",\n\004cors\030\014 \003(\0132\036.google.storage.v2.Bucket"
- + ".Cors\0224\n\013update_time\030\r \001(\0132\032.google.prot"
- + "obuf.TimestampB\003\340A\003\022 \n\030default_event_bas"
- + "ed_hold\030\016 \001(\010\0225\n\006labels\030\017 \003(\0132%.google.s"
- + "torage.v2.Bucket.LabelsEntry\0222\n\007website\030"
- + "\020 \001(\0132!.google.storage.v2.Bucket.Website"
- + "\0228\n\nversioning\030\021 \001(\0132$.google.storage.v2"
- + ".Bucket.Versioning\0222\n\007logging\030\022 \001(\0132!.go"
- + "ogle.storage.v2.Bucket.Logging\022,\n\005owner\030"
- + "\023 \001(\0132\030.google.storage.v2.OwnerB\003\340A\003\0228\n\n"
- + "encryption\030\024 \001(\0132$.google.storage.v2.Buc"
- + "ket.Encryption\0222\n\007billing\030\025 \001(\0132!.google"
- + ".storage.v2.Bucket.Billing\022C\n\020retention_"
- + "policy\030\026 \001(\0132).google.storage.v2.Bucket."
- + "RetentionPolicy\0227\n\niam_config\030\027 \001(\0132#.go"
- + "ogle.storage.v2.Bucket.IamConfig\022\025\n\rsati"
- + "sfies_pzs\030\031 \001(\010\022P\n\027custom_placement_conf"
- + "ig\030\032 \001(\0132/.google.storage.v2.Bucket.Cust"
- + "omPlacementConfig\0226\n\tautoclass\030\034 \001(\0132#.g"
- + "oogle.storage.v2.Bucket.Autoclass\022K\n\022sof"
- + "t_delete_policy\030\037 \001(\0132*.google.storage.v"
- + "2.Bucket.SoftDeletePolicyB\003\340A\001\032!\n\007Billin"
- + "g\022\026\n\016requester_pays\030\001 \001(\010\032X\n\004Cors\022\016\n\006ori"
- + "gin\030\001 \003(\t\022\016\n\006method\030\002 \003(\t\022\027\n\017response_he"
- + "ader\030\003 \003(\t\022\027\n\017max_age_seconds\030\004 \001(\005\032M\n\nE"
- + "ncryption\022?\n\017default_kms_key\030\001 \001(\tB&\372A#\n"
- + "!cloudkms.googleapis.com/CryptoKey\032\354\001\n\tI"
- + "amConfig\022a\n\033uniform_bucket_level_access\030"
- + "\001 \001(\0132<.google.storage.v2.Bucket.IamConf"
- + "ig.UniformBucketLevelAccess\022 \n\030public_ac"
- + "cess_prevention\030\003 \001(\t\032Z\n\030UniformBucketLe"
- + "velAccess\022\017\n\007enabled\030\001 \001(\010\022-\n\tlock_time\030"
- + "\002 \001(\0132\032.google.protobuf.Timestamp\032\363\005\n\tLi"
- + "fecycle\0226\n\004rule\030\001 \003(\0132(.google.storage.v"
- + "2.Bucket.Lifecycle.Rule\032\255\005\n\004Rule\022?\n\006acti"
- + "on\030\001 \001(\0132/.google.storage.v2.Bucket.Life"
- + "cycle.Rule.Action\022E\n\tcondition\030\002 \001(\01322.g"
- + "oogle.storage.v2.Bucket.Lifecycle.Rule.C"
- + "ondition\032-\n\006Action\022\014\n\004type\030\001 \001(\t\022\025\n\rstor"
- + "age_class\030\002 \001(\t\032\355\003\n\tCondition\022\025\n\010age_day"
- + "s\030\001 \001(\005H\000\210\001\001\022)\n\016created_before\030\002 \001(\0132\021.g"
- + "oogle.type.Date\022\024\n\007is_live\030\003 \001(\010H\001\210\001\001\022\037\n"
- + "\022num_newer_versions\030\004 \001(\005H\002\210\001\001\022\035\n\025matche"
- + "s_storage_class\030\005 \003(\t\022#\n\026days_since_cust"
- + "om_time\030\007 \001(\005H\003\210\001\001\022-\n\022custom_time_before"
- + "\030\010 \001(\0132\021.google.type.Date\022\'\n\032days_since_"
- + "noncurrent_time\030\t \001(\005H\004\210\001\001\0221\n\026noncurrent"
- + "_time_before\030\n \001(\0132\021.google.type.Date\022\026\n"
- + "\016matches_prefix\030\013 \003(\t\022\026\n\016matches_suffix\030"
- + "\014 \003(\tB\013\n\t_age_daysB\n\n\010_is_liveB\025\n\023_num_n"
- + "ewer_versionsB\031\n\027_days_since_custom_time"
- + "B\035\n\033_days_since_noncurrent_time\0328\n\007Loggi"
- + "ng\022\022\n\nlog_bucket\030\001 \001(\t\022\031\n\021log_object_pre"
- + "fix\030\002 \001(\t\032\217\001\n\017RetentionPolicy\0222\n\016effecti"
- + "ve_time\030\001 \001(\0132\032.google.protobuf.Timestam"
- + "p\022\021\n\tis_locked\030\002 \001(\010\0225\n\022retention_durati"
- + "on\030\004 \001(\0132\031.google.protobuf.Duration\032\261\001\n\020"
- + "SoftDeletePolicy\022:\n\022retention_duration\030\001"
- + " \001(\0132\031.google.protobuf.DurationH\000\210\001\001\0227\n\016"
- + "effective_time\030\002 \001(\0132\032.google.protobuf.T"
- + "imestampH\001\210\001\001B\025\n\023_retention_durationB\021\n\017"
- + "_effective_time\032\035\n\nVersioning\022\017\n\007enabled"
- + "\030\001 \001(\010\032;\n\007Website\022\030\n\020main_page_suffix\030\001 "
- + "\001(\t\022\026\n\016not_found_page\030\002 \001(\t\032/\n\025CustomPla"
- + "cementConfig\022\026\n\016data_locations\030\001 \003(\t\032\213\002\n"
- + "\tAutoclass\022\017\n\007enabled\030\001 \001(\010\0224\n\013toggle_ti"
- + "me\030\002 \001(\0132\032.google.protobuf.TimestampB\003\340A"
- + "\003\022#\n\026terminal_storage_class\030\003 \001(\tH\000\210\001\001\022P"
- + "\n\"terminal_storage_class_update_time\030\004 \001"
- + "(\0132\032.google.protobuf.TimestampB\003\340A\003H\001\210\001\001"
- + "B\031\n\027_terminal_storage_classB%\n#_terminal"
- + "_storage_class_update_time\032-\n\013LabelsEntr"
- + "y\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001:G\352AD\n\035"
- + "storage.googleapis.com/Bucket\022#projects/"
- + "{project}/buckets/{bucket}\"\316\001\n\023BucketAcc"
- + "essControl\022\014\n\004role\030\001 \001(\t\022\n\n\002id\030\002 \001(\t\022\016\n\006"
- + "entity\030\003 \001(\t\022\027\n\nentity_alt\030\t \001(\tB\003\340A\003\022\021\n"
- + "\tentity_id\030\004 \001(\t\022\014\n\004etag\030\010 \001(\t\022\r\n\005email\030"
- + "\005 \001(\t\022\016\n\006domain\030\006 \001(\t\0224\n\014project_team\030\007 "
- + "\001(\0132\036.google.storage.v2.ProjectTeam\"I\n\017C"
- + "hecksummedData\022\026\n\007content\030\001 \001(\014B\005\010\001\340A\001\022\023"
- + "\n\006crc32c\030\002 \001(\007H\000\210\001\001B\t\n\007_crc32c\"C\n\017Object"
- + "Checksums\022\023\n\006crc32c\030\001 \001(\007H\000\210\001\001\022\020\n\010md5_ha"
- + "sh\030\002 \001(\014B\t\n\007_crc32c\"\255\002\n\017HmacKeyMetadata\022"
- + "\017\n\002id\030\001 \001(\tB\003\340A\005\022\026\n\taccess_id\030\002 \001(\tB\003\340A\005"
- + "\022D\n\007project\030\003 \001(\tB3\340A\005\372A-\n+cloudresource"
- + "manager.googleapis.com/Project\022\"\n\025servic"
- + "e_account_email\030\004 \001(\tB\003\340A\003\022\r\n\005state\030\005 \001("
- + "\t\0224\n\013create_time\030\006 \001(\0132\032.google.protobuf"
- + ".TimestampB\003\340A\003\0224\n\013update_time\030\007 \001(\0132\032.g",
- "oogle.protobuf.TimestampB\003\340A\003\022\014\n\004etag\030\010 "
- + "\001(\t\"\247\003\n\022NotificationConfig\022\021\n\004name\030\001 \001(\t"
- + "B\003\340A\002\022\022\n\005topic\030\002 \001(\tB\003\340A\002\022\014\n\004etag\030\007 \001(\t\022"
- + "\023\n\013event_types\030\003 \003(\t\022V\n\021custom_attribute"
- + "s\030\004 \003(\0132;.google.storage.v2.Notification"
- + "Config.CustomAttributesEntry\022\032\n\022object_n"
- + "ame_prefix\030\005 \001(\t\022\033\n\016payload_format\030\006 \001(\t"
- + "B\003\340A\002\0327\n\025CustomAttributesEntry\022\013\n\003key\030\001 "
- + "\001(\t\022\r\n\005value\030\002 \001(\t:\0028\001:}\352Az\n)storage.goo"
- + "gleapis.com/NotificationConfig\022Mprojects"
- + "/{project}/buckets/{bucket}/notification"
- + "Configs/{notification_config}\"L\n\022Custome"
- + "rEncryption\022\034\n\024encryption_algorithm\030\001 \001("
- + "\t\022\030\n\020key_sha256_bytes\030\003 \001(\014\"\254\n\n\006Object\022\021"
- + "\n\004name\030\001 \001(\tB\003\340A\005\0225\n\006bucket\030\002 \001(\tB%\340A\005\372A"
- + "\037\n\035storage.googleapis.com/Bucket\022\014\n\004etag"
- + "\030\033 \001(\t\022\027\n\ngeneration\030\003 \001(\003B\003\340A\005\022\033\n\016metag"
- + "eneration\030\004 \001(\003B\003\340A\003\022\025\n\rstorage_class\030\005 "
- + "\001(\t\022\021\n\004size\030\006 \001(\003B\003\340A\003\022\030\n\020content_encodi"
- + "ng\030\007 \001(\t\022\033\n\023content_disposition\030\010 \001(\t\022\025\n"
- + "\rcache_control\030\t \001(\t\0223\n\003acl\030\n \003(\0132&.goog"
- + "le.storage.v2.ObjectAccessControl\022\030\n\020con"
- + "tent_language\030\013 \001(\t\0224\n\013delete_time\030\014 \001(\013"
- + "2\032.google.protobuf.TimestampB\003\340A\003\022\024\n\014con"
- + "tent_type\030\r \001(\t\0224\n\013create_time\030\016 \001(\0132\032.g"
- + "oogle.protobuf.TimestampB\003\340A\003\022\034\n\017compone"
- + "nt_count\030\017 \001(\005B\003\340A\003\022:\n\tchecksums\030\020 \001(\0132\""
- + ".google.storage.v2.ObjectChecksumsB\003\340A\003\022"
- + "4\n\013update_time\030\021 \001(\0132\032.google.protobuf.T"
- + "imestampB\003\340A\003\0227\n\007kms_key\030\022 \001(\tB&\372A#\n!clo"
- + "udkms.googleapis.com/CryptoKey\022B\n\031update"
- + "_storage_class_time\030\023 \001(\0132\032.google.proto"
- + "buf.TimestampB\003\340A\003\022\026\n\016temporary_hold\030\024 \001"
- + "(\010\0229\n\025retention_expire_time\030\025 \001(\0132\032.goog"
- + "le.protobuf.Timestamp\0229\n\010metadata\030\026 \003(\0132"
- + "\'.google.storage.v2.Object.MetadataEntry"
- + "\022\035\n\020event_based_hold\030\027 \001(\010H\000\210\001\001\022,\n\005owner"
- + "\030\030 \001(\0132\030.google.storage.v2.OwnerB\003\340A\003\022B\n"
- + "\023customer_encryption\030\031 \001(\0132%.google.stor"
- + "age.v2.CustomerEncryption\022/\n\013custom_time"
- + "\030\032 \001(\0132\032.google.protobuf.Timestamp\022>\n\020so"
- + "ft_delete_time\030\034 \001(\0132\032.google.protobuf.T"
- + "imestampB\003\340A\003H\001\210\001\001\022>\n\020hard_delete_time\030\035"
- + " \001(\0132\032.google.protobuf.TimestampB\003\340A\003H\002\210"
- + "\001\001\032/\n\rMetadataEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005valu"
- + "e\030\002 \001(\t:\0028\001B\023\n\021_event_based_holdB\023\n\021_sof"
- + "t_delete_timeB\023\n\021_hard_delete_time\"\316\001\n\023O"
- + "bjectAccessControl\022\014\n\004role\030\001 \001(\t\022\n\n\002id\030\002"
- + " \001(\t\022\016\n\006entity\030\003 \001(\t\022\027\n\nentity_alt\030\t \001(\t"
- + "B\003\340A\003\022\021\n\tentity_id\030\004 \001(\t\022\014\n\004etag\030\010 \001(\t\022\r"
- + "\n\005email\030\005 \001(\t\022\016\n\006domain\030\006 \001(\t\0224\n\014project"
- + "_team\030\007 \001(\0132\036.google.storage.v2.ProjectT"
- + "eam\"l\n\023ListObjectsResponse\022*\n\007objects\030\001 "
- + "\003(\0132\031.google.storage.v2.Object\022\020\n\010prefix"
- + "es\030\002 \003(\t\022\027\n\017next_page_token\030\003 \001(\t\"3\n\013Pro"
- + "jectTeam\022\026\n\016project_number\030\001 \001(\t\022\014\n\004team"
- + "\030\002 \001(\t\"\'\n\016ServiceAccount\022\025\n\remail_addres"
- + "s\030\001 \001(\t\"*\n\005Owner\022\016\n\006entity\030\001 \001(\t\022\021\n\tenti"
- + "ty_id\030\002 \001(\t\"C\n\014ContentRange\022\r\n\005start\030\001 \001"
- + "(\003\022\013\n\003end\030\002 \001(\003\022\027\n\017complete_length\030\003 \001(\003"
- + "2\252\'\n\007Storage\022r\n\014DeleteBucket\022&.google.st"
- + "orage.v2.DeleteBucketRequest\032\026.google.pr"
- + "otobuf.Empty\"\"\332A\004name\212\323\344\223\002\025\022\023\n\004name\022\013{bu"
- + "cket=**}\022o\n\tGetBucket\022#.google.storage.v"
- + "2.GetBucketRequest\032\031.google.storage.v2.B"
- + "ucket\"\"\332A\004name\212\323\344\223\002\025\022\023\n\004name\022\013{bucket=**"
- + "}\022\253\001\n\014CreateBucket\022&.google.storage.v2.C"
- + "reateBucketRequest\032\031.google.storage.v2.B"
- + "ucket\"X\332A\027parent,bucket,bucket_id\212\323\344\223\0028\022"
- + "\026\n\006parent\022\014{project=**}\022\036\n\016bucket.projec"
- + "t\022\014{project=**}\022\205\001\n\013ListBuckets\022%.google"
- + ".storage.v2.ListBucketsRequest\032&.google."
- + "storage.v2.ListBucketsResponse\"\'\332A\006paren"
- + "t\212\323\344\223\002\030\022\026\n\006parent\022\014{project=**}\022\223\001\n\031Lock"
- + "BucketRetentionPolicy\0223.google.storage.v"
- + "2.LockBucketRetentionPolicyRequest\032\031.goo"
- + "gle.storage.v2.Bucket\"&\332A\006bucket\212\323\344\223\002\027\022\025"
- + "\n\006bucket\022\013{bucket=**}\022u\n\014GetIamPolicy\022\"."
- + "google.iam.v1.GetIamPolicyRequest\032\025.goog"
- + "le.iam.v1.Policy\"*\332A\010resource\212\323\344\223\002\031\022\027\n\010r"
- + "esource\022\013{bucket=**}\022|\n\014SetIamPolicy\022\".g"
- + "oogle.iam.v1.SetIamPolicyRequest\032\025.googl"
- + "e.iam.v1.Policy\"1\332A\017resource,policy\212\323\344\223\002"
- + "\031\022\027\n\010resource\022\013{bucket=**}\022\327\001\n\022TestIamPe"
- + "rmissions\022(.google.iam.v1.TestIamPermiss"
- + "ionsRequest\032).google.iam.v1.TestIamPermi"
- + "ssionsResponse\"l\332A\024resource,permissions\212"
- + "\323\344\223\002O\022\027\n\010resource\022\013{bucket=**}\0224\n\010resour"
- + "ce\022({bucket=projects/*/buckets/*}/object"
- + "s/**\022\212\001\n\014UpdateBucket\022&.google.storage.v"
- + "2.UpdateBucketRequest\032\031.google.storage.v"
- + "2.Bucket\"7\332A\022bucket,update_mask\212\323\344\223\002\034\022\032\n"
- + "\013bucket.name\022\013{bucket=**}\022\237\001\n\030DeleteNoti"
- + "ficationConfig\0222.google.storage.v2.Delet"
- + "eNotificationConfigRequest\032\026.google.prot"
- + "obuf.Empty\"7\332A\004name\212\323\344\223\002*\022(\n\004name\022 {buck"
- + "et=projects/*/buckets/*}/**\022\250\001\n\025GetNotif"
- + "icationConfig\022/.google.storage.v2.GetNot"
- + "ificationConfigRequest\032%.google.storage."
- + "v2.NotificationConfig\"7\332A\004name\212\323\344\223\002*\022(\n\004"
- + "name\022 {bucket=projects/*/buckets/*}/**\022\261"
- + "\001\n\030CreateNotificationConfig\0222.google.sto"
- + "rage.v2.CreateNotificationConfigRequest\032"
- + "%.google.storage.v2.NotificationConfig\":"
- + "\332A\032parent,notification_config\212\323\344\223\002\027\022\025\n\006p"
- + "arent\022\013{bucket=**}\022\250\001\n\027ListNotificationC"
- + "onfigs\0221.google.storage.v2.ListNotificat"
- + "ionConfigsRequest\0322.google.storage.v2.Li"
- + "stNotificationConfigsResponse\"&\332A\006parent"
- + "\212\323\344\223\002\027\022\025\n\006parent\022\013{bucket=**}\022~\n\rCompose"
- + "Object\022\'.google.storage.v2.ComposeObject"
- + "Request\032\031.google.storage.v2.Object\")\212\323\344\223"
- + "\002#\022!\n\022destination.bucket\022\013{bucket=**}\022\230\001"
- + "\n\014DeleteObject\022&.google.storage.v2.Delet"
- + "eObjectRequest\032\026.google.protobuf.Empty\"H"
- + "\332A\rbucket,object\332A\030bucket,object,generat"
- + "ion\212\323\344\223\002\027\022\025\n\006bucket\022\013{bucket=**}\022\215\001\n\rRes"
- + "toreObject\022\'.google.storage.v2.RestoreOb"
- + "jectRequest\032\031.google.storage.v2.Object\"8"
- + "\332A\030bucket,object,generation\212\323\344\223\002\027\022\025\n\006buc"
- + "ket\022\013{bucket=**}\022\272\001\n\024CancelResumableWrit"
- + "e\022..google.storage.v2.CancelResumableWri"
- + "teRequest\032/.google.storage.v2.CancelResu"
- + "mableWriteResponse\"A\332A\tupload_id\212\323\344\223\002/\022-"
- + "\n\tupload_id\022 {bucket=projects/*/buckets/"
- + "*}/**\022\225\001\n\tGetObject\022#.google.storage.v2."
- + "GetObjectRequest\032\031.google.storage.v2.Obj"
- + "ect\"H\332A\rbucket,object\332A\030bucket,object,ge"
- + "neration\212\323\344\223\002\027\022\025\n\006bucket\022\013{bucket=**}\022\245\001"
- + "\n\nReadObject\022$.google.storage.v2.ReadObj"
- + "ectRequest\032%.google.storage.v2.ReadObjec"
- + "tResponse\"H\332A\rbucket,object\332A\030bucket,obj"
- + "ect,generation\212\323\344\223\002\027\022\025\n\006bucket\022\013{bucket="
- + "**}0\001\022\214\001\n\014UpdateObject\022&.google.storage."
- + "v2.UpdateObjectRequest\032\031.google.storage."
- + "v2.Object\"9\332A\022object,update_mask\212\323\344\223\002\036\022\034"
- + "\n\robject.bucket\022\013{bucket=**}\022`\n\013WriteObj"
- + "ect\022%.google.storage.v2.WriteObjectReque"
- + "st\032&.google.storage.v2.WriteObjectRespon"
- + "se\"\000(\001\022n\n\017BidiWriteObject\022).google.stora"
- + "ge.v2.BidiWriteObjectRequest\032*.google.st"
- + "orage.v2.BidiWriteObjectResponse\"\000(\0010\001\022\204"
- + "\001\n\013ListObjects\022%.google.storage.v2.ListO"
- + "bjectsRequest\032&.google.storage.v2.ListOb"
- + "jectsResponse\"&\332A\006parent\212\323\344\223\002\027\022\025\n\006parent"
- + "\022\013{bucket=**}\022\230\001\n\rRewriteObject\022\'.google"
- + ".storage.v2.RewriteObjectRequest\032\".googl"
- + "e.storage.v2.RewriteResponse\":\212\323\344\223\0024\022\017\n\r"
- + "source_bucket\022!\n\022destination_bucket\022\013{bu"
- + "cket=**}\022\256\001\n\023StartResumableWrite\022-.googl"
- + "e.storage.v2.StartResumableWriteRequest\032"
- + "..google.storage.v2.StartResumableWriteR"
- + "esponse\"8\212\323\344\223\0022\0220\n!write_object_spec.res"
- + "ource.bucket\022\013{bucket=**}\022\256\001\n\020QueryWrite"
- + "Status\022*.google.storage.v2.QueryWriteSta"
- + "tusRequest\032+.google.storage.v2.QueryWrit"
- + "eStatusResponse\"A\332A\tupload_id\212\323\344\223\002/\022-\n\tu"
- + "pload_id\022 {bucket=projects/*/buckets/*}/"
- + "**\022\200\001\n\021GetServiceAccount\022+.google.storag"
- + "e.v2.GetServiceAccountRequest\032!.google.s"
- + "torage.v2.ServiceAccount\"\033\332A\007project\212\323\344\223"
- + "\002\013\022\t\n\007project\022\225\001\n\rCreateHmacKey\022\'.google"
- + ".storage.v2.CreateHmacKeyRequest\032(.googl"
- + "e.storage.v2.CreateHmacKeyResponse\"1\332A\035p"
- + "roject,service_account_email\212\323\344\223\002\013\022\t\n\007pr"
- + "oject\022w\n\rDeleteHmacKey\022\'.google.storage."
- + "v2.DeleteHmacKeyRequest\032\026.google.protobu"
- + "f.Empty\"%\332A\021access_id,project\212\323\344\223\002\013\022\t\n\007p"
- + "roject\022}\n\nGetHmacKey\022$.google.storage.v2"
- + ".GetHmacKeyRequest\032\".google.storage.v2.H"
- + "macKeyMetadata\"%\332A\021access_id,project\212\323\344\223"
- + "\002\013\022\t\n\007project\022|\n\014ListHmacKeys\022&.google.s"
- + "torage.v2.ListHmacKeysRequest\032\'.google.s"
- + "torage.v2.ListHmacKeysResponse\"\033\332A\007proje"
- + "ct\212\323\344\223\002\013\022\t\n\007project\022\235\001\n\rUpdateHmacKey\022\'."
- + "google.storage.v2.UpdateHmacKeyRequest\032\""
- + ".google.storage.v2.HmacKeyMetadata\"?\332A\024h"
- + "mac_key,update_mask\212\323\344\223\002\"\022 \n\020hmac_key.pr"
- + "oject\022\014{project=**}\032\247\002\312A\026storage.googlea"
- + "pis.com\322A\212\002https://www.googleapis.com/au"
- + "th/cloud-platform,https://www.googleapis"
- + ".com/auth/cloud-platform.read-only,https"
- + "://www.googleapis.com/auth/devstorage.fu"
- + "ll_control,https://www.googleapis.com/au"
- + "th/devstorage.read_only,https://www.goog"
- + "leapis.com/auth/devstorage.read_writeB\342\001"
- + "\n\025com.google.storage.v2B\014StorageProtoP\001Z"
- + ">cloud.google.com/go/storage/internal/ap"
- + "iv2/storagepb;storagepb\352Ax\n!cloudkms.goo"
- + "gleapis.com/CryptoKey\022Sprojects/{project"
- + "}/locations/{location}/keyRings/{key_rin"
- + "g}/cryptoKeys/{crypto_key}b\006proto3"
+ + "(\tB\003\340A\001\022\031\n\014soft_deleted\030\014 \001(\010B\003\340A\001\022(\n\033in"
+ + "clude_folders_as_prefixes\030\r \001(\010B\003\340A\001\022\027\n\n"
+ + "match_glob\030\016 \001(\tB\003\340A\001B\014\n\n_read_mask\"\205\001\n\027"
+ + "QueryWriteStatusRequest\022\026\n\tupload_id\030\001 \001"
+ + "(\tB\003\340A\002\022R\n\034common_object_request_params\030"
+ + "\002 \001(\0132,.google.storage.v2.CommonObjectRe"
+ + "questParams\"s\n\030QueryWriteStatusResponse\022"
+ + "\030\n\016persisted_size\030\001 \001(\003H\000\022-\n\010resource\030\002 "
+ + "\001(\0132\031.google.storage.v2.ObjectH\000B\016\n\014writ"
+ + "e_status\"\250\n\n\024RewriteObjectRequest\022 \n\020des"
+ + "tination_name\030\030 \001(\tB\006\340A\002\340A\005\022D\n\022destinati"
+ + "on_bucket\030\031 \001(\tB(\340A\002\340A\005\372A\037\n\035storage.goog"
+ + "leapis.com/Bucket\022C\n\023destination_kms_key"
+ + "\030\033 \001(\tB&\372A#\n!cloudkms.googleapis.com/Cry"
+ + "ptoKey\022.\n\013destination\030\001 \001(\0132\031.google.sto"
+ + "rage.v2.Object\022<\n\rsource_bucket\030\002 \001(\tB%\340"
+ + "A\002\372A\037\n\035storage.googleapis.com/Bucket\022\032\n\r"
+ + "source_object\030\003 \001(\tB\003\340A\002\022\031\n\021source_gener"
+ + "ation\030\004 \001(\003\022\025\n\rrewrite_token\030\005 \001(\t\022\"\n\032de"
+ + "stination_predefined_acl\030\034 \001(\t\022 \n\023if_gen"
+ + "eration_match\030\007 \001(\003H\000\210\001\001\022$\n\027if_generatio"
+ + "n_not_match\030\010 \001(\003H\001\210\001\001\022$\n\027if_metagenerat"
+ + "ion_match\030\t \001(\003H\002\210\001\001\022(\n\033if_metageneratio"
+ + "n_not_match\030\n \001(\003H\003\210\001\001\022\'\n\032if_source_gene"
+ + "ration_match\030\013 \001(\003H\004\210\001\001\022+\n\036if_source_gen"
+ + "eration_not_match\030\014 \001(\003H\005\210\001\001\022+\n\036if_sourc"
+ + "e_metageneration_match\030\r \001(\003H\006\210\001\001\022/\n\"if_"
+ + "source_metageneration_not_match\030\016 \001(\003H\007\210"
+ + "\001\001\022$\n\034max_bytes_rewritten_per_call\030\017 \001(\003"
+ + "\022(\n copy_source_encryption_algorithm\030\020 \001"
+ + "(\t\022(\n copy_source_encryption_key_bytes\030\025"
+ + " \001(\014\022/\n\'copy_source_encryption_key_sha25"
+ + "6_bytes\030\026 \001(\014\022R\n\034common_object_request_p"
+ + "arams\030\023 \001(\0132,.google.storage.v2.CommonOb"
+ + "jectRequestParams\022<\n\020object_checksums\030\035 "
+ + "\001(\0132\".google.storage.v2.ObjectChecksumsB"
+ + "\026\n\024_if_generation_matchB\032\n\030_if_generatio"
+ + "n_not_matchB\032\n\030_if_metageneration_matchB"
+ + "\036\n\034_if_metageneration_not_matchB\035\n\033_if_s"
+ + "ource_generation_matchB!\n\037_if_source_gen"
+ + "eration_not_matchB!\n\037_if_source_metagene"
+ + "ration_matchB%\n#_if_source_metageneratio"
+ + "n_not_match\"\227\001\n\017RewriteResponse\022\035\n\025total"
+ + "_bytes_rewritten\030\001 \001(\003\022\023\n\013object_size\030\002 "
+ + "\001(\003\022\014\n\004done\030\003 \001(\010\022\025\n\rrewrite_token\030\004 \001(\t"
+ + "\022+\n\010resource\030\005 \001(\0132\031.google.storage.v2.O"
+ + "bject\"\362\001\n\032StartResumableWriteRequest\022B\n\021"
+ + "write_object_spec\030\001 \001(\0132\".google.storage"
+ + ".v2.WriteObjectSpecB\003\340A\002\022R\n\034common_objec"
+ + "t_request_params\030\003 \001(\0132,.google.storage."
+ + "v2.CommonObjectRequestParams\022<\n\020object_c"
+ + "hecksums\030\005 \001(\0132\".google.storage.v2.Objec"
+ + "tChecksums\"0\n\033StartResumableWriteRespons"
+ + "e\022\021\n\tupload_id\030\001 \001(\t\"\357\003\n\023UpdateObjectReq"
+ + "uest\022.\n\006object\030\001 \001(\0132\031.google.storage.v2"
+ + ".ObjectB\003\340A\002\022 \n\023if_generation_match\030\002 \001("
+ + "\003H\000\210\001\001\022$\n\027if_generation_not_match\030\003 \001(\003H"
+ + "\001\210\001\001\022$\n\027if_metageneration_match\030\004 \001(\003H\002\210"
+ + "\001\001\022(\n\033if_metageneration_not_match\030\005 \001(\003H"
+ + "\003\210\001\001\022\026\n\016predefined_acl\030\n \001(\t\0224\n\013update_m"
+ + "ask\030\007 \001(\0132\032.google.protobuf.FieldMaskB\003\340"
+ + "A\002\022R\n\034common_object_request_params\030\010 \001(\013"
+ + "2,.google.storage.v2.CommonObjectRequest"
+ + "ParamsB\026\n\024_if_generation_matchB\032\n\030_if_ge"
+ + "neration_not_matchB\032\n\030_if_metageneration"
+ + "_matchB\036\n\034_if_metageneration_not_match\"`"
+ + "\n\030GetServiceAccountRequest\022D\n\007project\030\001 "
+ + "\001(\tB3\340A\002\372A-\n+cloudresourcemanager.google"
+ + "apis.com/Project\"\200\001\n\024CreateHmacKeyReques"
+ + "t\022D\n\007project\030\001 \001(\tB3\340A\002\372A-\n+cloudresourc"
+ + "emanager.googleapis.com/Project\022\"\n\025servi"
+ + "ce_account_email\030\002 \001(\tB\003\340A\002\"g\n\025CreateHma"
+ + "cKeyResponse\0224\n\010metadata\030\001 \001(\0132\".google."
+ + "storage.v2.HmacKeyMetadata\022\030\n\020secret_key"
+ + "_bytes\030\003 \001(\014\"t\n\024DeleteHmacKeyRequest\022\026\n\t"
+ + "access_id\030\001 \001(\tB\003\340A\002\022D\n\007project\030\002 \001(\tB3\340"
+ + "A\002\372A-\n+cloudresourcemanager.googleapis.c"
+ + "om/Project\"q\n\021GetHmacKeyRequest\022\026\n\tacces"
+ + "s_id\030\001 \001(\tB\003\340A\002\022D\n\007project\030\002 \001(\tB3\340A\002\372A-"
+ + "\n+cloudresourcemanager.googleapis.com/Pr"
+ + "oject\"\274\001\n\023ListHmacKeysRequest\022D\n\007project"
+ + "\030\001 \001(\tB3\340A\002\372A-\n+cloudresourcemanager.goo"
+ + "gleapis.com/Project\022\021\n\tpage_size\030\002 \001(\005\022\022"
+ + "\n\npage_token\030\003 \001(\t\022\035\n\025service_account_em"
+ + "ail\030\004 \001(\t\022\031\n\021show_deleted_keys\030\005 \001(\010\"f\n\024"
+ + "ListHmacKeysResponse\0225\n\thmac_keys\030\001 \003(\0132"
+ + "\".google.storage.v2.HmacKeyMetadata\022\027\n\017n"
+ + "ext_page_token\030\002 \001(\t\"\202\001\n\024UpdateHmacKeyRe"
+ + "quest\0229\n\010hmac_key\030\001 \001(\0132\".google.storage"
+ + ".v2.HmacKeyMetadataB\003\340A\002\022/\n\013update_mask\030"
+ + "\003 \001(\0132\032.google.protobuf.FieldMask\"|\n\031Com"
+ + "monObjectRequestParams\022\034\n\024encryption_alg"
+ + "orithm\030\001 \001(\t\022\034\n\024encryption_key_bytes\030\004 \001"
+ + "(\014\022#\n\033encryption_key_sha256_bytes\030\005 \001(\014\""
+ + "\312\005\n\020ServiceConstants\"\265\005\n\006Values\022\026\n\022VALUE"
+ + "S_UNSPECIFIED\020\000\022\033\n\024MAX_READ_CHUNK_BYTES\020"
+ + "\200\200\200\001\022\034\n\025MAX_WRITE_CHUNK_BYTES\020\200\200\200\001\022\031\n\022MA"
+ + "X_OBJECT_SIZE_MB\020\200\200\300\002\022)\n$MAX_CUSTOM_META"
+ + "DATA_FIELD_NAME_BYTES\020\200\010\022*\n%MAX_CUSTOM_M"
+ + "ETADATA_FIELD_VALUE_BYTES\020\200 \022)\n$MAX_CUST"
+ + "OM_METADATA_TOTAL_SIZE_BYTES\020\200@\022*\n$MAX_B"
+ + "UCKET_METADATA_TOTAL_SIZE_BYTES\020\200\240\001\022\'\n#M"
+ + "AX_NOTIFICATION_CONFIGS_PER_BUCKET\020d\022\"\n\036"
+ + "MAX_LIFECYCLE_RULES_PER_BUCKET\020d\022&\n\"MAX_"
+ + "NOTIFICATION_CUSTOM_ATTRIBUTES\020\005\0221\n,MAX_"
+ + "NOTIFICATION_CUSTOM_ATTRIBUTE_KEY_LENGTH"
+ + "\020\200\002\0223\n.MAX_NOTIFICATION_CUSTOM_ATTRIBUTE"
+ + "_VALUE_LENGTH\020\200\010\022\034\n\030MAX_LABELS_ENTRIES_C"
+ + "OUNT\020@\022\037\n\033MAX_LABELS_KEY_VALUE_LENGTH\020?\022"
+ + "\037\n\032MAX_LABELS_KEY_VALUE_BYTES\020\200\001\022.\n)MAX_"
+ + "OBJECT_IDS_PER_DELETE_OBJECTS_REQUEST\020\350\007"
+ + "\022\036\n\032SPLIT_TOKEN_MAX_VALID_DAYS\020\016\032\002\020\001\"\222\034\n"
+ + "\006Bucket\022\021\n\004name\030\001 \001(\tB\003\340A\005\022\026\n\tbucket_id\030"
+ + "\002 \001(\tB\003\340A\003\022\014\n\004etag\030\035 \001(\t\022D\n\007project\030\003 \001("
+ + "\tB3\340A\005\372A-\n+cloudresourcemanager.googleap"
+ + "is.com/Project\022\033\n\016metageneration\030\004 \001(\003B\003"
+ + "\340A\003\022\025\n\010location\030\005 \001(\tB\003\340A\005\022\032\n\rlocation_t"
+ + "ype\030\006 \001(\tB\003\340A\003\022\025\n\rstorage_class\030\007 \001(\t\022\013\n"
+ + "\003rpo\030\033 \001(\t\0223\n\003acl\030\010 \003(\0132&.google.storage"
+ + ".v2.BucketAccessControl\022B\n\022default_objec"
+ + "t_acl\030\t \003(\0132&.google.storage.v2.ObjectAc"
+ + "cessControl\0226\n\tlifecycle\030\n \001(\0132#.google."
+ + "storage.v2.Bucket.Lifecycle\0224\n\013create_ti"
+ + "me\030\013 \001(\0132\032.google.protobuf.TimestampB\003\340A"
+ + "\003\022,\n\004cors\030\014 \003(\0132\036.google.storage.v2.Buck"
+ + "et.Cors\0224\n\013update_time\030\r \001(\0132\032.google.pr"
+ + "otobuf.TimestampB\003\340A\003\022 \n\030default_event_b"
+ + "ased_hold\030\016 \001(\010\0225\n\006labels\030\017 \003(\0132%.google"
+ + ".storage.v2.Bucket.LabelsEntry\0222\n\007websit"
+ + "e\030\020 \001(\0132!.google.storage.v2.Bucket.Websi"
+ + "te\0228\n\nversioning\030\021 \001(\0132$.google.storage."
+ + "v2.Bucket.Versioning\0222\n\007logging\030\022 \001(\0132!."
+ + "google.storage.v2.Bucket.Logging\022,\n\005owne"
+ + "r\030\023 \001(\0132\030.google.storage.v2.OwnerB\003\340A\003\0228"
+ + "\n\nencryption\030\024 \001(\0132$.google.storage.v2.B"
+ + "ucket.Encryption\0222\n\007billing\030\025 \001(\0132!.goog"
+ + "le.storage.v2.Bucket.Billing\022C\n\020retentio"
+ + "n_policy\030\026 \001(\0132).google.storage.v2.Bucke"
+ + "t.RetentionPolicy\0227\n\niam_config\030\027 \001(\0132#."
+ + "google.storage.v2.Bucket.IamConfig\022\025\n\rsa"
+ + "tisfies_pzs\030\031 \001(\010\022P\n\027custom_placement_co"
+ + "nfig\030\032 \001(\0132/.google.storage.v2.Bucket.Cu"
+ + "stomPlacementConfig\0226\n\tautoclass\030\034 \001(\0132#"
+ + ".google.storage.v2.Bucket.Autoclass\022T\n\026h"
+ + "ierarchical_namespace\030 \001(\0132/.google.sto"
+ + "rage.v2.Bucket.HierarchicalNamespaceB\003\340A"
+ + "\001\022K\n\022soft_delete_policy\030\037 \001(\0132*.google.s"
+ + "torage.v2.Bucket.SoftDeletePolicyB\003\340A\001\032!"
+ + "\n\007Billing\022\026\n\016requester_pays\030\001 \001(\010\032X\n\004Cor"
+ + "s\022\016\n\006origin\030\001 \003(\t\022\016\n\006method\030\002 \003(\t\022\027\n\017res"
+ + "ponse_header\030\003 \003(\t\022\027\n\017max_age_seconds\030\004 "
+ + "\001(\005\032M\n\nEncryption\022?\n\017default_kms_key\030\001 \001"
+ + "(\tB&\372A#\n!cloudkms.googleapis.com/CryptoK"
+ + "ey\032\354\001\n\tIamConfig\022a\n\033uniform_bucket_level"
+ + "_access\030\001 \001(\0132<.google.storage.v2.Bucket"
+ + ".IamConfig.UniformBucketLevelAccess\022 \n\030p"
+ + "ublic_access_prevention\030\003 \001(\t\032Z\n\030Uniform"
+ + "BucketLevelAccess\022\017\n\007enabled\030\001 \001(\010\022-\n\tlo"
+ + "ck_time\030\002 \001(\0132\032.google.protobuf.Timestam"
+ + "p\032\363\005\n\tLifecycle\0226\n\004rule\030\001 \003(\0132(.google.s"
+ + "torage.v2.Bucket.Lifecycle.Rule\032\255\005\n\004Rule"
+ + "\022?\n\006action\030\001 \001(\0132/.google.storage.v2.Buc"
+ + "ket.Lifecycle.Rule.Action\022E\n\tcondition\030\002"
+ + " \001(\01322.google.storage.v2.Bucket.Lifecycl"
+ + "e.Rule.Condition\032-\n\006Action\022\014\n\004type\030\001 \001(\t"
+ + "\022\025\n\rstorage_class\030\002 \001(\t\032\355\003\n\tCondition\022\025\n"
+ + "\010age_days\030\001 \001(\005H\000\210\001\001\022)\n\016created_before\030\002"
+ + " \001(\0132\021.google.type.Date\022\024\n\007is_live\030\003 \001(\010"
+ + "H\001\210\001\001\022\037\n\022num_newer_versions\030\004 \001(\005H\002\210\001\001\022\035"
+ + "\n\025matches_storage_class\030\005 \003(\t\022#\n\026days_si"
+ + "nce_custom_time\030\007 \001(\005H\003\210\001\001\022-\n\022custom_tim"
+ + "e_before\030\010 \001(\0132\021.google.type.Date\022\'\n\032day"
+ + "s_since_noncurrent_time\030\t \001(\005H\004\210\001\001\0221\n\026no"
+ + "ncurrent_time_before\030\n \001(\0132\021.google.type"
+ + ".Date\022\026\n\016matches_prefix\030\013 \003(\t\022\026\n\016matches"
+ + "_suffix\030\014 \003(\tB\013\n\t_age_daysB\n\n\010_is_liveB\025"
+ + "\n\023_num_newer_versionsB\031\n\027_days_since_cus"
+ + "tom_timeB\035\n\033_days_since_noncurrent_time\032"
+ + "8\n\007Logging\022\022\n\nlog_bucket\030\001 \001(\t\022\031\n\021log_ob"
+ + "ject_prefix\030\002 \001(\t\032\217\001\n\017RetentionPolicy\0222\n"
+ + "\016effective_time\030\001 \001(\0132\032.google.protobuf."
+ + "Timestamp\022\021\n\tis_locked\030\002 \001(\010\0225\n\022retentio"
+ + "n_duration\030\004 \001(\0132\031.google.protobuf.Durat"
+ + "ion\032\261\001\n\020SoftDeletePolicy\022:\n\022retention_du"
+ + "ration\030\001 \001(\0132\031.google.protobuf.DurationH"
+ + "\000\210\001\001\0227\n\016effective_time\030\002 \001(\0132\032.google.pr"
+ + "otobuf.TimestampH\001\210\001\001B\025\n\023_retention_dura"
+ + "tionB\021\n\017_effective_time\032\035\n\nVersioning\022\017\n"
+ + "\007enabled\030\001 \001(\010\032;\n\007Website\022\030\n\020main_page_s"
+ + "uffix\030\001 \001(\t\022\026\n\016not_found_page\030\002 \001(\t\032/\n\025C"
+ + "ustomPlacementConfig\022\026\n\016data_locations\030\001"
+ + " \003(\t\032\213\002\n\tAutoclass\022\017\n\007enabled\030\001 \001(\010\0224\n\013t"
+ + "oggle_time\030\002 \001(\0132\032.google.protobuf.Times"
+ + "tampB\003\340A\003\022#\n\026terminal_storage_class\030\003 \001("
+ + "\tH\000\210\001\001\022P\n\"terminal_storage_class_update_"
+ + "time\030\004 \001(\0132\032.google.protobuf.TimestampB\003"
+ + "\340A\003H\001\210\001\001B\031\n\027_terminal_storage_classB%\n#_"
+ + "terminal_storage_class_update_time\032-\n\025Hi"
+ + "erarchicalNamespace\022\024\n\007enabled\030\001 \001(\010B\003\340A"
+ + "\001\032-\n\013LabelsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002"
+ + " \001(\t:\0028\001:G\352AD\n\035storage.googleapis.com/Bu"
+ + "cket\022#projects/{project}/buckets/{bucket"
+ + "}\"\316\001\n\023BucketAccessControl\022\014\n\004role\030\001 \001(\t\022"
+ + "\n\n\002id\030\002 \001(\t\022\016\n\006entity\030\003 \001(\t\022\027\n\nentity_al"
+ + "t\030\t \001(\tB\003\340A\003\022\021\n\tentity_id\030\004 \001(\t\022\014\n\004etag\030"
+ + "\010 \001(\t\022\r\n\005email\030\005 \001(\t\022\016\n\006domain\030\006 \001(\t\0224\n\014"
+ + "project_team\030\007 \001(\0132\036.google.storage.v2.P"
+ + "rojectTeam\"I\n\017ChecksummedData\022\026\n\007content"
+ + "\030\001 \001(\014B\005\010\001\340A\001\022\023\n\006crc32c\030\002 \001(\007H\000\210\001\001B\t\n\007_c"
+ + "rc32c\"C\n\017ObjectChecksums\022\023\n\006crc32c\030\001 \001(\007"
+ + "H\000\210\001\001\022\020\n\010md5_hash\030\002 \001(\014B\t\n\007_crc32c\"\255\002\n\017H"
+ + "macKeyMetadata\022\017\n\002id\030\001 \001(\tB\003\340A\005\022\026\n\tacces"
+ + "s_id\030\002 \001(\tB\003\340A\005\022D\n\007project\030\003 \001(\tB3\340A\005\372A-",
+ "\n+cloudresourcemanager.googleapis.com/Pr"
+ + "oject\022\"\n\025service_account_email\030\004 \001(\tB\003\340A"
+ + "\003\022\r\n\005state\030\005 \001(\t\0224\n\013create_time\030\006 \001(\0132\032."
+ + "google.protobuf.TimestampB\003\340A\003\0224\n\013update"
+ + "_time\030\007 \001(\0132\032.google.protobuf.TimestampB"
+ + "\003\340A\003\022\014\n\004etag\030\010 \001(\t\"\247\003\n\022NotificationConfi"
+ + "g\022\021\n\004name\030\001 \001(\tB\003\340A\002\022\022\n\005topic\030\002 \001(\tB\003\340A\002"
+ + "\022\014\n\004etag\030\007 \001(\t\022\023\n\013event_types\030\003 \003(\t\022V\n\021c"
+ + "ustom_attributes\030\004 \003(\0132;.google.storage."
+ + "v2.NotificationConfig.CustomAttributesEn"
+ + "try\022\032\n\022object_name_prefix\030\005 \001(\t\022\033\n\016paylo"
+ + "ad_format\030\006 \001(\tB\003\340A\002\0327\n\025CustomAttributes"
+ + "Entry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001:}\352"
+ + "Az\n)storage.googleapis.com/NotificationC"
+ + "onfig\022Mprojects/{project}/buckets/{bucke"
+ + "t}/notificationConfigs/{notification_con"
+ + "fig}\"L\n\022CustomerEncryption\022\034\n\024encryption"
+ + "_algorithm\030\001 \001(\t\022\030\n\020key_sha256_bytes\030\003 \001"
+ + "(\014\"\254\n\n\006Object\022\021\n\004name\030\001 \001(\tB\003\340A\005\0225\n\006buck"
+ + "et\030\002 \001(\tB%\340A\005\372A\037\n\035storage.googleapis.com"
+ + "/Bucket\022\014\n\004etag\030\033 \001(\t\022\027\n\ngeneration\030\003 \001("
+ + "\003B\003\340A\005\022\033\n\016metageneration\030\004 \001(\003B\003\340A\003\022\025\n\rs"
+ + "torage_class\030\005 \001(\t\022\021\n\004size\030\006 \001(\003B\003\340A\003\022\030\n"
+ + "\020content_encoding\030\007 \001(\t\022\033\n\023content_dispo"
+ + "sition\030\010 \001(\t\022\025\n\rcache_control\030\t \001(\t\0223\n\003a"
+ + "cl\030\n \003(\0132&.google.storage.v2.ObjectAcces"
+ + "sControl\022\030\n\020content_language\030\013 \001(\t\0224\n\013de"
+ + "lete_time\030\014 \001(\0132\032.google.protobuf.Timest"
+ + "ampB\003\340A\003\022\024\n\014content_type\030\r \001(\t\0224\n\013create"
+ + "_time\030\016 \001(\0132\032.google.protobuf.TimestampB"
+ + "\003\340A\003\022\034\n\017component_count\030\017 \001(\005B\003\340A\003\022:\n\tch"
+ + "ecksums\030\020 \001(\0132\".google.storage.v2.Object"
+ + "ChecksumsB\003\340A\003\0224\n\013update_time\030\021 \001(\0132\032.go"
+ + "ogle.protobuf.TimestampB\003\340A\003\0227\n\007kms_key\030"
+ + "\022 \001(\tB&\372A#\n!cloudkms.googleapis.com/Cryp"
+ + "toKey\022B\n\031update_storage_class_time\030\023 \001(\013"
+ + "2\032.google.protobuf.TimestampB\003\340A\003\022\026\n\016tem"
+ + "porary_hold\030\024 \001(\010\0229\n\025retention_expire_ti"
+ + "me\030\025 \001(\0132\032.google.protobuf.Timestamp\0229\n\010"
+ + "metadata\030\026 \003(\0132\'.google.storage.v2.Objec"
+ + "t.MetadataEntry\022\035\n\020event_based_hold\030\027 \001("
+ + "\010H\000\210\001\001\022,\n\005owner\030\030 \001(\0132\030.google.storage.v"
+ + "2.OwnerB\003\340A\003\022B\n\023customer_encryption\030\031 \001("
+ + "\0132%.google.storage.v2.CustomerEncryption"
+ + "\022/\n\013custom_time\030\032 \001(\0132\032.google.protobuf."
+ + "Timestamp\022>\n\020soft_delete_time\030\034 \001(\0132\032.go"
+ + "ogle.protobuf.TimestampB\003\340A\003H\001\210\001\001\022>\n\020har"
+ + "d_delete_time\030\035 \001(\0132\032.google.protobuf.Ti"
+ + "mestampB\003\340A\003H\002\210\001\001\032/\n\rMetadataEntry\022\013\n\003ke"
+ + "y\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001B\023\n\021_event_bas"
+ + "ed_holdB\023\n\021_soft_delete_timeB\023\n\021_hard_de"
+ + "lete_time\"\316\001\n\023ObjectAccessControl\022\014\n\004rol"
+ + "e\030\001 \001(\t\022\n\n\002id\030\002 \001(\t\022\016\n\006entity\030\003 \001(\t\022\027\n\ne"
+ + "ntity_alt\030\t \001(\tB\003\340A\003\022\021\n\tentity_id\030\004 \001(\t\022"
+ + "\014\n\004etag\030\010 \001(\t\022\r\n\005email\030\005 \001(\t\022\016\n\006domain\030\006"
+ + " \001(\t\0224\n\014project_team\030\007 \001(\0132\036.google.stor"
+ + "age.v2.ProjectTeam\"l\n\023ListObjectsRespons"
+ + "e\022*\n\007objects\030\001 \003(\0132\031.google.storage.v2.O"
+ + "bject\022\020\n\010prefixes\030\002 \003(\t\022\027\n\017next_page_tok"
+ + "en\030\003 \001(\t\"3\n\013ProjectTeam\022\026\n\016project_numbe"
+ + "r\030\001 \001(\t\022\014\n\004team\030\002 \001(\t\"\'\n\016ServiceAccount\022"
+ + "\025\n\remail_address\030\001 \001(\t\"*\n\005Owner\022\016\n\006entit"
+ + "y\030\001 \001(\t\022\021\n\tentity_id\030\002 \001(\t\"C\n\014ContentRan"
+ + "ge\022\r\n\005start\030\001 \001(\003\022\013\n\003end\030\002 \001(\003\022\027\n\017comple"
+ + "te_length\030\003 \001(\0032\252\'\n\007Storage\022r\n\014DeleteBuc"
+ + "ket\022&.google.storage.v2.DeleteBucketRequ"
+ + "est\032\026.google.protobuf.Empty\"\"\332A\004name\212\323\344\223"
+ + "\002\025\022\023\n\004name\022\013{bucket=**}\022o\n\tGetBucket\022#.g"
+ + "oogle.storage.v2.GetBucketRequest\032\031.goog"
+ + "le.storage.v2.Bucket\"\"\332A\004name\212\323\344\223\002\025\022\023\n\004n"
+ + "ame\022\013{bucket=**}\022\253\001\n\014CreateBucket\022&.goog"
+ + "le.storage.v2.CreateBucketRequest\032\031.goog"
+ + "le.storage.v2.Bucket\"X\332A\027parent,bucket,b"
+ + "ucket_id\212\323\344\223\0028\022\026\n\006parent\022\014{project=**}\022\036"
+ + "\n\016bucket.project\022\014{project=**}\022\205\001\n\013ListB"
+ + "uckets\022%.google.storage.v2.ListBucketsRe"
+ + "quest\032&.google.storage.v2.ListBucketsRes"
+ + "ponse\"\'\332A\006parent\212\323\344\223\002\030\022\026\n\006parent\022\014{proje"
+ + "ct=**}\022\223\001\n\031LockBucketRetentionPolicy\0223.g"
+ + "oogle.storage.v2.LockBucketRetentionPoli"
+ + "cyRequest\032\031.google.storage.v2.Bucket\"&\332A"
+ + "\006bucket\212\323\344\223\002\027\022\025\n\006bucket\022\013{bucket=**}\022u\n\014"
+ + "GetIamPolicy\022\".google.iam.v1.GetIamPolic"
+ + "yRequest\032\025.google.iam.v1.Policy\"*\332A\010reso"
+ + "urce\212\323\344\223\002\031\022\027\n\010resource\022\013{bucket=**}\022|\n\014S"
+ + "etIamPolicy\022\".google.iam.v1.SetIamPolicy"
+ + "Request\032\025.google.iam.v1.Policy\"1\332A\017resou"
+ + "rce,policy\212\323\344\223\002\031\022\027\n\010resource\022\013{bucket=**"
+ + "}\022\327\001\n\022TestIamPermissions\022(.google.iam.v1"
+ + ".TestIamPermissionsRequest\032).google.iam."
+ + "v1.TestIamPermissionsResponse\"l\332A\024resour"
+ + "ce,permissions\212\323\344\223\002O\022\027\n\010resource\022\013{bucke"
+ + "t=**}\0224\n\010resource\022({bucket=projects/*/bu"
+ + "ckets/*}/objects/**\022\212\001\n\014UpdateBucket\022&.g"
+ + "oogle.storage.v2.UpdateBucketRequest\032\031.g"
+ + "oogle.storage.v2.Bucket\"7\332A\022bucket,updat"
+ + "e_mask\212\323\344\223\002\034\022\032\n\013bucket.name\022\013{bucket=**}"
+ + "\022\237\001\n\030DeleteNotificationConfig\0222.google.s"
+ + "torage.v2.DeleteNotificationConfigReques"
+ + "t\032\026.google.protobuf.Empty\"7\332A\004name\212\323\344\223\002*"
+ + "\022(\n\004name\022 {bucket=projects/*/buckets/*}/"
+ + "**\022\250\001\n\025GetNotificationConfig\022/.google.st"
+ + "orage.v2.GetNotificationConfigRequest\032%."
+ + "google.storage.v2.NotificationConfig\"7\332A"
+ + "\004name\212\323\344\223\002*\022(\n\004name\022 {bucket=projects/*/"
+ + "buckets/*}/**\022\261\001\n\030CreateNotificationConf"
+ + "ig\0222.google.storage.v2.CreateNotificatio"
+ + "nConfigRequest\032%.google.storage.v2.Notif"
+ + "icationConfig\":\332A\032parent,notification_co"
+ + "nfig\212\323\344\223\002\027\022\025\n\006parent\022\013{bucket=**}\022\250\001\n\027Li"
+ + "stNotificationConfigs\0221.google.storage.v"
+ + "2.ListNotificationConfigsRequest\0322.googl"
+ + "e.storage.v2.ListNotificationConfigsResp"
+ + "onse\"&\332A\006parent\212\323\344\223\002\027\022\025\n\006parent\022\013{bucket"
+ + "=**}\022~\n\rComposeObject\022\'.google.storage.v"
+ + "2.ComposeObjectRequest\032\031.google.storage."
+ + "v2.Object\")\212\323\344\223\002#\022!\n\022destination.bucket\022"
+ + "\013{bucket=**}\022\230\001\n\014DeleteObject\022&.google.s"
+ + "torage.v2.DeleteObjectRequest\032\026.google.p"
+ + "rotobuf.Empty\"H\332A\rbucket,object\332A\030bucket"
+ + ",object,generation\212\323\344\223\002\027\022\025\n\006bucket\022\013{buc"
+ + "ket=**}\022\215\001\n\rRestoreObject\022\'.google.stora"
+ + "ge.v2.RestoreObjectRequest\032\031.google.stor"
+ + "age.v2.Object\"8\332A\030bucket,object,generati"
+ + "on\212\323\344\223\002\027\022\025\n\006bucket\022\013{bucket=**}\022\272\001\n\024Canc"
+ + "elResumableWrite\022..google.storage.v2.Can"
+ + "celResumableWriteRequest\032/.google.storag"
+ + "e.v2.CancelResumableWriteResponse\"A\332A\tup"
+ + "load_id\212\323\344\223\002/\022-\n\tupload_id\022 {bucket=proj"
+ + "ects/*/buckets/*}/**\022\225\001\n\tGetObject\022#.goo"
+ + "gle.storage.v2.GetObjectRequest\032\031.google"
+ + ".storage.v2.Object\"H\332A\rbucket,object\332A\030b"
+ + "ucket,object,generation\212\323\344\223\002\027\022\025\n\006bucket\022"
+ + "\013{bucket=**}\022\245\001\n\nReadObject\022$.google.sto"
+ + "rage.v2.ReadObjectRequest\032%.google.stora"
+ + "ge.v2.ReadObjectResponse\"H\332A\rbucket,obje"
+ + "ct\332A\030bucket,object,generation\212\323\344\223\002\027\022\025\n\006b"
+ + "ucket\022\013{bucket=**}0\001\022\214\001\n\014UpdateObject\022&."
+ + "google.storage.v2.UpdateObjectRequest\032\031."
+ + "google.storage.v2.Object\"9\332A\022object,upda"
+ + "te_mask\212\323\344\223\002\036\022\034\n\robject.bucket\022\013{bucket="
+ + "**}\022`\n\013WriteObject\022%.google.storage.v2.W"
+ + "riteObjectRequest\032&.google.storage.v2.Wr"
+ + "iteObjectResponse\"\000(\001\022n\n\017BidiWriteObject"
+ + "\022).google.storage.v2.BidiWriteObjectRequ"
+ + "est\032*.google.storage.v2.BidiWriteObjectR"
+ + "esponse\"\000(\0010\001\022\204\001\n\013ListObjects\022%.google.s"
+ + "torage.v2.ListObjectsRequest\032&.google.st"
+ + "orage.v2.ListObjectsResponse\"&\332A\006parent\212"
+ + "\323\344\223\002\027\022\025\n\006parent\022\013{bucket=**}\022\230\001\n\rRewrite"
+ + "Object\022\'.google.storage.v2.RewriteObject"
+ + "Request\032\".google.storage.v2.RewriteRespo"
+ + "nse\":\212\323\344\223\0024\022\017\n\rsource_bucket\022!\n\022destinat"
+ + "ion_bucket\022\013{bucket=**}\022\256\001\n\023StartResumab"
+ + "leWrite\022-.google.storage.v2.StartResumab"
+ + "leWriteRequest\032..google.storage.v2.Start"
+ + "ResumableWriteResponse\"8\212\323\344\223\0022\0220\n!write_"
+ + "object_spec.resource.bucket\022\013{bucket=**}"
+ + "\022\256\001\n\020QueryWriteStatus\022*.google.storage.v"
+ + "2.QueryWriteStatusRequest\032+.google.stora"
+ + "ge.v2.QueryWriteStatusResponse\"A\332A\tuploa"
+ + "d_id\212\323\344\223\002/\022-\n\tupload_id\022 {bucket=project"
+ + "s/*/buckets/*}/**\022\200\001\n\021GetServiceAccount\022"
+ + "+.google.storage.v2.GetServiceAccountReq"
+ + "uest\032!.google.storage.v2.ServiceAccount\""
+ + "\033\332A\007project\212\323\344\223\002\013\022\t\n\007project\022\225\001\n\rCreateH"
+ + "macKey\022\'.google.storage.v2.CreateHmacKey"
+ + "Request\032(.google.storage.v2.CreateHmacKe"
+ + "yResponse\"1\332A\035project,service_account_em"
+ + "ail\212\323\344\223\002\013\022\t\n\007project\022w\n\rDeleteHmacKey\022\'."
+ + "google.storage.v2.DeleteHmacKeyRequest\032\026"
+ + ".google.protobuf.Empty\"%\332A\021access_id,pro"
+ + "ject\212\323\344\223\002\013\022\t\n\007project\022}\n\nGetHmacKey\022$.go"
+ + "ogle.storage.v2.GetHmacKeyRequest\032\".goog"
+ + "le.storage.v2.HmacKeyMetadata\"%\332A\021access"
+ + "_id,project\212\323\344\223\002\013\022\t\n\007project\022|\n\014ListHmac"
+ + "Keys\022&.google.storage.v2.ListHmacKeysReq"
+ + "uest\032\'.google.storage.v2.ListHmacKeysRes"
+ + "ponse\"\033\332A\007project\212\323\344\223\002\013\022\t\n\007project\022\235\001\n\rU"
+ + "pdateHmacKey\022\'.google.storage.v2.UpdateH"
+ + "macKeyRequest\032\".google.storage.v2.HmacKe"
+ + "yMetadata\"?\332A\024hmac_key,update_mask\212\323\344\223\002\""
+ + "\022 \n\020hmac_key.project\022\014{project=**}\032\247\002\312A\026"
+ + "storage.googleapis.com\322A\212\002https://www.go"
+ + "ogleapis.com/auth/cloud-platform,https:/"
+ + "/www.googleapis.com/auth/cloud-platform."
+ + "read-only,https://www.googleapis.com/aut"
+ + "h/devstorage.full_control,https://www.go"
+ + "ogleapis.com/auth/devstorage.read_only,h"
+ + "ttps://www.googleapis.com/auth/devstorag"
+ + "e.read_writeB\342\001\n\025com.google.storage.v2B\014"
+ + "StorageProtoP\001Z>cloud.google.com/go/stor"
+ + "age/internal/apiv2/storagepb;storagepb\352A"
+ + "x\n!cloudkms.googleapis.com/CryptoKey\022Spr"
+ + "ojects/{project}/locations/{location}/ke"
+ + "yRings/{key_ring}/cryptoKeys/{crypto_key"
+ + "}b\006proto3"
};
descriptor =
com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
@@ -1261,6 +1270,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
"LexicographicStart",
"LexicographicEnd",
"SoftDeleted",
+ "IncludeFoldersAsPrefixes",
"MatchGlob",
});
internal_static_google_storage_v2_QueryWriteStatusRequest_descriptor =
@@ -1459,6 +1469,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
"SatisfiesPzs",
"CustomPlacementConfig",
"Autoclass",
+ "HierarchicalNamespace",
"SoftDeletePolicy",
});
internal_static_google_storage_v2_Bucket_Billing_descriptor =
@@ -1599,8 +1610,16 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
new java.lang.String[] {
"Enabled", "ToggleTime", "TerminalStorageClass", "TerminalStorageClassUpdateTime",
});
- internal_static_google_storage_v2_Bucket_LabelsEntry_descriptor =
+ internal_static_google_storage_v2_Bucket_HierarchicalNamespace_descriptor =
internal_static_google_storage_v2_Bucket_descriptor.getNestedTypes().get(12);
+ internal_static_google_storage_v2_Bucket_HierarchicalNamespace_fieldAccessorTable =
+ new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+ internal_static_google_storage_v2_Bucket_HierarchicalNamespace_descriptor,
+ new java.lang.String[] {
+ "Enabled",
+ });
+ internal_static_google_storage_v2_Bucket_LabelsEntry_descriptor =
+ internal_static_google_storage_v2_Bucket_descriptor.getNestedTypes().get(13);
internal_static_google_storage_v2_Bucket_LabelsEntry_fieldAccessorTable =
new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
internal_static_google_storage_v2_Bucket_LabelsEntry_descriptor,
diff --git a/proto-google-cloud-storage-v2/src/main/proto/google/storage/v2/storage.proto b/proto-google-cloud-storage-v2/src/main/proto/google/storage/v2/storage.proto
index a8516a58e8..62922eadfc 100644
--- a/proto-google-cloud-storage-v2/src/main/proto/google/storage/v2/storage.proto
+++ b/proto-google-cloud-storage-v2/src/main/proto/google/storage/v2/storage.proto
@@ -1248,6 +1248,11 @@ message ListObjectsRequest {
// Soft delete policy is required to set this option.
bool soft_deleted = 12 [(google.api.field_behavior) = OPTIONAL];
+ // Optional. If true, will also include folders and managed folders (besides
+ // objects) in the returned `prefixes`. Requires `delimiter` to be set to '/'.
+ bool include_folders_as_prefixes = 13
+ [(google.api.field_behavior) = OPTIONAL];
+
// Optional. Filter results to objects and prefixes that match this glob
// pattern. See [List Objects Using
// Glob](https://cloud.google.com/storage/docs/json_api/v1/objects/list#list-objects-and-prefixes-using-glob)
@@ -1988,6 +1993,12 @@ message Bucket {
[(google.api.field_behavior) = OUTPUT_ONLY];
}
+ // Configuration for a bucket's hierarchical namespace feature.
+ message HierarchicalNamespace {
+ // Optional. Enables the hierarchical namespace feature.
+ bool enabled = 1 [(google.api.field_behavior) = OPTIONAL];
+ }
+
// Immutable. The name of the bucket.
// Format: `projects/{project}/buckets/{bucket}`
string name = 1 [(google.api.field_behavior) = IMMUTABLE];
@@ -2136,6 +2147,12 @@ message Bucket {
// Autoclass feature will be disabled and have no effect on the bucket.
Autoclass autoclass = 28;
+ // Optional. The bucket's hierarchical namespace configuration. If there is no
+ // configuration, the hierarchical namespace feature will be disabled and have
+ // no effect on the bucket.
+ HierarchicalNamespace hierarchical_namespace = 32
+ [(google.api.field_behavior) = OPTIONAL];
+
// Optional. The bucket's soft delete policy. The soft delete policy prevents
// soft-deleted objects from being permanently deleted.
SoftDeletePolicy soft_delete_policy = 31
diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml
index fc7eb017f6..2f8aca59a8 100644
--- a/samples/install-without-bom/pom.xml
+++ b/samples/install-without-bom/pom.xml
@@ -30,7 +30,7 @@