use sqlx::sqlite::SqlitePool; use crate::repo::{ channel::{self, Channel, Provider as _}, error::NotFound as _, }; pub struct Index<'a> { db: &'a SqlitePool, } impl<'a> Index<'a> { pub const fn new(db: &'a SqlitePool) -> Self { Self { db } } pub async fn channel(&self, channel: &channel::Id) -> Result { let mut tx = self.db.begin().await?; let channel = tx .channels() .by_id(channel) .await .not_found(|| Error::ChannelNotFound(channel.clone()))?; tx.commit().await?; Ok(channel) } } #[derive(Debug, thiserror::Error)] pub enum Error { #[error("channel {0} not found")] ChannelNotFound(channel::Id), #[error(transparent)] DatabaseError(#[from] sqlx::Error), }