diff options
author | jelemux <jeremias.weber@protonmail.com> | 2020-10-18 22:40:57 +0200 |
---|---|---|
committer | jelemux <jeremias.weber@protonmail.com> | 2020-10-18 22:40:57 +0200 |
commit | 84c2dab4200c37c818d83c95f85445ee00d83bf6 (patch) | |
tree | 134d9ec538306a6626d35e737035e03c8b3a69c5 /src/validation.rs | |
download | wasm-card-84c2dab4200c37c818d83c95f85445ee00d83bf6.tar.gz wasm-card-84c2dab4200c37c818d83c95f85445ee00d83bf6.tar.bz2 |
initial commit
Diffstat (limited to 'src/validation.rs')
-rw-r--r-- | src/validation.rs | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/validation.rs b/src/validation.rs new file mode 100644 index 0000000..715b472 --- /dev/null +++ b/src/validation.rs @@ -0,0 +1,37 @@ + + +pub trait Validation { + fn validate(&self) -> Result<(), ValidationError>; +} + +#[derive(Debug)] +pub struct ValidationError { + messages: Vec<String>, +} + +impl std::fmt::Display for ValidationError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + for msg in &self.messages { + write!(f, "{}\n", msg)?; + } + Ok(()) + } +} + +impl std::error::Error for ValidationError { } + +pub fn add_results(first: Result<(), ValidationError>, second: Result<(), ValidationError>) -> Result<(), ValidationError> { + if first.is_ok() && second.is_ok() { + Ok(()) + } else if first.is_ok() && second.is_err() { + second + } else if first.is_err() && second.is_ok() { + first + } else { + let mut first = first.err().unwrap(); + let mut second = second.err().unwrap(); + first.messages.append(&mut second.messages); + + Err( ValidationError{ messages: first.messages } ) + } +}
\ No newline at end of file |