Verify that nothing but tables exist in base table
This commit is contained in:
parent
ece70d78a7
commit
6173cff762
2 changed files with 24 additions and 11 deletions
|
@ -130,6 +130,8 @@ pub enum ParserErrorKind {
|
||||||
TOMLParserErrors,
|
TOMLParserErrors,
|
||||||
MissingMainSection,
|
MissingMainSection,
|
||||||
MissingVersionInfo,
|
MissingVersionInfo,
|
||||||
|
NonTableInBaseTable,
|
||||||
|
HeaderInconsistency,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct ParserError {
|
pub struct ParserError {
|
||||||
|
@ -173,6 +175,8 @@ impl Error for ParserError {
|
||||||
ParserErrorKind::TOMLParserErrors => "Several TOML-Parser-Errors",
|
ParserErrorKind::TOMLParserErrors => "Several TOML-Parser-Errors",
|
||||||
ParserErrorKind::MissingMainSection => "Missing main section",
|
ParserErrorKind::MissingMainSection => "Missing main section",
|
||||||
ParserErrorKind::MissingVersionInfo => "Missing version information in main section",
|
ParserErrorKind::MissingVersionInfo => "Missing version information in main section",
|
||||||
|
ParserErrorKind::NonTableInBaseTable => "A non-table was found in the base table",
|
||||||
|
ParserErrorKind::HeaderInconsistency => "The header is inconsistent",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -327,13 +327,7 @@ impl EntryHeader {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn verify(&self) -> Result<()> {
|
pub fn verify(&self) -> Result<()> {
|
||||||
if !has_main_section(&self.toml) {
|
verify_header(&self.toml)
|
||||||
Err(StoreError::from(ParserError::new(ParserErrorKind::MissingMainSection, None)))
|
|
||||||
} else if !has_imag_version_in_main_section(&self.toml) {
|
|
||||||
Err(StoreError::from(ParserError::new(ParserErrorKind::MissingVersionInfo, None)))
|
|
||||||
} else {
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -352,17 +346,32 @@ fn build_default_header() -> BTreeMap<String, Value> {
|
||||||
|
|
||||||
m
|
m
|
||||||
}
|
}
|
||||||
|
fn verify_header(t: &Table) -> Result<()> {
|
||||||
|
if !has_main_section(t) {
|
||||||
|
Err(StoreError::from(ParserError::new(ParserErrorKind::MissingMainSection, None)))
|
||||||
|
} else if !has_imag_version_in_main_section(t) {
|
||||||
|
Err(StoreError::from(ParserError::new(ParserErrorKind::MissingVersionInfo, None)))
|
||||||
|
} else if !has_only_tables(t) {
|
||||||
|
debug!("Could not verify that it only has tables in its base table");
|
||||||
|
Err(StoreError::from(ParserError::new(ParserErrorKind::NonTableInBaseTable, None)))
|
||||||
|
} else {
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn verify_header_consistency(t: Table) -> EntryResult<Table> {
|
fn verify_header_consistency(t: Table) -> EntryResult<Table> {
|
||||||
if !has_main_section(&t) {
|
use std::error::Error;
|
||||||
Err(ParserError::new(ParserErrorKind::MissingMainSection, None))
|
if let Err(e) = verify_header(&t) {
|
||||||
} else if !has_imag_version_in_main_section(&t) {
|
Err(ParserError::new(ParserErrorKind::HeaderInconsistency, None))
|
||||||
Err(ParserError::new(ParserErrorKind::MissingVersionInfo, None))
|
|
||||||
} else {
|
} else {
|
||||||
Ok(t)
|
Ok(t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn has_only_tables(t: &Table) -> bool {
|
||||||
|
t.iter().all(|(_, x)| if let &Value::Table(_) = x { true } else { false })
|
||||||
|
}
|
||||||
|
|
||||||
fn has_main_section(t: &Table) -> bool {
|
fn has_main_section(t: &Table) -> bool {
|
||||||
t.contains_key("imag") &&
|
t.contains_key("imag") &&
|
||||||
match t.get("imag") {
|
match t.get("imag") {
|
||||||
|
|
Loading…
Reference in a new issue