strava-wrapper 0.0.1

[WIP] A Rust wrapper for the Strava API
Documentation
use serde::{Deserialize, Serialize};

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Activity {
    pub id: i64,
    pub resource_state: u8,
    pub external_id: Option<String>,
    pub upload_id: Option<i64>,
    pub athlete: SimpleAthlete,
    pub name: String,
    pub distance: f64,
    pub moving_time: i32,
    pub elapsed_time: i32,
    pub total_elevation_gain: f64,
    #[serde(rename = "type")]
    pub activity_type: String,
    pub sport_type: String,
    pub start_date: String,
    pub start_date_local: String,
    pub timezone: String,
    pub utc_offset: f64,
    pub achievement_count: i32,
    pub kudos_count: i32,
    pub comment_count: i32,
    pub athlete_count: i32,
    pub photo_count: i32,
    pub map: Map,
    pub trainer: bool,
    pub commute: bool,
    pub manual: bool,
    pub private: bool,
    pub flagged: bool,
    pub gear_id: Option<String>,
    pub from_accepted_tag: Option<bool>,
    pub average_speed: f64,
    pub max_speed: f64,
    pub device_watts: bool,
    pub has_heartrate: bool,
    pub pr_count: i32,
    pub total_photo_count: i32,
    pub has_kudoed: bool,
    pub workout_type: Option<i32>,
    pub description: Option<String>,
    pub calories: Option<f64>,
    pub segment_efforts: Option<Vec<SegmentEffort>>,
}

#[derive(Serialize, Debug)]
pub struct CreateActivity {
    pub name: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub activity_type: Option<String>,
    pub sport_type: String,
    pub start_date_local: String,
    pub elapsed_time: i32,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub distance: Option<f64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub trainer: Option<i32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub commute: Option<i32>,
}

#[derive(Debug, Deserialize)]
struct SimpleActivity {
    id: i64,
    resource_state: i32,
}

#[derive(Debug, Deserialize)]
pub struct Lap {
    id: i64,
    resource_state: i32,
    name: String,
    activity: SimpleActivity,
    athlete: SimpleAthlete,
    elapsed_time: i32,
    moving_time: i32,
    start_date: String,
    start_date_local: String,
    distance: f64,
    start_index: i32,
    end_index: i32,
    total_elevation_gain: f64,
    average_speed: f64,
    max_speed: f64,
    average_cadence: f64,
    device_watts: bool,
    average_watts: f64,
    lap_index: i32,
    split: i32,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct Zones {
    score: i32,
    sensor_based: bool,
    custom_zones: bool,
    max: i32,
    distribution_buckets: String,
    #[serde(rename = "type")]
    data_type: String,
    points: i32,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SimpleAthlete {
    pub id: i64,
    pub resource_state: u8,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Map {
    pub id: String,
    pub polyline: Option<String>,
    pub resource_state: u8,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SegmentEffort {}

#[derive(Debug, Deserialize, PartialEq)]
pub struct Comment {
    id: i64,
    activity_id: i64,
    post_id: Option<i64>,
    resource_state: i32,
    text: String,
    mentions_metadata: Option<String>,
    created_at: String,
    athlete: User,
    cursor: Option<String>,
    reaction_count: i32,
    has_reacted: bool,
}

#[derive(Debug, Deserialize, PartialEq)]
pub struct User {
    firstname: String,
    lastname: String,
    resource_state: Option<i32>,
}