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