hevy 0.1.0

An async Rust client library for the Hevy public API (https://api.hevyapp.com/docs/)
Documentation
use crate::client::HevyClient;
use crate::error::Result;
use crate::models::{BodyMeasurement, BodyMeasurementsPage, UpdateBodyMeasurement};

impl HevyClient {
    /// Gets a paginated list of body measurements for the authenticated user.
    ///
    /// `page` must be 1 or greater (defaults to `1`). `page_size` is capped at
    /// 10 by the API (defaults to `10`).
    pub async fn list_body_measurements(
        &self,
        page: Option<u32>,
        page_size: Option<u32>,
    ) -> Result<BodyMeasurementsPage> {
        self.get(
            "/v1/body_measurements",
            &[
                ("page", page.map(|p| p.to_string())),
                ("pageSize", page_size.map(|p| p.to_string())),
            ],
        )
        .await
    }

    /// Gets a single body measurement by date (`YYYY-MM-DD`).
    pub async fn get_body_measurement(&self, date: &str) -> Result<BodyMeasurement> {
        self.get(&format!("/v1/body_measurements/{date}"), &[])
            .await
    }

    /// Creates a body measurement entry for the date contained in `measurement`.
    ///
    /// Returns [`crate::HevyError::Api`] with status `409` if an entry already
    /// exists for that date.
    pub async fn create_body_measurement(&self, measurement: &BodyMeasurement) -> Result<()> {
        self.post_no_content("/v1/body_measurements", measurement)
            .await
    }

    /// Updates an existing body measurement entry for a given date
    /// (`YYYY-MM-DD`).
    ///
    /// All fields are overwritten; omitted fields are set to `null`.
    pub async fn update_body_measurement(
        &self,
        date: &str,
        measurement: &UpdateBodyMeasurement,
    ) -> Result<()> {
        self.put_no_content(&format!("/v1/body_measurements/{date}"), measurement)
            .await
    }
}