use serde::Deserialize; use serde::Serialize; pub fn running_template() -> TemplateSpec { TemplateSpec::Table(vec![ Column { display_name: Some("Date".to_string()), field: FieldSpec::App( Function::DisplayUnit(Unit::Timestamp, "date".to_string()), vec![FieldSpec::Field("start_time".to_string())], ), }, Column { display_name: Some("Time".to_string()), field: FieldSpec::App( Function::DisplayUnit(Unit::Seconds, "".to_string()), vec![FieldSpec::Field("moving_time".to_string())], ), }, Column { display_name: Some("Distance".to_string()), field: FieldSpec::App( Function::DisplayUnit(Unit::Meters, "miles".to_string()), vec![FieldSpec::Field("distance".to_string())], ), }, Column { display_name: Some("Pace".to_string()), field: FieldSpec::App( Function::DisplayUnit(Unit::Pace, "".to_string()), vec![FieldSpec::App( Function::Div, vec![ FieldSpec::Field("moving_time".to_string()), FieldSpec::Field("distance".to_string()), ], )], ), }, ]) } #[derive(Debug, Serialize, Deserialize, Clone)] pub enum Unit { Timestamp, // As Rfc3339 Meters, Seconds, Speed, // As m/s Pace, // As s/m } #[derive(Debug, Serialize, Deserialize, Clone)] pub enum Function { TimestampToDate, DisplayUnit(Unit, String), Div, } #[derive(Debug, Serialize, Deserialize, Clone)] pub enum FieldSpec { Field(String), App(Function, Vec), } #[derive(Debug, Serialize, Deserialize, Clone)] pub struct Column { display_name: Option, field: FieldSpec, } #[derive(Debug, Serialize, Deserialize, Clone)] pub enum TemplateSpec { Table(Vec), } #[derive(Debug, Serialize, Deserialize, Clone)] pub struct Template { pub entry_type: String, pub spec: TemplateSpec, }