use hevy::{CreateWorkoutRequest, HevyClient, NewWorkout, WorkoutExerciseInput, WorkoutSetInput};
#[tokio::main]
async fn main() -> hevy::Result<()> {
let api_key = std::env::var("HEVY_API_KEY").expect("set the HEVY_API_KEY environment variable");
let client = HevyClient::new(api_key);
let user = client.get_user_info().await?;
println!("Logged in as {} ({})", user.name, user.url);
let count = client.workout_count().await?;
println!("You have logged {count} workouts");
let page = client.list_workouts(Some(1), Some(5)).await?;
println!("Page {}/{}:", page.page, page.page_count);
for workout in &page.workouts {
println!(" - {} ({})", workout.title, workout.id);
}
let templates = client.list_exercise_templates(Some(1), Some(1)).await?;
let Some(template) = templates.exercise_templates.first() else {
println!("No exercise templates available, skipping workout creation.");
return Ok(());
};
let workout = NewWorkout::new(
"Hevy crate demo workout",
"2024-08-14T12:00:00Z",
"2024-08-14T12:30:00Z",
)
.with_exercise(
WorkoutExerciseInput::new(&template.id)
.with_set(WorkoutSetInput::warmup(40.0, 12))
.with_set(WorkoutSetInput::normal(80.0, 10)),
);
let created = client
.create_workout(&CreateWorkoutRequest::new(workout))
.await?;
println!("Created workout '{}' with id {}", created.title, created.id);
Ok(())
}