diff options
Diffstat (limited to 'rust/src/database_models.rs')
-rw-r--r-- | rust/src/database_models.rs | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/rust/src/database_models.rs b/rust/src/database_models.rs index 9913b7e2..b46d6ffb 100644 --- a/rust/src/database_models.rs +++ b/rust/src/database_models.rs @@ -3,6 +3,7 @@ use database_schema::*; use errors::*; use serde_json; use uuid::Uuid; +use fatcat_api::models::EntityEdit; // Ugh. I thought the whole point was to *not* do this, but: // https://github.com/diesel-rs/diesel/issues/1589 @@ -29,6 +30,10 @@ pub trait EntityIdentRow { fn state(&self) -> Result<EntityState>; } +pub trait EntityEditRow { + fn to_model(self) -> Result<EntityEdit>; +} + // Helper for constructing tables macro_rules! entity_structs { ($edit_table:expr, $edit_struct:ident, $ident_table:expr, $ident_struct:ident) => { @@ -43,6 +48,20 @@ macro_rules! entity_structs { pub extra_json: Option<serde_json::Value>, } + impl EntityEditRow for $edit_struct { + /// Go from a row (SQL model) to an API model + fn to_model(self) -> Result<EntityEdit> { + Ok(EntityEdit { + editgroup_id: self.editgroup_id, + revision: self.rev_id, + redirect_ident: self.redirect_id.map(|v| v.to_string()), + ident: self.ident_id.to_string(), + edit_id: self.id, + extra: self.extra_json, + }) + } + } + #[derive(Debug, Queryable, Identifiable, Associations, AsChangeset)] #[table_name = $ident_table] pub struct $ident_struct { |