feat: add image fetching

This commit is contained in:
2026-03-20 19:48:18 +01:00
parent fb62111c7f
commit 12388a9908
17 changed files with 2122 additions and 92 deletions

View File

@@ -68,7 +68,7 @@ enum EitherTyp {
}
/// Deserialize either a gid number or a groupname into a [`gid_t`]
#[allow(clippy::missing_errors_doc)]
#[expect(clippy::missing_errors_doc)]
pub fn deserialize_group<'de, D>(d: D) -> Result<gid_t, D::Error>
where
D: Deserializer<'de>,
@@ -101,3 +101,21 @@ where
}
}
/// Deserialize into [`magic::cookie::DatabasePaths`] as if it were a [`Vec<String>`]
#[expect(clippy::missing_errors_doc)]
pub fn deserialize_magic_paths<'de, D>(d: D) -> Result<magic::cookie::DatabasePaths, D::Error>
where
D: Deserializer<'de>,
{
use serde::de::Unexpected;
let paths = Vec::<String>::deserialize(d)?;
// TODO: could use this `_err`
paths.try_into().map_err(|_err| {
D::Error::invalid_value(
Unexpected::Other("invalid magic db path"),
&"valid magic db path",
)
})
}

View File

@@ -1,4 +1,7 @@
use std::fmt::Debug;
use std::{
fmt::Debug,
ops::{Deref, DerefMut},
};
use libc::gid_t;
use serde::{Deserialize, Serialize};
@@ -14,3 +17,37 @@ impl Debug for Group {
Debug::fmt(&self.0, f)
}
}
#[repr(transparent)]
#[derive(Deserialize, Default)]
pub struct DatabasePaths(
#[serde(deserialize_with = "inner_helpers::deserialize_magic_paths")]
pub magic::cookie::DatabasePaths,
);
// impl Default for DatabasePaths {
// fn default() -> Self {
// Self(["/usr/share/file/misc/magic"].try_into().expect(""))
// }
// }
impl Debug for DatabasePaths {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
Debug::fmt(&self.0, f)
// f.write_str("<magic paths>")
}
}
impl Deref for DatabasePaths {
type Target = magic::cookie::DatabasePaths;
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl DerefMut for DatabasePaths {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.0
}
}