use crate::models;
use serde::{Deserialize, Serialize};
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct Outpost {
    #[serde(rename = "pk")]
    pub pk: uuid::Uuid,
    #[serde(rename = "name")]
    pub name: String,
    #[serde(rename = "type")]
    pub r#type: models::OutpostTypeEnum,
    #[serde(rename = "providers")]
    pub providers: Vec<i32>,
    #[serde(rename = "providers_obj")]
    pub providers_obj: Vec<models::Provider>,
        #[serde(
        rename = "service_connection",
        default,
        with = "::serde_with::rust::double_option",
        skip_serializing_if = "Option::is_none"
    )]
    pub service_connection: Option<Option<uuid::Uuid>>,
    #[serde(rename = "service_connection_obj")]
    pub service_connection_obj: models::ServiceConnection,
    #[serde(rename = "refresh_interval_s")]
    pub refresh_interval_s: i32,
        #[serde(rename = "token_identifier")]
    pub token_identifier: String,
    #[serde(rename = "config")]
    pub config: std::collections::HashMap<String, serde_json::Value>,
        #[serde(
        rename = "managed",
        default,
        with = "::serde_with::rust::double_option",
        skip_serializing_if = "Option::is_none"
    )]
    pub managed: Option<Option<String>>,
}
impl Outpost {
        pub fn new(
        pk: uuid::Uuid,
        name: String,
        r#type: models::OutpostTypeEnum,
        providers: Vec<i32>,
        providers_obj: Vec<models::Provider>,
        service_connection_obj: models::ServiceConnection,
        refresh_interval_s: i32,
        token_identifier: String,
        config: std::collections::HashMap<String, serde_json::Value>,
    ) -> Outpost {
        Outpost {
            pk,
            name,
            r#type,
            providers,
            providers_obj,
            service_connection: None,
            service_connection_obj,
            refresh_interval_s,
            token_identifier,
            config,
            managed: None,
        }
    }
}