use super::BoxFuture;
use super::ModelRef;
use super::model_ref::ref_conversions;
use crate::error::ProviderError;
use crate::shared::ModelId;
use crate::shared::ProviderId;
use crate::speech_model::SpeechModel;
use crate::speech_model::SpeechOptions;
use crate::speech_model::SpeechResult;
pub trait DynSpeechModel: Send + Sync + 'static {
fn provider(&self) -> &ProviderId;
fn model_id(&self) -> &ModelId;
fn do_generate(
&self,
options: SpeechOptions,
) -> BoxFuture<'_, Result<SpeechResult, ProviderError>>;
}
impl<T: SpeechModel> DynSpeechModel for T {
fn provider(&self) -> &ProviderId {
SpeechModel::provider(self)
}
fn model_id(&self) -> &ModelId {
SpeechModel::model_id(self)
}
fn do_generate(
&self,
options: SpeechOptions,
) -> BoxFuture<'_, Result<SpeechResult, ProviderError>> {
Box::pin(SpeechModel::do_generate(self, options))
}
}
pub type SpeechModelRef = ModelRef<dyn DynSpeechModel>;
ref_conversions!(SpeechModelRef, SpeechModel, DynSpeechModel);