From 048d80480e3ad50f1ff16ce04653f5d76041f8cf Mon Sep 17 00:00:00 2001 From: Christoffer SOOP Date: Sat, 28 Dec 2024 14:39:55 +0100 Subject: [PATCH] #9 syntactic sugar for reading card keywords --- src/card.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/card.rs b/src/card.rs index a6d1945..ab3620c 100644 --- a/src/card.rs +++ b/src/card.rs @@ -1,3 +1,5 @@ +use std::{str, string::FromUtf8Error}; + use nom::{ character::complete::{i64, space0}, combinator::map, @@ -19,6 +21,11 @@ impl Card { pub fn new(kw: Keyword, v: Value) -> Self { Self { kw, v } } + /// Return the ASCII trimmed keyword as an owned String. + pub fn keyword(&self) -> Result { + let kw = self.kw.trim_ascii().to_vec(); + String::from_utf8(kw) + } } pub trait CardValue { @@ -89,3 +96,16 @@ impl Value { pub(crate) fn parse_integer(buf: &[u8]) -> IResult<&[u8], Value> { preceded(space0, map(i64, |val| Value::Integer(val)))(buf) } + +#[cfg(test)] +mod tests { + use super::{Card, Value}; + + #[test] + fn trimmed_keyword_string() { + let kw = b"GAIN ".to_owned(); + let v = Value::Float(30.00); + let card = Card { kw, v }; + assert_eq!("GAIN".to_owned(), card.keyword().unwrap()) + } +}