ferrin_spec/dynamic/
video_model.rs1use super::BoxFuture;
4use super::ModelRef;
5use super::model_ref::ref_conversions;
6use crate::error::ProviderError;
7use crate::shared::ModelId;
8use crate::shared::ProviderId;
9use crate::video_model::VideoModel;
10use crate::video_model::VideoOptions;
11use crate::video_model::VideoResult;
12use crate::video_model::VideoStartOptions;
13use crate::video_model::VideoStartResult;
14use crate::video_model::VideoStatusOptions;
15use crate::video_model::VideoStatusResult;
16use crate::video_model::WebhookFactory;
17use crate::video_model::WebhookHandle;
18
19pub trait DynVideoModel: Send + Sync + 'static {
21 fn provider(&self) -> &ProviderId;
23 fn model_id(&self) -> &ModelId;
25 fn max_videos_per_call(&self) -> Option<usize>;
27 fn supports_generate(&self) -> bool;
29 fn do_generate(
31 &self,
32 options: VideoOptions,
33 ) -> BoxFuture<'_, Result<VideoResult, ProviderError>>;
34 fn supports_operations(&self) -> bool;
36 fn do_start(
38 &self,
39 options: VideoStartOptions,
40 ) -> BoxFuture<'_, Result<VideoStartResult, ProviderError>>;
41 fn do_status(
43 &self,
44 options: VideoStatusOptions,
45 ) -> BoxFuture<'_, Result<VideoStatusResult, ProviderError>>;
46 fn supports_webhook(&self) -> bool;
48 fn handle_webhook(
50 &self,
51 factory: WebhookFactory,
52 ) -> BoxFuture<'_, Result<WebhookHandle, ProviderError>>;
53}
54
55impl<T: VideoModel> DynVideoModel for T {
56 fn provider(&self) -> &ProviderId {
57 VideoModel::provider(self)
58 }
59
60 fn model_id(&self) -> &ModelId {
61 VideoModel::model_id(self)
62 }
63
64 fn max_videos_per_call(&self) -> Option<usize> {
65 VideoModel::max_videos_per_call(self)
66 }
67
68 fn supports_generate(&self) -> bool {
69 VideoModel::supports_generate(self)
70 }
71
72 fn do_generate(
73 &self,
74 options: VideoOptions,
75 ) -> BoxFuture<'_, Result<VideoResult, ProviderError>> {
76 Box::pin(VideoModel::do_generate(self, options))
77 }
78
79 fn supports_operations(&self) -> bool {
80 VideoModel::supports_operations(self)
81 }
82
83 fn do_start(
84 &self,
85 options: VideoStartOptions,
86 ) -> BoxFuture<'_, Result<VideoStartResult, ProviderError>> {
87 Box::pin(VideoModel::do_start(self, options))
88 }
89
90 fn do_status(
91 &self,
92 options: VideoStatusOptions,
93 ) -> BoxFuture<'_, Result<VideoStatusResult, ProviderError>> {
94 Box::pin(VideoModel::do_status(self, options))
95 }
96
97 fn supports_webhook(&self) -> bool {
98 VideoModel::supports_webhook(self)
99 }
100
101 fn handle_webhook(
102 &self,
103 factory: WebhookFactory,
104 ) -> BoxFuture<'_, Result<WebhookHandle, ProviderError>> {
105 Box::pin(VideoModel::handle_webhook(self, factory))
106 }
107}
108
109pub type VideoModelRef = ModelRef<dyn DynVideoModel>;
111
112ref_conversions!(VideoModelRef, VideoModel, DynVideoModel);