summaryrefslogtreecommitdiff
path: root/src/repo/error.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/repo/error.rs')
-rw-r--r--src/repo/error.rs23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/repo/error.rs b/src/repo/error.rs
new file mode 100644
index 0000000..a5961e2
--- /dev/null
+++ b/src/repo/error.rs
@@ -0,0 +1,23 @@
+pub trait NotFound {
+ type Ok;
+ fn not_found<E, F>(self, map: F) -> Result<Self::Ok, E>
+ where
+ E: From<sqlx::Error>,
+ F: FnOnce() -> E;
+}
+
+impl<T> NotFound for Result<T, sqlx::Error> {
+ type Ok = T;
+
+ fn not_found<E, F>(self, map: F) -> Result<T, E>
+ where
+ E: From<sqlx::Error>,
+ F: FnOnce() -> E,
+ {
+ match self {
+ Err(sqlx::Error::RowNotFound) => Err(map()),
+ Err(other) => Err(other.into()),
+ Ok(value) => Ok(value),
+ }
+ }
+}