diff options
author | Bryan Newbold <bnewbold@robocracy.org> | 2019-01-29 12:50:39 -0800 |
---|---|---|
committer | Bryan Newbold <bnewbold@robocracy.org> | 2019-01-29 12:50:39 -0800 |
commit | 5aac6ec1a46a64b810f4695de968a10cab000914 (patch) | |
tree | c3086929fbd27c596dd95c5c8434eabc9d6363c8 /rust/src/editing_crud.rs | |
parent | 6f8410f4f77a7724081e5573f904bebb3b68b7c1 (diff) | |
download | fatcat-5aac6ec1a46a64b810f4695de968a10cab000914.tar.gz fatcat-5aac6ec1a46a64b810f4695de968a10cab000914.zip |
better database NotFound error propagation
Diffstat (limited to 'rust/src/editing_crud.rs')
-rw-r--r-- | rust/src/editing_crud.rs | 40 |
1 files changed, 35 insertions, 5 deletions
diff --git a/rust/src/editing_crud.rs b/rust/src/editing_crud.rs index 505bc6b4..405afcc0 100644 --- a/rust/src/editing_crud.rs +++ b/rust/src/editing_crud.rs @@ -33,7 +33,15 @@ pub trait EditorCrud { } impl EditorCrud for Editor { fn db_get(conn: &DbConn, editor_id: FatcatId) -> Result<EditorRow> { - let editor: EditorRow = editor::table.find(editor_id.to_uuid()).get_result(conn)?; + let editor: EditorRow = match editor::table.find(editor_id.to_uuid()).get_result(conn) { + Ok(ed) => ed, + Err(diesel::result::Error::NotFound) => { + return Err( + FatcatError::NotFound("editor".to_string(), editor_id.to_string()).into(), + ); + } + other => other?, + }; Ok(editor) } @@ -105,10 +113,21 @@ impl EditgroupCrud for Editgroup { conn: &DbConn, editgroup_id: FatcatId, ) -> Result<(EditgroupRow, Option<ChangelogRow>)> { - let (eg_row, cl_row): (EditgroupRow, Option<ChangelogRow>) = editgroup::table + let (eg_row, cl_row): (EditgroupRow, Option<ChangelogRow>) = match editgroup::table .left_outer_join(changelog::table) .filter(editgroup::id.eq(editgroup_id.to_uuid())) - .first(conn)?; + .first(conn) + { + Ok(eg) => eg, + Err(diesel::result::Error::NotFound) => { + return Err(FatcatError::NotFound( + "editgroup".to_string(), + editgroup_id.to_string(), + ) + .into()); + } + other => other?, + }; ensure!( cl_row.is_some() == eg_row.is_accepted, @@ -277,9 +296,20 @@ pub trait EditgroupAnnotationCrud { impl EditgroupAnnotationCrud for EditgroupAnnotation { fn db_get(conn: &DbConn, annotation_id: Uuid) -> Result<EditgroupAnnotationRow> { - let row: EditgroupAnnotationRow = editgroup_annotation::table + let row: EditgroupAnnotationRow = match editgroup_annotation::table .find(annotation_id) - .get_result(conn)?; + .get_result(conn) + { + Ok(ea) => ea, + Err(diesel::result::Error::NotFound) => { + return Err(FatcatError::NotFound( + "editgroup_annotation".to_string(), + annotation_id.to_string(), + ) + .into()); + } + other => other?, + }; Ok(row) } |