rig/client/
audio_generation.rs1#[cfg(feature = "audio")]
2mod audio {
3 use crate::audio_generation::{
4 AudioGenerationError, AudioGenerationModel, AudioGenerationModelDyn,
5 AudioGenerationRequest, AudioGenerationResponse,
6 };
7 use crate::client::{AsAudioGeneration, ProviderClient};
8 use std::future::Future;
9 use std::sync::Arc;
10
11 pub trait AudioGenerationClient: ProviderClient + Clone {
14 type AudioGenerationModel: AudioGenerationModel;
16
17 fn audio_generation_model(&self, model: &str) -> Self::AudioGenerationModel;
29 }
30
31 pub trait AudioGenerationClientDyn: ProviderClient {
32 fn audio_generation_model<'a>(&self, model: &str) -> Box<dyn AudioGenerationModelDyn + 'a>;
33 }
34
35 impl<T, M> AudioGenerationClientDyn for T
36 where
37 T: AudioGenerationClient<AudioGenerationModel = M>,
38 M: AudioGenerationModel + 'static,
39 {
40 fn audio_generation_model<'a>(&self, model: &str) -> Box<dyn AudioGenerationModelDyn + 'a> {
41 Box::new(self.audio_generation_model(model))
42 }
43 }
44
45 impl<T> AsAudioGeneration for T
46 where
47 T: AudioGenerationClientDyn + Clone + 'static,
48 {
49 fn as_audio_generation(&self) -> Option<Box<dyn AudioGenerationClientDyn>> {
50 Some(Box::new(self.clone()))
51 }
52 }
53
54 #[derive(Clone)]
56 pub struct AudioGenerationModelHandle<'a> {
57 pub(crate) inner: Arc<dyn AudioGenerationModelDyn + 'a>,
58 }
59
60 impl AudioGenerationModel for AudioGenerationModelHandle<'_> {
61 type Response = ();
62
63 fn audio_generation(
64 &self,
65 request: AudioGenerationRequest,
66 ) -> impl Future<
67 Output = Result<AudioGenerationResponse<Self::Response>, AudioGenerationError>,
68 > + Send {
69 self.inner.audio_generation(request)
70 }
71 }
72}
73
74#[cfg(feature = "audio")]
75pub use audio::*;