ferroui_base/input/
async_data_transfer_item_extensions.rs1use super::platform::ClipboardError;
2use super::{DataFormat, DataFormatOf, IAsyncDataTransferItem, LocalBoxFuture};
3use crate::media::imaging::Bitmap;
4use crate::platform::storage::IStorageItem;
5use std::rc::Rc;
6
7pub trait AsyncDataTransferItemExtensions: IAsyncDataTransferItem {
9 fn contains(&self, format: &DataFormat) -> bool {
11 self.formats().iter().any(|candidate| candidate == format)
12 }
13
14 fn try_contains(&self, format: &DataFormat) -> Result<bool, ClipboardError> {
17 Ok(self.try_formats()?.iter().any(|candidate| candidate == format))
18 }
19
20 fn try_get_value_async<T: Clone + 'static>(
24 &self,
25 format: &DataFormatOf<T>,
26 ) -> LocalBoxFuture<Result<Option<T>, ClipboardError>> {
27 let raw = self.try_get_raw_async(format);
28 Box::pin(async move { Ok(raw.await?.and_then(|value| value.downcast_ref::<T>().cloned())) })
29 }
30
31 fn try_get_text_async(&self) -> LocalBoxFuture<Result<Option<String>, ClipboardError>> {
33 self.try_get_value_async(&DataFormat::text())
34 }
35
36 fn try_get_bitmap_async(&self) -> LocalBoxFuture<Result<Option<Rc<Bitmap>>, ClipboardError>> {
38 self.try_get_value_async(&DataFormat::bitmap())
39 }
40
41 fn try_get_file_async(&self) -> LocalBoxFuture<Result<Option<Rc<dyn IStorageItem>>, ClipboardError>> {
45 self.try_get_value_async(&DataFormat::file())
46 }
47}
48
49impl<I: IAsyncDataTransferItem + ?Sized> AsyncDataTransferItemExtensions for I {}