diff --git a/src/pcd.rs b/src/pcd.rs index 1fd7d26..8d915d8 100644 --- a/src/pcd.rs +++ b/src/pcd.rs @@ -290,24 +290,21 @@ pub trait Pcd<'a>: Serialize + Deserialize<'a> { } } - fn is_hex_string(&self) -> bool { - let value = match serde_json::to_value(self) { - Ok(v) => v, - Err(_) => return false - }; + fn is_hex_string(&self, length: Option) -> Result<()> { + let value = serde_json::to_value(self)?; match value { Value::String(s) => { - let vec = Vec::from_hex(&s); - if vec.is_err() { - return false; - } else if vec.unwrap().len() != 32 { - return false; - } else { - return true; + let vec = Vec::from_hex(&s)?; + if let Some(len) = length { + let got_length = vec.len(); + if got_length != len { + return Err(Error::msg(format!("Wrong length: expected {}, got {}", len, got_length))); + } } + Ok(()) } - _ => false + _ => Err(Error::msg("Not a string Value")) } } }