// Code generated by sidekick. DO NOT EDIT.
//
// Copyright 2026 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#if Disks || ImageFamilyViews || Images || InstanceTemplates || Instances || MachineImages || RegionDisks || RegionInstanceTemplates || RegionInstances || RegionSnapshots || Snapshots
  import Foundation
  import GoogleCloudWkt

  public struct CustomerEncryptionKey: Codable, Equatable, GoogleCloudWkt._AnyPackable,
    Sendable
  {
    /// The name of the encryption key that is stored in Google Cloud KMS.
    /// For example:
    ///
    /// "kmsKeyName": "projects/kms_project_id/locations/region/keyRings/
    /// key_region/cryptoKeys/key
    ///
    /// The fully-qualifed key name may be returned for resource GET requests. For
    /// example:
    ///
    /// "kmsKeyName": "projects/kms_project_id/locations/region/keyRings/
    /// key_region/cryptoKeys/key
    /// /cryptoKeyVersions/1
    public var kmsKeyName: Swift.String? = nil

    /// The service account being used for the encryption request for the given KMS
    /// key. If absent, the Compute Engine default service account is used.
    /// For example:
    ///
    /// "kmsKeyServiceAccount": "name@project_id.iam.gserviceaccount.com/
    public var kmsKeyServiceAccount: Swift.String? = nil

    /// [DEPRECATED] CSEK is no longer supported. Use CMEK instead.
    /// Specifies a 256-bit customer-supplied
    /// encryption key, encoded in RFC
    /// 4648 base64 to either encrypt or decrypt this resource. You can
    /// provide either the rawKey or thersaEncryptedKey.
    /// For example:
    ///
    /// "rawKey":
    /// "SGVsbG8gZnJvbSBHb29nbGUgQ2xvdWQgUGxhdGZvcm0="
    @available(*, deprecated)
    public var rawKey: Swift.String? = nil

    /// [DEPRECATED] CSEK is no longer supported. Use CMEK instead.
    /// Specifies an RFC 4648 base64 encoded, RSA-wrapped 2048-bit
    /// customer-supplied encryption key to either encrypt or decrypt this
    /// resource. You can provide either the rawKey or thersaEncryptedKey.
    /// For example:
    ///
    /// "rsaEncryptedKey":
    /// "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFH
    /// z0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoD
    /// D6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oe=="
    ///
    /// The key must meet the following requirements before you can provide it to
    /// Compute Engine:
    ///
    ///    1. The key is wrapped using a RSA public key certificate provided by
    ///    Google.
    ///    2. After being wrapped, the key must be encoded in RFC 4648 base64
    ///    encoding.
    ///
    /// Gets the RSA public key certificate provided by Google at:
    ///
    ///
    /// https://cloud-certs.storage.googleapis.com/google-cloud-csek-ingress.pem
    @available(*, deprecated)
    public var rsaEncryptedKey: Swift.String? = nil

    /// [DEPRECATED] CSEK is no longer supported. Use CMEK instead.
    /// [Output only] TheRFC
    /// 4648 base64 encoded SHA-256 hash of the customer-supplied
    /// encryption key that protects this resource.
    @available(*, deprecated)
    public var sha256: Swift.String? = nil

    /// Initialize a new instance of `CustomerEncryptionKey`.
    public init() {}

    /// Use `config` to return a new instance of this object, with some fields updated.
    ///
    /// Commonly used to initialize the value, for example:
    ///
    /// ```
    /// let value = CustomerEncryptionKey().with { $0.kmsKeyName = ... }
    /// ```
    public func with(_ config: (inout Self) throws -> Swift.Void) rethrows -> Self {
      var copy = self
      try config(&copy)
      return copy
    }

    public static var _anyTypeUrl: Swift.String {
      return "type.googleapis.com/google.cloud.compute.v1.CustomerEncryptionKey"
    }
    public init(fromAny any: GoogleCloudWkt.`Any`) throws {
      self = try GoogleCloudWkt._slowAnyDeserialize(Self.self, from: any)
    }
    public func _pack() throws -> GoogleCloudWkt.Struct {
      return try GoogleCloudWkt._slowAnySerialize(message: self)
    }
  }
#endif
