summaryrefslogtreecommitdiff
path: root/src/template.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/template.rs')
-rw-r--r--src/template.rs80
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,
+}