use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct BodyMeasurement {
pub date: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub weight_kg: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub lean_mass_kg: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub fat_percent: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub neck_cm: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub shoulder_cm: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub chest_cm: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub left_bicep_cm: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub right_bicep_cm: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub left_forearm_cm: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub right_forearm_cm: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub abdomen: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub waist: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub hips: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub left_thigh: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub right_thigh: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub left_calf: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub right_calf: Option<f64>,
}
impl BodyMeasurement {
pub fn new(date: impl Into<String>) -> Self {
Self {
date: date.into(),
..Default::default()
}
}
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct BodyMeasurementsPage {
pub page: u32,
pub page_count: u32,
#[serde(default)]
pub body_measurements: Vec<BodyMeasurement>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct UpdateBodyMeasurement {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub weight_kg: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub lean_mass_kg: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub fat_percent: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub neck_cm: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub shoulder_cm: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub chest_cm: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub left_bicep_cm: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub right_bicep_cm: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub left_forearm_cm: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub right_forearm_cm: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub abdomen: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub waist: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub hips: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub left_thigh: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub right_thigh: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub left_calf: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub right_calf: Option<f64>,
}