Merge pull request #441 from matthiasbeyer/libimagstore/use-error-infrastructure
Libimagstore/use error infrastructure
This commit is contained in:
commit
80aca436fe
4 changed files with 31 additions and 37 deletions
|
@ -1,21 +1,10 @@
|
||||||
generate_error_imports!();
|
generate_error_module!(
|
||||||
use std::convert::Into;
|
generate_error_types!(HookError, HookErrorKind,
|
||||||
|
HookExecutionError => "Hook exec error",
|
||||||
generate_error_types!(HookError, HookErrorKind,
|
AccessTypeViolation => "Hook access type violation"
|
||||||
HookExecutionError => "Hook exec error",
|
);
|
||||||
AccessTypeViolation => "Hook access type violation"
|
|
||||||
);
|
);
|
||||||
|
|
||||||
pub trait IntoHookError {
|
pub use self::error::HookError;
|
||||||
fn into_hookerror(self) -> HookError;
|
pub use self::error::HookErrorKind;
|
||||||
fn into_hookerror_with_cause(self, cause: Box<Error>) -> HookError;
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Into<HookError> for (HookErrorKind, Box<Error>) {
|
|
||||||
|
|
||||||
fn into(self) -> HookError {
|
|
||||||
HookError::new(self.0, Some(self.1))
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
|
use libimagerror::into::IntoError;
|
||||||
|
|
||||||
use error::{StoreError, StoreErrorKind};
|
use error::{StoreError as SE, StoreErrorKind as SEK};
|
||||||
use std::io::{Seek, SeekFrom};
|
use std::io::{Seek, SeekFrom};
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
use std::fs::{File, OpenOptions, create_dir_all};
|
use std::fs::{File, OpenOptions, create_dir_all};
|
||||||
|
@ -32,21 +33,22 @@ impl LazyFile {
|
||||||
/**
|
/**
|
||||||
* Get the mutable file behind a LazyFile object
|
* Get the mutable file behind a LazyFile object
|
||||||
*/
|
*/
|
||||||
pub fn get_file_mut(&mut self) -> Result<&mut File, StoreError> {
|
pub fn get_file_mut(&mut self) -> Result<&mut File, SE> {
|
||||||
debug!("Getting lazy file: {:?}", self);
|
debug!("Getting lazy file: {:?}", self);
|
||||||
let file = match *self {
|
let file = match *self {
|
||||||
LazyFile::File(ref mut f) => return {
|
LazyFile::File(ref mut f) => return {
|
||||||
// We seek to the beginning of the file since we expect each
|
// We seek to the beginning of the file since we expect each
|
||||||
// access to the file to be in a different context
|
// access to the file to be in a different context
|
||||||
f.seek(SeekFrom::Start(0))
|
f.seek(SeekFrom::Start(0))
|
||||||
.map_err(|e| StoreError::new(StoreErrorKind::FileNotCreated, Some(Box::new(e))))
|
.map_err(Box::new)
|
||||||
|
.map_err(|e| SEK::FileNotCreated.into_error_with_cause(e))
|
||||||
.map(|_| f)
|
.map(|_| f)
|
||||||
},
|
},
|
||||||
LazyFile::Absent(ref p) => {
|
LazyFile::Absent(ref p) => {
|
||||||
try!(open_file(p).map_err(|e| {
|
try!(open_file(p)
|
||||||
StoreError::new(StoreErrorKind::FileNotFound,
|
.map_err(Box::new)
|
||||||
Some(Box::new(e)))
|
.map_err(|e| SEK::FileNotFound.into_error_with_cause(e))
|
||||||
}))
|
)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
*self = LazyFile::File(file);
|
*self = LazyFile::File(file);
|
||||||
|
@ -59,15 +61,15 @@ impl LazyFile {
|
||||||
/**
|
/**
|
||||||
* Create a file out of this LazyFile object
|
* Create a file out of this LazyFile object
|
||||||
*/
|
*/
|
||||||
pub fn create_file(&mut self) -> Result<&mut File, StoreError> {
|
pub fn create_file(&mut self) -> Result<&mut File, SE> {
|
||||||
debug!("Creating lazy file: {:?}", self);
|
debug!("Creating lazy file: {:?}", self);
|
||||||
let file = match *self {
|
let file = match *self {
|
||||||
LazyFile::File(ref mut f) => return Ok(f),
|
LazyFile::File(ref mut f) => return Ok(f),
|
||||||
LazyFile::Absent(ref p) => {
|
LazyFile::Absent(ref p) => {
|
||||||
try!(create_file(p).map_err(|e| {
|
try!(create_file(p)
|
||||||
StoreError::new(StoreErrorKind::FileNotFound,
|
.map_err(Box::new)
|
||||||
Some(Box::new(e)))
|
.map_err(|e| SEK::FileNotFound.into_error_with_cause(e))
|
||||||
}))
|
)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
*self = LazyFile::File(file);
|
*self = LazyFile::File(file);
|
||||||
|
|
|
@ -33,6 +33,8 @@ use hook::accessor::{ MutableHookDataAccessor,
|
||||||
use hook::position::HookPosition;
|
use hook::position::HookPosition;
|
||||||
use hook::Hook;
|
use hook::Hook;
|
||||||
|
|
||||||
|
use libimagerror::into::IntoError;
|
||||||
|
|
||||||
use self::glob_store_iter::*;
|
use self::glob_store_iter::*;
|
||||||
|
|
||||||
/// The Result Type returned by any interaction with the store that could fail
|
/// The Result Type returned by any interaction with the store that could fail
|
||||||
|
@ -739,7 +741,7 @@ impl EntryHeader {
|
||||||
|
|
||||||
let mut parser = Parser::new(s);
|
let mut parser = Parser::new(s);
|
||||||
parser.parse()
|
parser.parse()
|
||||||
.ok_or(ParserError::new(ParserErrorKind::TOMLParserErrors, None))
|
.ok_or(ParserErrorKind::TOMLParserErrors.into())
|
||||||
.and_then(verify_header_consistency)
|
.and_then(verify_header_consistency)
|
||||||
.map(EntryHeader::from_table)
|
.map(EntryHeader::from_table)
|
||||||
}
|
}
|
||||||
|
@ -1151,12 +1153,12 @@ fn build_default_header() -> Value { // BTreeMap<String, Value>
|
||||||
}
|
}
|
||||||
fn verify_header(t: &Table) -> Result<()> {
|
fn verify_header(t: &Table) -> Result<()> {
|
||||||
if !has_main_section(t) {
|
if !has_main_section(t) {
|
||||||
Err(SE::from(ParserError::new(ParserErrorKind::MissingMainSection, None)))
|
Err(SE::from(ParserErrorKind::MissingMainSection.into_error()))
|
||||||
} else if !has_imag_version_in_main_section(t) {
|
} else if !has_imag_version_in_main_section(t) {
|
||||||
Err(SE::from(ParserError::new(ParserErrorKind::MissingVersionInfo, None)))
|
Err(SE::from(ParserErrorKind::MissingVersionInfo.into_error()))
|
||||||
} else if !has_only_tables(t) {
|
} else if !has_only_tables(t) {
|
||||||
debug!("Could not verify that it only has tables in its base table");
|
debug!("Could not verify that it only has tables in its base table");
|
||||||
Err(SE::from(ParserError::new(ParserErrorKind::NonTableInBaseTable, None)))
|
Err(SE::from(ParserErrorKind::NonTableInBaseTable.into_error()))
|
||||||
} else {
|
} else {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -1164,7 +1166,8 @@ fn verify_header(t: &Table) -> Result<()> {
|
||||||
|
|
||||||
fn verify_header_consistency(t: Table) -> EntryResult<Table> {
|
fn verify_header_consistency(t: Table) -> EntryResult<Table> {
|
||||||
verify_header(&t)
|
verify_header(&t)
|
||||||
.map_err(|e| ParserError::new(ParserErrorKind::HeaderInconsistency, Some(Box::new(e))))
|
.map_err(Box::new)
|
||||||
|
.map_err(|e| ParserErrorKind::HeaderInconsistency.into_error_with_cause(e))
|
||||||
.map(|_| t)
|
.map(|_| t)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ use std::fmt::{Debug, Formatter};
|
||||||
use std::fmt::Error as FmtError;
|
use std::fmt::Error as FmtError;
|
||||||
use std::result::Result as RResult;
|
use std::result::Result as RResult;
|
||||||
|
|
||||||
use error::{StoreError, StoreErrorKind};
|
use error::StoreErrorKind as SEK;
|
||||||
use store::Result;
|
use store::Result;
|
||||||
use store::Store;
|
use store::Store;
|
||||||
|
|
||||||
|
@ -88,7 +88,7 @@ pub fn build_entry_path(store: &Store, path_elem: &str) -> Result<PathBuf> {
|
||||||
if path_elem.split('~').last().map_or(false, |v| Version::parse(v).is_err()) {
|
if path_elem.split('~').last().map_or(false, |v| Version::parse(v).is_err()) {
|
||||||
debug!("Version cannot be parsed from {:?}", path_elem);
|
debug!("Version cannot be parsed from {:?}", path_elem);
|
||||||
debug!("Path does not contain version!");
|
debug!("Path does not contain version!");
|
||||||
return Err(StoreError::new(StoreErrorKind::StorePathLacksVersion, None));
|
return Err(SEK::StorePathLacksVersion.into());
|
||||||
}
|
}
|
||||||
debug!("Version checking succeeded");
|
debug!("Version checking succeeded");
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue