#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub(crate) enum Level {
Info,
Warning,
Error,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct FileFilter<'a> {
pub name: &'a str,
pub extensions: &'a [&'a str],
}
impl<'a> FileFilter<'a> {
pub fn builder(name: &'a str) -> FileFilterBuilder<'a> {
FileFilterBuilder { name }
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct FileFilterBuilder<'a> {
name: &'a str,
}
impl<'a> FileFilterBuilder<'a> {
pub fn extensions(self, extensions: &'a [&'a str]) -> FileFilter<'a> {
FileFilter {
name: self.name,
extensions,
}
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub(crate) enum Request<'a> {
Text {
title: &'a str,
label: &'a str,
initial: Option<&'a str>,
},
Password {
title: &'a str,
label: &'a str,
},
Choice {
title: &'a str,
label: &'a str,
choices: &'a [&'a str],
current: Option<&'a str>,
},
Choices {
title: &'a str,
label: &'a str,
choices: &'a [&'a str],
current: &'a [&'a str],
},
Color {
title: &'a str,
initial: Option<&'a str>,
},
Message {
title: &'a str,
message: &'a str,
level: Level,
},
Confirm {
title: &'a str,
message: &'a str,
},
OpenFile {
title: &'a str,
start: Option<&'a std::path::Path>,
filters: &'a [FileFilter<'a>],
multiple: bool,
},
SaveFile {
title: &'a str,
start: Option<&'a std::path::Path>,
filters: &'a [FileFilter<'a>],
},
Folder {
title: &'a str,
start: Option<&'a std::path::Path>,
},
}
#[cfg(test)]
mod tests {
use super::FileFilter;
#[test]
fn builder_matches_the_struct_literal() {
assert_eq!(
FileFilter::builder("Images").extensions(&["png", "jpg"]),
FileFilter {
name: "Images",
extensions: &["png", "jpg"]
}
);
}
}