use crate::core::FileIdResolver;
use crate::types::FileIdType;
use fuser::BackgroundSession;
use std::collections::HashSet;
use std::sync::Arc;
pub struct FuseSession<T: FileIdType> {
pub(crate) session: BackgroundSession,
pub(crate) resolver: Arc<T::Resolver>,
}
impl<T: FileIdType> FuseSession<T> {
pub(crate) fn new(session: BackgroundSession, resolver: Arc<T::Resolver>) -> Self {
Self { session, resolver }
}
pub fn pruner(&self) -> FusePruner<T> {
FusePruner {
resolver: self.resolver.clone(),
}
}
pub fn prune(&self, keep: &HashSet<T>) {
self.resolver.prune(keep);
}
pub fn join(self) {
self.session.join()
}
}
#[derive(Clone)]
pub struct FusePruner<T: FileIdType> {
resolver: Arc<T::Resolver>,
}
impl<T: FileIdType> FusePruner<T> {
pub fn prune(&self, keep: &HashSet<T>) {
self.resolver.prune(keep);
}
}