/*
 * Tapis Systems API
 *
 * The Tapis Systems API provides for management of Tapis Systems including permissions, credentials and Scheduler Profiles.
 *
 * The version of the OpenAPI document: 26Q1.1
 * Contact: cicsupport@tacc.utexas.edu
 * Generated by: https://openapi-generator.tech
 */

use crate::models;
use serde::{Deserialize, Serialize};

#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct ReqPutSystem {
    /// Optional more verbose description.
    #[serde(rename = "description", skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    /// FQDN, IP address, Globus endpoint ID or Globus collection ID.
    #[serde(rename = "host", skip_serializing_if = "Option::is_none")]
    pub host: Option<String>,
    #[serde(rename = "defaultAuthnMethod", skip_serializing_if = "Option::is_none")]
    pub default_authn_method: Option<models::AuthnEnum>,
    #[serde(rename = "port", skip_serializing_if = "Option::is_none")]
    pub port: Option<i32>,
    #[serde(rename = "useProxy", skip_serializing_if = "Option::is_none")]
    pub use_proxy: Option<bool>,
    #[serde(rename = "proxyHost", skip_serializing_if = "Option::is_none")]
    pub proxy_host: Option<String>,
    #[serde(rename = "proxyPort", skip_serializing_if = "Option::is_none")]
    pub proxy_port: Option<i32>,
    /// An alternate system to use as a Data Transfer Node (DTN) during job execution.
    #[serde(rename = "dtnSystemId", skip_serializing_if = "Option::is_none")]
    pub dtn_system_id: Option<String>,
    /// Indicates if system supports running jobs using a batch scheduler.
    #[serde(rename = "canRunBatch", skip_serializing_if = "Option::is_none")]
    pub can_run_batch: Option<bool>,
    #[serde(rename = "enableCmdPrefix", skip_serializing_if = "Option::is_none")]
    pub enable_cmd_prefix: Option<bool>,
    /// Indicates if system allows for the creation of child systems.
    #[serde(rename = "allowChildren", skip_serializing_if = "Option::is_none")]
    pub allow_children: Option<bool>,
    #[serde(rename = "mpiCmd", skip_serializing_if = "Option::is_none")]
    pub mpi_cmd: Option<String>,
    #[serde(rename = "jobRuntimes", skip_serializing_if = "Option::is_none")]
    pub job_runtimes: Option<Vec<models::JobRuntime>>,
    #[serde(rename = "jobWorkingDir", skip_serializing_if = "Option::is_none")]
    pub job_working_dir: Option<String>,
    #[serde(rename = "jobEnvVariables", skip_serializing_if = "Option::is_none")]
    pub job_env_variables: Option<Vec<models::KeyValuePair>>,
    #[serde(rename = "jobMaxJobs", skip_serializing_if = "Option::is_none")]
    pub job_max_jobs: Option<i32>,
    #[serde(rename = "jobMaxJobsPerUser", skip_serializing_if = "Option::is_none")]
    pub job_max_jobs_per_user: Option<i32>,
    #[serde(rename = "batchScheduler", skip_serializing_if = "Option::is_none")]
    pub batch_scheduler: Option<models::SchedulerTypeEnum>,
    #[serde(rename = "batchLogicalQueues", skip_serializing_if = "Option::is_none")]
    pub batch_logical_queues: Option<Vec<models::LogicalQueue>>,
    #[serde(
        rename = "batchDefaultLogicalQueue",
        skip_serializing_if = "Option::is_none"
    )]
    pub batch_default_logical_queue: Option<String>,
    #[serde(
        rename = "batchSchedulerProfile",
        skip_serializing_if = "Option::is_none"
    )]
    pub batch_scheduler_profile: Option<String>,
    #[serde(rename = "jobCapabilities", skip_serializing_if = "Option::is_none")]
    pub job_capabilities: Option<Vec<models::Capability>>,
    #[serde(rename = "tags", skip_serializing_if = "Option::is_none")]
    pub tags: Option<Vec<String>>,
    #[serde(rename = "notes", skip_serializing_if = "Option::is_none")]
    pub notes: Option<serde_json::Value>,
}

impl ReqPutSystem {
    pub fn new() -> ReqPutSystem {
        ReqPutSystem {
            description: None,
            host: None,
            default_authn_method: None,
            port: None,
            use_proxy: None,
            proxy_host: None,
            proxy_port: None,
            dtn_system_id: None,
            can_run_batch: None,
            enable_cmd_prefix: None,
            allow_children: None,
            mpi_cmd: None,
            job_runtimes: None,
            job_working_dir: None,
            job_env_variables: None,
            job_max_jobs: None,
            job_max_jobs_per_user: None,
            batch_scheduler: None,
            batch_logical_queues: None,
            batch_default_logical_queue: None,
            batch_scheduler_profile: None,
            job_capabilities: None,
            tags: None,
            notes: None,
        }
    }
}
