use std::ops::Deref;
use std::sync::Arc;
use tokio::sync::MutexGuard;
use crate::core::session_wrappers::Session;
use crate::core::subtypes::SentMessage;
use crate::errors::VoiceflousionResult;
pub struct LockedSession<'g> {
session: &'g Arc<Session>,
_guard: MutexGuard<'g, bool>,
}
impl<'g> Deref for LockedSession<'g> {
type Target = Arc<Session>;
fn deref(&self) -> &'g Self::Target {
self.session
}
}
impl<'g> LockedSession<'g> {
pub fn try_from_session(session: &'g Arc<Session>) -> VoiceflousionResult<Self> {
let guard = session.try_lock()?;
Ok(Self {
session,
_guard: guard,
})
}
pub async fn set_previous_message(&self, message: Option<SentMessage>) {
let mut write = self.session.write_previous_message().await;
*write = message;
}
pub fn set_last_interaction(&self, last_interaction: Option<i64>) {
self.store_last_interaction(last_interaction)
}
}