// 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.

import Foundation
import GoogleCloudWkt

/// The message definition for updating a `Snooze`. The field, `snooze.name`
/// identifies the `Snooze` to be updated. The remainder of `snooze` gives the
/// content the `Snooze` in question will be assigned.
///
/// What fields can be updated depends on the start time and end time of the
/// `Snooze`.
///
///   * end time is in the past: These `Snooze`s are considered
///     read-only and cannot be updated.
///   * start time is in the past and end time is in the future: `display_name`
///     and `interval.end_time` can be updated.
///   * start time is in the future: `display_name`, `interval.start_time` and
///     `interval.end_time` can be updated.
public struct UpdateSnoozeRequest: Codable, Equatable, GoogleCloudWkt._AnyPackable,
  Sendable
{
  /// Required. The `Snooze` to update. Must have the name field present.
  public var snooze: Snooze? = nil

  /// Required. The fields to update.
  ///
  /// For each field listed in `update_mask`:
  ///
  ///   * If the `Snooze` object supplied in the `UpdateSnoozeRequest` has a
  ///     value for that field, the value of the field in the existing `Snooze`
  ///     will be set to the value of the field in the supplied `Snooze`.
  ///   * If the field does not have a value in the supplied `Snooze`, the field
  ///     in the existing `Snooze` is set to its default value.
  ///
  /// Fields not listed retain their existing value.
  ///
  /// The following are the field names that are accepted in `update_mask`:
  ///
  ///   * `display_name`
  ///   * `interval.start_time`
  ///   * `interval.end_time`
  ///
  /// That said, the start time and end time of the `Snooze` determines which
  /// fields can legally be updated. Before attempting an update, users should
  /// consult the documentation for `UpdateSnoozeRequest`, which talks about
  /// which fields can be updated.
  public var updateMask: GoogleCloudWkt.FieldMask? = nil

  /// Initialize a new instance of `UpdateSnoozeRequest`.
  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 = UpdateSnoozeRequest().with { $0.snooze = ... }
  /// ```
  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.monitoring.v3.UpdateSnoozeRequest"
  }
  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)
  }
}
