use dbus::arg::IterAppend;
use dbus_tree::{MTSync, MethodErr, PropInfo};
use crate::{
dbus_api::{
filesystem::shared::{self, filesystem_operation},
types::TData,
},
engine::{Filesystem, Name},
};
fn get_filesystem_property<F, R>(
i: &mut IterAppend,
p: &PropInfo<MTSync<TData>, TData>,
getter: F,
) -> Result<(), MethodErr>
where
F: Fn((Name, Name, &dyn Filesystem)) -> Result<R, String>,
R: dbus::arg::Append,
{
i.append(
filesystem_operation(p.tree, p.path.get_name(), getter)
.map_err(|ref e| MethodErr::failed(e))?,
);
Ok(())
}
pub fn get_filesystem_devnode(
i: &mut IterAppend,
p: &PropInfo<MTSync<TData>, TData>,
) -> Result<(), MethodErr> {
get_filesystem_property(i, p, |(pool_name, fs_name, fs)| {
Ok(shared::fs_devnode_prop(fs, &pool_name, &fs_name))
})
}
pub fn get_filesystem_name(
i: &mut IterAppend,
p: &PropInfo<MTSync<TData>, TData>,
) -> Result<(), MethodErr> {
get_filesystem_property(i, p, |(_, fs_name, _)| Ok(shared::fs_name_prop(&fs_name)))
}
pub fn get_filesystem_created(
i: &mut IterAppend,
p: &PropInfo<MTSync<TData>, TData>,
) -> Result<(), MethodErr> {
get_filesystem_property(i, p, |(_, _, fs)| Ok(shared::fs_created_prop(fs)))
}