// <auto-generated>
// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is
// regenerated.
// </auto-generated>

namespace k8s.Models
{
    using Newtonsoft.Json;
    using System.Linq;

    /// <summary>
    /// Handler defines a specific action that should be taken
    /// </summary>
    public partial class V1Handler
    {
        /// <summary>
        /// Initializes a new instance of the V1Handler class.
        /// </summary>
        public V1Handler()
        {
            CustomInit();
        }

        /// <summary>
        /// Initializes a new instance of the V1Handler class.
        /// </summary>
        /// <param name="exec">One and only one of the following should be
        /// specified. Exec specifies the action to take.</param>
        /// <param name="httpGet">HTTPGet specifies the http request to
        /// perform.</param>
        /// <param name="tcpSocket">TCPSocket specifies an action involving a
        /// TCP port. TCP hooks not yet supported</param>
        public V1Handler(V1ExecAction exec = default(V1ExecAction), V1HTTPGetAction httpGet = default(V1HTTPGetAction), V1TCPSocketAction tcpSocket = default(V1TCPSocketAction))
        {
            Exec = exec;
            HttpGet = httpGet;
            TcpSocket = tcpSocket;
            CustomInit();
        }

        /// <summary>
        /// An initialization method that performs custom operations like setting defaults
        /// </summary>
        partial void CustomInit();

        /// <summary>
        /// Gets or sets one and only one of the following should be specified.
        /// Exec specifies the action to take.
        /// </summary>
        [JsonProperty(PropertyName = "exec")]
        public V1ExecAction Exec { get; set; }

        /// <summary>
        /// Gets or sets hTTPGet specifies the http request to perform.
        /// </summary>
        [JsonProperty(PropertyName = "httpGet")]
        public V1HTTPGetAction HttpGet { get; set; }

        /// <summary>
        /// Gets or sets tCPSocket specifies an action involving a TCP port.
        /// TCP hooks not yet supported
        /// </summary>
        [JsonProperty(PropertyName = "tcpSocket")]
        public V1TCPSocketAction TcpSocket { get; set; }

        /// <summary>
        /// Validate the object.
        /// </summary>
        /// <exception cref="Microsoft.Rest.ValidationException">
        /// Thrown if validation fails
        /// </exception>
        public virtual void Validate()
        {
            if (HttpGet != null)
            {
                HttpGet.Validate();
            }
            if (TcpSocket != null)
            {
                TcpSocket.Validate();
            }
        }
    }
}
