Add "checked" variant of set_category()
This commit is contained in:
parent
af4612deef
commit
c3088faa4c
2 changed files with 19 additions and 1 deletions
|
@ -28,6 +28,7 @@ use libimagerror::into::IntoError;
|
|||
use error::CategoryErrorKind as CEK;
|
||||
use error::MapErrInto;
|
||||
use result::Result;
|
||||
use register::CategoryRegister;
|
||||
|
||||
#[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd)]
|
||||
pub struct Category(String);
|
||||
|
@ -49,6 +50,9 @@ impl Into<String> for Category {
|
|||
pub trait EntryCategory {
|
||||
|
||||
fn set_category(&mut self, s: Category) -> Result<()>;
|
||||
|
||||
fn set_category_checked(&mut self, register: &CategoryRegister, s: Category) -> Result<()>;
|
||||
|
||||
fn get_category(&self) -> Result<Option<Category>>;
|
||||
|
||||
fn has_category(&self) -> Result<bool>;
|
||||
|
@ -64,6 +68,18 @@ impl EntryCategory for Entry {
|
|||
.map(|_| ())
|
||||
}
|
||||
|
||||
/// Check whether a category exists before setting it.
|
||||
///
|
||||
/// This function should be used by default over EntryCategory::set_category()!
|
||||
fn set_category_checked(&mut self, register: &CategoryRegister, s: Category) -> Result<()> {
|
||||
register.category_exists(&s.0)
|
||||
.and_then(|bl| if bl {
|
||||
self.set_category(s)
|
||||
} else {
|
||||
Err(CEK::CategoryDoesNotExist.into_error())
|
||||
})
|
||||
}
|
||||
|
||||
fn get_category(&self) -> Result<Option<Category>> {
|
||||
match self.get_header().read(&String::from("category.value")) {
|
||||
Err(res) => match res.kind() {
|
||||
|
|
|
@ -24,7 +24,9 @@ generate_error_module!(
|
|||
StoreIdHandlingError => "StoreId handling error",
|
||||
HeaderReadError => "Header read error",
|
||||
HeaderWriteError => "Header write error",
|
||||
TypeError => "Found wrong type in header"
|
||||
TypeError => "Found wrong type in header",
|
||||
|
||||
CategoryDoesNotExist => "Category does not exist"
|
||||
);
|
||||
);
|
||||
|
||||
|
|
Loading…
Reference in a new issue