/*
 * Tapis Pods Service
 *
 *  The Pods Service is a web service and distributed computing platform providing pods-as-a-service (PaaS). The service  implements a message broker and processor model that requests pods, alongside a health module to poll for pod data, including logs, status, and health. The primary use of this service is to have quick to deploy long-lived services based on Docker images that are exposed via HTTP or TCP endpoints listed by the API.  **The Pods service provides functionality for two types of pod solutions:**  * **Templated Pods** for run-as-is popular images. Neo4J is one example, the template manages TCP ports, user creation, and permissions.  * **Custom Pods** for arbitrary docker images with less functionality. In this case we will expose port 5000 and do nothing else.   The live-docs act as the most up-to-date API reference. Visit the [documentation for more information](https://tapis.readthedocs.io/en/latest/technical/pods.html). 
 *
 * The version of the OpenAPI document: 1.9.0
 * 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 ModelsPodsNetworking {
    /// Which network protocol to use. `http`, `tcp`, `postgres`, or `local_only`. `local_only` is only accessible from within the cluster.
    #[serde(rename = "protocol", skip_serializing_if = "Option::is_none")]
    pub protocol: Option<String>,
    /// Pod port to expose via networking.url in this networking object.
    #[serde(rename = "port", skip_serializing_if = "Option::is_none")]
    pub port: Option<i32>,
    /// URL used to access the port of the pod defined in this networking object. Generated by service.
    #[serde(rename = "url", skip_serializing_if = "Option::is_none")]
    pub url: Option<String>,
    /// List of IPs that are allowed to access this specific pod port. If empty, all IPs are allowed. ex. ['127.0.0.1/32', '192.168.1.7']
    #[serde(rename = "ip_allow_list", skip_serializing_if = "Option::is_none")]
    pub ip_allow_list: Option<Vec<String>>,
    /// If true, will require Tapis auth to access the pod.
    #[serde(rename = "tapis_auth", skip_serializing_if = "Option::is_none")]
    pub tapis_auth: Option<bool>,
    /// Specification of headers to forward to the pod when using Tapis auth.
    #[serde(rename = "tapis_auth_response_headers", skip_serializing_if = "Option::is_none")]
    pub tapis_auth_response_headers: Option<std::collections::HashMap<String, String>>,
    /// List of users allowed to access the pod when using Tapis auth. Also accepts basic regex patterns to match against.
    #[serde(rename = "tapis_auth_allowed_users", skip_serializing_if = "Option::is_none")]
    pub tapis_auth_allowed_users: Option<Vec<String>>,
    /// Path to redirect to when accessing the pod via Tapis auth.
    #[serde(rename = "tapis_auth_return_path", skip_serializing_if = "Option::is_none")]
    pub tapis_auth_return_path: Option<String>,
    /// List of CORS allowed origins. ex. ['https://tacc.develop.tapis.io', 'https://tacc.tapis.io']
    #[serde(rename = "cors_allow_origins", skip_serializing_if = "Option::is_none")]
    pub cors_allow_origins: Option<Vec<String>>,
    /// List of CORS allowed methods. ex. ['GET', 'POST', 'PUT', 'DELETE']
    #[serde(rename = "cors_allow_methods", skip_serializing_if = "Option::is_none")]
    pub cors_allow_methods: Option<Vec<String>>,
    /// List of CORS allowed headers. ex. ['Content-Type', 'X-Tapis-Token']
    #[serde(rename = "cors_allow_headers", skip_serializing_if = "Option::is_none")]
    pub cors_allow_headers: Option<Vec<String>>,
    /// Boolean to allow credentials to be sent with CORS requests.
    #[serde(rename = "cors_allow_credentials", skip_serializing_if = "Option::is_none")]
    pub cors_allow_credentials: Option<bool>,
    /// Max age of CORS preflight requests in seconds.
    #[serde(rename = "cors_max_age", skip_serializing_if = "Option::is_none")]
    pub cors_max_age: Option<i32>,
    /// Path to redirect to when accessing the pod via Tapis UI.
    #[serde(rename = "tapis_ui_uri", skip_serializing_if = "Option::is_none")]
    pub tapis_ui_uri: Option<String>,
    /// If true, will redirect to the tapis_ui_uri when accessing the pod via Tapis UI. Otherwise, just read-only uri.
    #[serde(rename = "tapis_ui_uri_redirect", skip_serializing_if = "Option::is_none")]
    pub tapis_ui_uri_redirect: Option<bool>,
    /// Describing where the tapis_ui_uri will redirect to.
    #[serde(rename = "tapis_ui_uri_description", skip_serializing_if = "Option::is_none")]
    pub tapis_ui_uri_description: Option<String>,
}

impl ModelsPodsNetworking {
    pub fn new() -> ModelsPodsNetworking {
        ModelsPodsNetworking {
            protocol: None,
            port: None,
            url: None,
            ip_allow_list: None,
            tapis_auth: None,
            tapis_auth_response_headers: None,
            tapis_auth_allowed_users: None,
            tapis_auth_return_path: None,
            cors_allow_origins: None,
            cors_allow_methods: None,
            cors_allow_headers: None,
            cors_allow_credentials: None,
            cors_max_age: None,
            tapis_ui_uri: None,
            tapis_ui_uri_redirect: None,
            tapis_ui_uri_description: None,
        }
    }
}

