--- a/rust/hg-core/src/lib.rs Tue Jul 09 11:49:49 2019 +0200
+++ b/rust/hg-core/src/lib.rs Tue Jul 09 12:15:09 2019 +0200
@@ -11,7 +11,8 @@
pub use dirstate::{
dirs_multiset::DirsMultiset,
parsers::{pack_dirstate, parse_dirstate, PARENT_SIZE},
- CopyMap, DirsIterable, DirstateEntry, DirstateParents, StateMap,
+ CopyMap, DirsIterable, DirstateEntry, DirstateParents, EntryState,
+ StateMap,
};
mod filepatterns;
pub mod utils;
@@ -62,6 +63,24 @@
Damaged,
}
+impl From<std::io::Error> for DirstateParseError {
+ fn from(e: std::io::Error) -> Self {
+ DirstateParseError::CorruptedEntry(e.to_string())
+ }
+}
+
+impl ToString for DirstateParseError {
+ fn to_string(&self) -> String {
+ use crate::DirstateParseError::*;
+ match self {
+ TooLittleData => "Too little data for dirstate.".to_string(),
+ Overflow => "Overflow in dirstate.".to_string(),
+ CorruptedEntry(e) => format!("Corrupted entry: {:?}.", e),
+ Damaged => "Dirstate appears to be damaged.".to_string(),
+ }
+ }
+}
+
#[derive(Debug, PartialEq)]
pub enum DirstatePackError {
CorruptedEntry(String),
@@ -69,21 +88,33 @@
BadSize(usize, usize),
}
+impl From<std::io::Error> for DirstatePackError {
+ fn from(e: std::io::Error) -> Self {
+ DirstatePackError::CorruptedEntry(e.to_string())
+ }
+}
#[derive(Debug, PartialEq)]
pub enum DirstateMapError {
PathNotFound(Vec<u8>),
EmptyPath,
}
-impl From<std::io::Error> for DirstatePackError {
- fn from(e: std::io::Error) -> Self {
- DirstatePackError::CorruptedEntry(e.to_string())
+pub enum DirstateError {
+ Parse(DirstateParseError),
+ Pack(DirstatePackError),
+ Map(DirstateMapError),
+ IO(std::io::Error),
+}
+
+impl From<DirstateParseError> for DirstateError {
+ fn from(e: DirstateParseError) -> Self {
+ DirstateError::Parse(e)
}
}
-impl From<std::io::Error> for DirstateParseError {
- fn from(e: std::io::Error) -> Self {
- DirstateParseError::CorruptedEntry(e.to_string())
+impl From<DirstatePackError> for DirstateError {
+ fn from(e: DirstatePackError) -> Self {
+ DirstateError::Pack(e)
}
}
@@ -103,3 +134,15 @@
PatternFileError::IO(e)
}
}
+
+impl From<DirstateMapError> for DirstateError {
+ fn from(e: DirstateMapError) -> Self {
+ DirstateError::Map(e)
+ }
+}
+
+impl From<std::io::Error> for DirstateError {
+ fn from(e: std::io::Error) -> Self {
+ DirstateError::IO(e)
+ }
+}