use async_trait::async_trait;
use crate::error::AudioResult;
use crate::frame::AudioFrame;
#[derive(Debug, Clone, Default)]
pub struct MusicRequest {
pub prompt: String,
pub duration_secs: u32,
pub genre: Option<String>,
pub bpm: Option<u32>,
pub key: Option<String>,
pub continuation_audio: Option<AudioFrame>,
pub instrumental: bool,
}
#[async_trait]
pub trait MusicProvider: Send + Sync {
async fn generate(&self, request: &MusicRequest) -> AudioResult<AudioFrame>;
fn supported_genres(&self) -> &[String];
}