use crate::not_found;
use cap_std::fs::Dir;
use cap_std::AmbientAuthority;
use std::io;
#[derive(Clone)]
pub struct UserDirs {
inner: directories::UserDirs,
}
impl UserDirs {
pub fn new() -> Option<Self> {
let inner = directories::UserDirs::new()?;
Some(Self { inner })
}
pub fn home_dir(&self, ambient_authority: AmbientAuthority) -> io::Result<Dir> {
Dir::open_ambient_dir(self.inner.home_dir(), ambient_authority)
}
pub fn audio_dir(&self, ambient_authority: AmbientAuthority) -> io::Result<Dir> {
Dir::open_ambient_dir(
self.inner.audio_dir().ok_or_else(not_found)?,
ambient_authority,
)
}
pub fn desktop_dir(&self, ambient_authority: AmbientAuthority) -> io::Result<Dir> {
Dir::open_ambient_dir(
self.inner.desktop_dir().ok_or_else(not_found)?,
ambient_authority,
)
}
pub fn document_dir(&self, ambient_authority: AmbientAuthority) -> io::Result<Dir> {
Dir::open_ambient_dir(
self.inner.document_dir().ok_or_else(not_found)?,
ambient_authority,
)
}
pub fn download_dir(&self, ambient_authority: AmbientAuthority) -> io::Result<Dir> {
Dir::open_ambient_dir(
self.inner.download_dir().ok_or_else(not_found)?,
ambient_authority,
)
}
pub fn font_dir(&self, ambient_authority: AmbientAuthority) -> io::Result<Dir> {
Dir::open_ambient_dir(
self.inner.font_dir().ok_or_else(not_found)?,
ambient_authority,
)
}
pub fn picture_dir(&self, ambient_authority: AmbientAuthority) -> io::Result<Dir> {
Dir::open_ambient_dir(
self.inner.picture_dir().ok_or_else(not_found)?,
ambient_authority,
)
}
pub fn public_dir(&self, ambient_authority: AmbientAuthority) -> io::Result<Dir> {
Dir::open_ambient_dir(
self.inner.public_dir().ok_or_else(not_found)?,
ambient_authority,
)
}
pub fn template_dir(&self, ambient_authority: AmbientAuthority) -> io::Result<Dir> {
Dir::open_ambient_dir(
self.inner.template_dir().ok_or_else(not_found)?,
ambient_authority,
)
}
pub fn video_dir(&self, ambient_authority: AmbientAuthority) -> io::Result<Dir> {
Dir::open_ambient_dir(
self.inner.video_dir().ok_or_else(not_found)?,
ambient_authority,
)
}
}