hetzner 1.0.0

A Rust library for managing DNS records and zones on Hetzner's platform, providing tools for networking and DNS management.
Documentation
use crate::api::cloud::enums::{ActionStatus, ServerStatus};
use serde::{Deserialize, Serialize};
use serde_json::Value;

#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct Meta {
    pub pagination: Pagination,
}

#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct Pagination {
    pub page: u32,
    pub per_page: u32,
    pub previous_page: Option<u32>,
    pub next_page: Option<u32>,
    pub last_page: Option<u32>,
    pub total_entries: Option<u32>,
}

#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct Record {
    pub id: String,
    pub name: String,
    #[serde(default)]
    pub ttl: u64,
    #[serde(rename = "type")]
    pub record_type: String,
    pub value: String,
    pub zone_id: String,
    pub created: String,
    pub modified: String,
}

#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct Zone {
    pub created: String,
    pub id: String,
    pub is_secondary_dns: bool,
    pub legacy_dns_host: String,
    pub legacy_ns: Vec<String>,
    pub modified: String,
    pub name: String,
    pub ns: Vec<String>,
    pub owner: String,
    pub paused: bool,
    pub permission: String,
    pub project: String,
    pub records_count: i64,
    pub registrar: String,
    pub status: String,
    pub ttl: u32,
    pub txt_verification: TxtVerification,
    pub verified: String,
    pub zone_type: ZoneType,
}

#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct TxtVerification {
    pub name: String,
    pub token: String,
}

#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct ZoneType {
    pub description: String,
    pub id: String,
    pub name: String,
    pub prices: Option<Value>,
}

#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct CreatedRecord {
    pub record: Record,
}

#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct RecordEnvelope {
    pub record: Record,
}

#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct RecordsEnvelope {
    pub records: Vec<Record>,
    #[serde(default)]
    pub meta: Option<Meta>,
}

#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct ZonesEnvelope {
    pub zones: Vec<Zone>,
    #[serde(default)]
    pub meta: Option<Meta>,
}

#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct CloudServersEnvelope {
    pub servers: Vec<CloudServer>,
    #[serde(default)]
    pub meta: Option<Meta>,
}

#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct CloudServerEnvelope {
    pub server: CloudServer,
}

#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct CloudServer {
    pub id: u64,
    pub name: String,
    pub status: ServerStatus,
    pub created: String,
    #[serde(default)]
    pub public_net: Option<Value>,
    #[serde(default)]
    pub private_net: Vec<Value>,
    #[serde(default)]
    pub labels: Option<std::collections::HashMap<String, String>>,
    #[serde(default)]
    pub server_type: Option<Value>,
    #[serde(default)]
    pub datacenter: Option<Value>,
    #[serde(default)]
    pub image: Option<Value>,
    #[serde(default)]
    pub iso: Option<Value>,
    #[serde(default)]
    pub protection: Option<Value>,
    #[serde(default)]
    pub volumes: Vec<u64>,
    #[serde(default)]
    pub load_balancers: Vec<u64>,
    #[serde(default)]
    pub placement_group: Option<Value>,
    #[serde(default)]
    pub outgoing_traffic: Option<u64>,
    #[serde(default)]
    pub ingoing_traffic: Option<u64>,
    #[serde(default)]
    pub included_traffic: Option<u64>,
    #[serde(default)]
    pub backup_window: Option<String>,
    #[serde(default)]
    pub rescue_enabled: Option<bool>,
    #[serde(default)]
    pub locked: Option<bool>,
    #[serde(default)]
    pub primary_disk_size: Option<u64>,
}

#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct ActionResource {
    pub id: u64,
    #[serde(rename = "type")]
    pub resource_type: String,
}

#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct ActionError {
    pub code: String,
    pub message: String,
}

#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct Action {
    pub id: u64,
    pub command: String,
    pub status: ActionStatus,
    pub started: String,
    pub finished: Option<String>,
    pub progress: i32,
    pub resources: Vec<ActionResource>,
    pub error: Option<ActionError>,
}

#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct ActionEnvelope {
    pub action: Action,
}

#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct ActionsEnvelope {
    pub actions: Vec<Action>,
}

#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct CreateServerResponse {
    pub server: CloudServer,
    pub action: Action,
    pub next_actions: Vec<Action>,
    pub root_password: Option<String>,
}