bambulab 0.4.30

API client for Bambu Lab printers
Documentation
use serde::{Deserialize, Serialize};
use serde_json::Value;

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(untagged)]
#[allow(clippy::large_enum_variant)]
pub enum Message {
    Print(Box<Print>),
    Info(Info),
    System(System),
    /// The message could not be parsed. The `Option<String>` contains the raw message.
    /// If the message could not be parsed as a string, the `Option` will be `None`.
    Unknown(Option<String>),

    Connecting,
    Connected,
    Reconnecting,
    Disconnected,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Print {
    pub print: PrintData,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct PrintData {
    pub upload: Option<PrintUpload>,
    pub nozzle_temper: Option<f64>,
    pub nozzle_target_temper: Option<i64>,
    pub bed_temper: Option<f64>,
    pub bed_target_temper: Option<i64>,
    pub chamber_temper: Option<i64>,
    pub mc_print_stage: Option<String>,
    pub heatbreak_fan_speed: Option<String>,
    pub cooling_fan_speed: Option<String>,
    pub big_fan1_speed: Option<String>,
    pub big_fan2_speed: Option<String>,
    pub mc_percent: Option<i64>,
    pub mc_remaining_time: Option<i64>,
    pub ams_status: Option<i64>,
    pub ams_rfid_status: Option<i64>,
    pub hw_switch_state: Option<i64>,
    pub spd_mag: Option<i64>,
    pub spd_lvl: Option<i64>,
    pub print_error: Option<i64>,
    pub lifecycle: Option<String>,
    pub wifi_signal: Option<String>,
    pub gcode_state: Option<String>,
    pub gcode_file_prepare_percent: Option<String>,
    pub queue_number: Option<i64>,
    pub queue_total: Option<i64>,
    pub queue_est: Option<i64>,
    pub queue_sts: Option<i64>,
    pub project_id: Option<String>,
    pub profile_id: Option<String>,
    pub task_id: Option<String>,
    pub subtask_id: Option<String>,
    pub subtask_name: Option<String>,
    pub gcode_file: Option<String>,
    pub stg: Option<Vec<Value>>,
    pub stg_cur: Option<i64>,
    pub print_type: Option<String>,
    pub home_flag: Option<i64>,
    pub mc_print_line_number: Option<String>,
    pub mc_print_sub_stage: Option<i64>,
    pub sdcard: Option<bool>,
    pub force_upgrade: Option<bool>,
    pub mess_production_state: Option<String>,
    pub layer_num: Option<i64>,
    pub total_layer_num: Option<i64>,
    pub s_obj: Option<Vec<Value>>,
    pub fan_gear: Option<i64>,
    pub hms: Option<Vec<Value>>,
    pub online: Option<PrintOnline>,
    pub ams: Option<PrintAms>,
    pub ipcam: Option<PrintIpcam>,
    pub vt_tray: Option<PrintVtTray>,
    pub lights_report: Option<Vec<PrintLightsReport>>,
    pub upgrade_state: Option<PrintUpgradeState>,
    pub command: Option<String>,
    pub msg: Option<i64>,
    pub sequence_id: Option<String>,
}

#[derive(Default, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PrintUpload {
    pub status: String,
    pub progress: i64,
    pub message: String,
}

#[derive(Default, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PrintOnline {
    pub ahb: bool,
    pub rfid: bool,
    pub version: i64,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct PrintAms {
    pub ams: Option<Vec<PrintAmsData>>,
    pub ams_exist_bits: Option<String>,
    pub tray_exist_bits: Option<String>,
    pub tray_is_bbl_bits: Option<String>,
    pub tray_tar: Option<String>,
    pub tray_now: Option<String>,
    pub tray_pre: Option<String>,
    pub tray_read_done_bits: Option<String>,
    pub tray_reading_bits: Option<String>,
    pub version: Option<i64>,
    pub insert_flag: Option<bool>,
    pub power_on_flag: Option<bool>,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct PrintAmsData {
    pub id: String,
    pub humidity: String,
    pub temp: String,
    pub tray: Vec<PrintTray>,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct PrintTray {
    pub id: String,
    pub remain: Option<i64>,
    pub k: Option<f64>,
    pub n: Option<f64>,
    pub tag_uid: Option<String>,
    pub tray_id_name: Option<String>,
    pub tray_info_idx: Option<String>,
    pub tray_type: Option<String>,
    pub tray_sub_brands: Option<String>,
    pub tray_color: Option<String>,
    pub tray_weight: Option<String>,
    pub tray_diameter: Option<String>,
    pub tray_temp: Option<String>,
    pub tray_time: Option<String>,
    pub bed_temp_type: Option<String>,
    pub bed_temp: Option<String>,
    pub nozzle_temp_max: Option<String>,
    pub nozzle_temp_min: Option<String>,
    pub xcam_info: Option<String>,
    pub tray_uuid: Option<String>,
}

#[derive(Default, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PrintIpcam {
    pub ipcam_dev: Option<String>,
    pub ipcam_record: Option<String>,
    pub timelapse: Option<String>,
    pub mode_bits: Option<i64>,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct PrintVtTray {
    pub id: String,
    pub tag_uid: String,
    pub tray_id_name: String,
    pub tray_info_idx: String,
    pub tray_type: String,
    pub tray_sub_brands: String,
    pub tray_color: String,
    pub tray_weight: String,
    pub tray_diameter: String,
    pub tray_temp: String,
    pub tray_time: String,
    pub bed_temp_type: String,
    pub bed_temp: String,
    pub nozzle_temp_max: String,
    pub nozzle_temp_min: String,
    pub xcam_info: String,
    pub tray_uuid: String,
    pub remain: i64,
    pub k: f64,
    pub n: i64,
}

#[derive(Default, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PrintLightsReport {
    pub node: String,
    pub mode: String,
}

#[derive(Default, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PrintUpgradeState {
    pub sequence_id: Option<i64>,
    pub progress: Option<String>,
    pub status: Option<String>,
    pub consistency_request: Option<bool>,
    pub dis_state: Option<i64>,
    pub err_code: Option<i64>,
    pub force_upgrade: Option<bool>,
    pub message: Option<String>,
    pub module: Option<String>,
    pub new_version_state: Option<i64>,
    pub new_ver_list: Option<Vec<Value>>,
}

#[derive(Default, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Info {
    pub info: InfoData,
}

#[derive(Default, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct InfoData {
    pub command: String,
    pub sequence_id: String,
    pub module: Vec<InfoModule>,
    pub result: String,
    pub reason: String,
}

#[derive(Default, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct InfoModule {
    pub name: String,
    pub project_name: String,
    pub sw_ver: String,
    pub hw_ver: String,
    pub sn: String,
    pub loader_ver: Option<String>,
    pub ota_ver: Option<String>,
}

#[derive(Default, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct System {
    pub system: SystemData,
}

#[derive(Default, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SystemData {
    pub command: String,
    pub sequence_id: String,
    pub access_code: Option<String>,
    pub result: String,
}