use activities::ActivityType;
use api::{self, Paginated, AccessToken, ResourceState};
use error::Result;
use http;
#[derive(Debug, RustcDecodable)]
pub struct Segment {
id: u32,
resource_state: ResourceState,
name: String,
activity_type: ActivityType,
distance: f32,
average_grade: f32,
maximum_grade: f32,
elevation_high: f32,
elevation_low: f32,
start_latlng: Vec<f32>,
end_latlng: Vec<f32>,
climb_category: u8,
city: String,
state: String,
country: String,
private: bool,
created_at: Option<String>,
updated_at: Option<String>,
total_elevation_gain: Option<f32>,
effort_count: Option<u32>,
athlete_count: Option<u32>,
star_count: Option<u32>,
hazardous: Option<bool>
}
impl Segment {
pub fn get(token: &AccessToken, id: u32) -> Result<Segment> {
let url = api::v3(token, format!("segments/{}", id));
Ok(try!(http::get::<Segment>(&url[..])))
}
pub fn get_starred(token: &AccessToken) -> Result<Paginated<Segment>> {
let url = api::v3(token, "segments/starred".to_string());
let segments = try!(http::get::<Vec<Segment>>(&url[..]));
Ok(Paginated::new(url, segments))
}
}
#[cfg(feature = "api_test")]
#[cfg(test)]
mod api_tests {
use super::Segment;
use api::AccessToken;
#[test]
fn get_segment() {
let token = AccessToken::new_from_env().unwrap();
let segment = Segment::get(&token, 646257).unwrap();
println!("{:?}", segment);
}
#[test]
fn get_stars() {
let token = AccessToken::new_from_env().unwrap();
let starred = Segment::get_starred(&token).unwrap();
println!("{:?}", starred);
}
}