mime/platform/
linux.rs

1use smithay_clipboard::mime::{AllowedMimeTypes, AsMimeTypes, MimeType};
2
3use crate::{ClipboardLoadData, ClipboardStoreData};
4
5impl<T: crate::AsMimeTypes> AsMimeTypes for ClipboardStoreData<T> {
6    fn available(&self) -> std::borrow::Cow<'static, [MimeType]> {
7        self.0
8            .available()
9            .into_iter()
10            .map(|m| MimeType::Other(m.clone().into()))
11            .collect()
12    }
13
14    fn as_bytes(
15        &self,
16        mime_type: &MimeType,
17    ) -> Option<std::borrow::Cow<'static, [u8]>> {
18        self.0.as_bytes(mime_type.as_ref())
19    }
20}
21
22impl<T: crate::AllowedMimeTypes> AllowedMimeTypes for ClipboardLoadData<T> {
23    // TODO select text variants if string matches...
24    fn allowed() -> std::borrow::Cow<'static, [MimeType]> {
25        T::allowed()
26            .into_iter()
27            .map(|s| MimeType::Other(s.clone().into()))
28            .collect()
29    }
30}
31
32impl<T> TryFrom<(Vec<u8>, MimeType)> for ClipboardLoadData<T>
33where
34    T: for<'b> TryFrom<(Vec<u8>, String)>,
35    T: 'static,
36{
37    type Error = crate::Error;
38
39    fn try_from(
40        (value, mime): (Vec<u8>, MimeType),
41    ) -> Result<Self, Self::Error> {
42        let mime = mime.to_string();
43        Ok(ClipboardLoadData(
44            T::try_from((value, mime)).map_err(|_| crate::Error)?,
45        ))
46    }
47}