ltrait_source_desktop/
icon.rs1use crate::DesktopError;
2use std::path::{Path, PathBuf};
3
4pub fn lookup(name: &str) -> Result<PathBuf, DesktopError> {
5 freedesktop_icons::lookup(name)
6 .find()
7 .ok_or_else(|| DesktopError::NoIcon(name.into()))
8}
9
10pub fn load_image(path: &Path) -> Result<String, DesktopError> {
12 use base64::{Engine as _, engine::general_purpose};
13 use image::{ImageFormat, ImageReader};
14 use std::io::Cursor;
15
16 let img = ImageReader::open(path)
17 .map_err(DesktopError::OpenFile)?
18 .decode()
19 .map_err(DesktopError::ImageDecode)?;
20
21 let mut buff = Cursor::new(vec![]);
22
23 img.write_to(&mut buff, ImageFormat::Png)
24 .map_err(DesktopError::ImageDecode)?;
25
26 Ok(general_purpose::STANDARD.encode(buff.get_ref()))
27}