From e81d52099370be8ee6b0b9b813df5c81116bd6d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Ml=C3=A1dek?= Date: Sun, 13 Feb 2022 12:28:15 +0100 Subject: [PATCH] fix empty string value handling --- src/database/entry.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/database/entry.rs b/src/database/entry.rs index 6cb9c4f..8fd2832 100644 --- a/src/database/entry.rs +++ b/src/database/entry.rs @@ -151,7 +151,7 @@ impl EntryValue { EntryValue::String(value) => ('S', value.to_owned()), EntryValue::Number(n) => ('N', n.to_string()), EntryValue::Address(address) => ('O', address.to_string()), - EntryValue::Invalid => return Err(anyhow!("Cannot serialize invalid Entity value.")), + EntryValue::Invalid => return Err(anyhow!("Cannot serialize invalid value.")), }; Ok(format!("{}{}", type_char, content)) @@ -175,7 +175,11 @@ impl std::str::FromStr for EntryValue { fn from_str(s: &str) -> Result { if s.len() < 2 { - Ok(EntryValue::Invalid) + if s.starts_with('S') { + Ok(EntryValue::String("".into())) + } else { + Ok(EntryValue::Invalid) + } } else { let (type_char, content) = s.split_at(1); match (type_char, content) { @@ -228,6 +232,11 @@ mod tests { let decoded = encoded.parse::()?; assert_eq!(entry, decoded); + let entry = EntryValue::String("".to_string()); + let encoded = entry.to_string()?; + let decoded = encoded.parse::()?; + assert_eq!(entry, decoded); + Ok(()) } }