ferrin_spec/dynamic/
files.rs1use super::BoxFuture;
4use super::ServiceRef;
5use super::model_ref::ref_conversions;
6use crate::error::ProviderError;
7use crate::files::DeleteFileResult;
8use crate::files::DownloadFileResult;
9use crate::files::FileMetadataResult;
10use crate::files::FileReferenceOptions;
11use crate::files::Files;
12use crate::files::UploadFileOptions;
13use crate::files::UploadFileResult;
14use crate::shared::ProviderId;
15
16pub trait DynFiles: Send + Sync + 'static {
18 fn provider(&self) -> &ProviderId;
20 fn upload_file(
22 &self,
23 options: UploadFileOptions,
24 ) -> BoxFuture<'_, Result<UploadFileResult, ProviderError>>;
25 fn supports_get_file_metadata(&self) -> bool;
27 fn get_file_metadata(
29 &self,
30 options: FileReferenceOptions,
31 ) -> BoxFuture<'_, Result<FileMetadataResult, ProviderError>>;
32 fn supports_download_file(&self) -> bool;
34 fn download_file(
36 &self,
37 options: FileReferenceOptions,
38 ) -> BoxFuture<'_, Result<DownloadFileResult, ProviderError>>;
39 fn supports_delete_file(&self) -> bool;
41 fn delete_file(
43 &self,
44 options: FileReferenceOptions,
45 ) -> BoxFuture<'_, Result<DeleteFileResult, ProviderError>>;
46}
47
48impl<T: Files> DynFiles for T {
49 fn provider(&self) -> &ProviderId {
50 Files::provider(self)
51 }
52
53 fn upload_file(
54 &self,
55 options: UploadFileOptions,
56 ) -> BoxFuture<'_, Result<UploadFileResult, ProviderError>> {
57 Box::pin(Files::upload_file(self, options))
58 }
59
60 fn supports_get_file_metadata(&self) -> bool {
61 Files::supports_get_file_metadata(self)
62 }
63
64 fn get_file_metadata(
65 &self,
66 options: FileReferenceOptions,
67 ) -> BoxFuture<'_, Result<FileMetadataResult, ProviderError>> {
68 Box::pin(Files::get_file_metadata(self, options))
69 }
70
71 fn supports_download_file(&self) -> bool {
72 Files::supports_download_file(self)
73 }
74
75 fn download_file(
76 &self,
77 options: FileReferenceOptions,
78 ) -> BoxFuture<'_, Result<DownloadFileResult, ProviderError>> {
79 Box::pin(Files::download_file(self, options))
80 }
81
82 fn supports_delete_file(&self) -> bool {
83 Files::supports_delete_file(self)
84 }
85
86 fn delete_file(
87 &self,
88 options: FileReferenceOptions,
89 ) -> BoxFuture<'_, Result<DeleteFileResult, ProviderError>> {
90 Box::pin(Files::delete_file(self, options))
91 }
92}
93
94pub type FilesRef = ServiceRef<dyn DynFiles>;
96
97ref_conversions!(FilesRef, Files, DynFiles);