summaryrefslogtreecommitdiff
path: root/src/models.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/models.rs')
-rw-r--r--src/models.rs35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/models.rs b/src/models.rs
index 3d7eb24..cd8ddf1 100644
--- a/src/models.rs
+++ b/src/models.rs
@@ -1,3 +1,4 @@
+use crate::schema::raw_data;
use crate::schema::config;
use crate::schema::strava_tokens;
use crate::schema::tasks;
@@ -104,3 +105,37 @@ pub struct StravaToken {
pub access_token: String,
pub expires_at: DateTime<Utc>,
}
+
+#[derive(PartialEq, Debug, Clone, Copy, AsExpression, FromSqlRow)]
+#[sql_type = "sql_types::Text"]
+pub enum DataType {
+ StravaActivity = 0,
+}
+
+impl ToSql<sql_types::Text, Pg> for DataType {
+ fn to_sql<W: Write>(&self, out: &mut Output<W, Pg>) -> serialize::Result {
+ let t = match *self {
+ DataType::StravaActivity => "s:activi".to_string(),
+ };
+ <String as ToSql<sql_types::Text, Pg>>::to_sql(&t, out)
+ }
+}
+
+impl FromSql<sql_types::Text, Pg> for DataType {
+ fn from_sql(bytes: Option<&[u8]>) -> deserialize::Result<Self> {
+ let s = <String as FromSql<sql_types::Text, Pg>>::from_sql(bytes)?;
+ match s.as_str() {
+ "s:activi" => Ok(DataType::StravaActivity),
+ &_ => Err("Unrecognized data type".into()),
+ }
+ }
+}
+
+#[derive(Insertable, Queryable)]
+#[table_name = "raw_data"]
+pub struct RawData {
+ pub data_type: DataType,
+ pub id: i64,
+ pub username: String,
+ pub payload: Value,
+}