diff options
Diffstat (limited to 'src/models.rs')
-rw-r--r-- | src/models.rs | 35 |
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, +} |