libredfish 0.2.0

A redfish library. Useful for querying server hardware from a BMC.
Documentation
use std::fmt;

use serde::{Deserialize, Serialize};

use crate::model::EnableDisable;
use crate::EnabledDisabled;

pub const DEFAULT_ACPI_SPCR_BAUD_RATE: &str = "115200";
pub const DEFAULT_BAUD_RATE0: &str = DEFAULT_ACPI_SPCR_BAUD_RATE;
pub const DEFAULT_ACPI_SPCR_CONSOLE_REDIRECTION_ENABLE: bool = true;
pub const DEFAULT_ACPI_SPCR_FLOW_CONTROL: &str = "None";
pub const DEFAULT_ACPI_SPCR_PORT: &str = "COM0";
pub const DEFAULT_ACPI_SPCR_TERMINAL_TYPE: &str = "VT-UTF8";
pub const DEFAULT_CONSOLE_REDIRECTION_ENABLE0: bool = true;
pub const DEFAULT_TERMINAL_TYPE0: &str = "ANSI";
pub const DEFAULT_TPM_SUPPORT: EnableDisable = EnableDisable::Enable;
pub const DEFAULT_TPM_OPERATION: &str = "TPM Clear";
pub const DEFAULT_SRIOV_ENABLE: EnableDisable = EnableDisable::Enable;
pub const DEFAULT_VTD_SUPPORT: EnableDisable = EnableDisable::Enable;
pub const DEFAULT_IPV4_HTTP: EnabledDisabled = EnabledDisabled::Enabled;
pub const DEFAULT_IPV4_PXE: EnabledDisabled = EnabledDisabled::Disabled;
pub const DEFAULT_IPV6_HTTP: EnabledDisabled = EnabledDisabled::Enabled;
pub const DEFAULT_IPV6_PXE: EnabledDisabled = EnabledDisabled::Disabled;
pub const DEFAULT_REDFISH_ENABLE: EnabledDisabled = EnabledDisabled::Enabled;
pub const DEFAULT_NVIDIA_INFINITEBOOT: EnableDisable = EnableDisable::Enable;

pub const DEFAULT_KCS_INTERFACE_DISABLE: &str = KCS_INTERFACE_DISABLE_DENY_ALL;
pub const KCS_INTERFACE_DISABLE_DENY_ALL: &str = "Deny All";
pub const KCS_INTERFACE_DISABLE_ALLOW_ALL: &str = "Allow All";
pub const RECOMMENDED_BIOS_VERSION: &str = "01.05.03";
pub const MINIMUM_BIOS_VERSION: &str = "1.01.03";
pub const RECOMMENDED_BMC_FW_VERSION: &str = "24.09.17";
pub const MINIMUM_BMC_FW_VERSION: &str = "23.11.09";

#[derive(Debug, Deserialize, Serialize, Copy, Clone, Eq, PartialEq)]
#[allow(clippy::upper_case_acronyms)]
pub enum BootDevices {
    None,
    Pxe,
    Floppy,
    Cd,
    Usb,
    Hdd,
    BiosSetup,
    Utilities,
    Diags,
    UefiShell,
    UefiTarget,
    SDCard,
    UefiHttp,
    RemoteDrive,
    UefiBootNext,
}

impl fmt::Display for BootDevices {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        fmt::Debug::fmt(self, f)
    }
}

#[derive(Debug, Default, Serialize, Deserialize, Clone)]
#[serde(rename_all = "PascalCase")]
pub struct BiosAttributes {
    #[serde(skip_serializing_if = "Option::is_none")]
    pub acpi_spcr_baud_rate: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub acpi_spcr_console_redirection_enable: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub acpi_spcr_flow_control: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub acpi_spcr_port: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub acpi_spcr_terminal_type: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub baud_rate0: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub console_redirection_enable0: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub terminal_type0: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    #[serde(rename = "SRIOVEnable")]
    pub sriov_enable: Option<EnableDisable>,
    #[serde(skip_serializing_if = "Option::is_none")]
    #[serde(rename = "VTdSupport")]
    pub vtd_support: Option<EnableDisable>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub ipv4_http: Option<EnabledDisabled>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub ipv4_pxe: Option<EnabledDisabled>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub ipv6_http: Option<EnabledDisabled>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub ipv6_pxe: Option<EnabledDisabled>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub tpm_operation: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub tpm_support: Option<EnableDisable>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub kcs_interface_disable: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub redfish_enable: Option<EnabledDisabled>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub nvidia_infiniteboot: Option<EnableDisable>,
}

#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(rename_all = "PascalCase")]
pub struct Bios {
    #[serde(rename = "@odata.context")]
    pub odata_context: String,
    pub attributes: BiosAttributes,
}

#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(rename_all = "PascalCase")]
pub struct SetBiosAttributes {
    pub attributes: BiosAttributes,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(rename_all = "PascalCase")]
pub struct BmcSerialConsoleAttributes {
    pub bit_rate: String,
    pub data_bits: String,
    pub flow_control: String,
    pub interface_enabled: bool,
    pub parity: String,
    pub stop_bits: String,
}