use async_trait::async_trait;
use chrono::{DateTime, Utc};
use uuid::Uuid;
use crate::error::Result;
use super::segment::AudioSegmentMeta;
pub struct RecordedSegment {
pub speaker: &'static str,
pub pcm: Vec<u8>,
pub sample_rate: u32,
pub num_channels: u16,
pub started_at: DateTime<Utc>,
}
#[async_trait]
pub trait AudioStorage: Send + Sync {
async fn store_segment(
&self,
session_id: Uuid,
segment_id: Uuid,
speaker: &str,
data: &[u8],
) -> Result<String>;
async fn save_metadata(&self, session_id: Uuid, meta: &AudioSegmentMeta) -> Result<()>;
async fn finalize_recording(
&self,
_session_id: Uuid,
_segments: &[RecordedSegment],
) -> Result<()> {
Ok(())
}
}
pub mod local;
#[cfg(feature = "db-postgres")]
pub mod postgres;