Sync your own workout data from your "Strong" app
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

README.md

strong-api-lib#

Rust client library for the Strong App backend API. Fetches workout logs and exercise definitions, then transforms them into a clean Workout → Exercise → Set model.

Getting Started#

[dependencies]
strong-api-lib = { path = "../strong-api-lib" }
tokio = { version = "1", features = ["full"] }

Usage#

use reqwest::Url;
use strong_api_lib::strong_api::{StrongApi, Includes};
use strong_api_lib::data_transformer::DataTransformer;

let url = Url::parse("https://your-strong-backend.example.com").unwrap();
let mut api = StrongApi::new(url);

// Authenticate
api.login("user@example.com", "password").await?;

// Refresh token (uses internally stored tokens)
api.refresh().await?;

// With the "full" feature, you can pass tokens explicitly:
// api.refresh_by_tokens(access_token, refresh_token).await?;

// Fetch exercise definitions (paginated)
let page1 = api.get_measurements(1).await?;
let page2 = api.get_measurements(2).await?;
let measurements = page1.merge(page2);

// Fetch user data with workout logs
let user = api.get_user("", 500, vec![Includes::Log]).await?;

// Transform into domain model
let transformer = DataTransformer::new()
    .with_measurements_response(measurements);

let workouts = transformer
    .get_measurements_from_logs(&user.embedded.log)?;

for workout in &workouts {
    for exercise in &workout.exercises {
        for set in &exercise.sets {
            println!("{}{} × {:.1} kg",
                exercise.name, set.reps, set.weight.unwrap_or(0.0));
        }
    }
}

Includes Variants#

Used with get_user() to select which embedded resources to return:

Log, Measurement, Tag, Widget, Template, Folder, MeasuredValue

Domain Model#

Workout
├── id, name, timezone, start_date, end_date
└── exercises: Vec<Exercise>
      ├── id, name
      └── sets: Vec<Set>
            └── id, weight, reps, rpe

Features#

Feature Description
full Enables refresh_by_tokens() — refresh auth with externally persisted tokens

API Endpoints#

Method Path Function
POST auth/login login()
POST auth/login/refresh refresh() / refresh_by_tokens()
GET api/users/{user_id} get_user()
GET api/measurements?page={n} get_measurements()
GET api/logs/{user_id} get_logs_raw()