diff options
Diffstat (limited to 'src/template.rs')
-rw-r--r-- | src/template.rs | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/src/template.rs b/src/template.rs new file mode 100644 index 0000000..21defa3 --- /dev/null +++ b/src/template.rs @@ -0,0 +1,80 @@ +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<FieldSpec>), +} + +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct Column { + display_name: Option<String>, + field: FieldSpec, +} + +#[derive(Debug, Serialize, Deserialize, Clone)] +pub enum TemplateSpec { + Table(Vec<Column>), +} + +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct Template { + pub entry_type: String, + pub spec: TemplateSpec, +} |