summaryrefslogtreecommitdiff
path: root/src/db/mod.rs
diff options
context:
space:
mode:
authorOwen Jacobson <owen@grimoire.ca>2024-10-09 23:46:16 -0400
committerOwen Jacobson <owen@grimoire.ca>2024-10-10 19:32:49 -0400
commitd17ce92f815fa145fa56307a7e9b3993e0f4270d (patch)
treea23ba5a37984397607386a5c1e30f6619d62bace /src/db/mod.rs
parent03f8d9ad603a4e523a0e2a0e60ad62c8725f0875 (diff)
Return an instance of the client when opening a channel URL directly.
Diffstat (limited to 'src/db/mod.rs')
-rw-r--r--src/db/mod.rs21
1 files changed, 15 insertions, 6 deletions
diff --git a/src/db/mod.rs b/src/db/mod.rs
index b9c59ef..36d888f 100644
--- a/src/db/mod.rs
+++ b/src/db/mod.rs
@@ -97,24 +97,33 @@ pub enum Error {
pub trait NotFound {
type Ok;
+ type Error;
+
fn not_found<E, F>(self, map: F) -> Result<Self::Ok, E>
where
- E: From<sqlx::Error>,
+ E: From<Self::Error>,
F: FnOnce() -> E;
+
+ fn optional(self) -> Result<Option<Self::Ok>, Self::Error>;
}
impl<T> NotFound for Result<T, sqlx::Error> {
type Ok = T;
+ type Error = sqlx::Error;
+
+ fn optional(self) -> Result<Option<T>, sqlx::Error> {
+ match self {
+ Ok(value) => Ok(Some(value)),
+ Err(sqlx::Error::RowNotFound) => Ok(None),
+ Err(other) => Err(other),
+ }
+ }
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),
- }
+ self.optional()?.ok_or_else(map)
}
}