Compare key and value.

This commit is contained in:
Tom Alexander 2023-10-02 23:45:31 -04:00
parent 60bec4695b
commit 3d1b2713ed
Signed by: talexander
GPG Key ID: D3A179C9A53C0EDE
3 changed files with 30 additions and 4 deletions

View File

@ -1301,10 +1301,33 @@ fn compare_node_property<'b, 's>(
rust: &'b NodeProperty<'s>, rust: &'b NodeProperty<'s>,
) -> Result<DiffEntry<'b, 's>, Box<dyn std::error::Error>> { ) -> Result<DiffEntry<'b, 's>, Box<dyn std::error::Error>> {
let child_status = Vec::new(); let child_status = Vec::new();
let this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let message = None; let mut message = None;
// TODO: Compare :key :value // Compare key
let key =
get_property_quoted_string(emacs, ":key")?.ok_or("Node properties should have a key.")?;
if key != rust.name {
this_status = DiffStatus::Bad;
message = Some(format!(
"Key mismatch (emacs != rust) {:?} != {:?}",
key, rust.name
));
}
// Compare value
let value = get_property_quoted_string(emacs, ":value")?;
match (value.as_ref(), rust.value) {
(None, None) => {}
(Some(emacs_value), Some(rust_value)) if emacs_value == rust_value => {}
_ => {
this_status = DiffStatus::Bad;
message = Some(format!(
"Value mismatch (emacs != rust) {:?} != {:?}",
value, rust.value
));
}
}
Ok(DiffResult { Ok(DiffResult {
status: this_status, status: this_status,

View File

@ -101,7 +101,7 @@ fn node_property<'b, 'g, 'r, 's>(
context: RefContext<'b, 'g, 'r, 's>, context: RefContext<'b, 'g, 'r, 's>,
input: OrgSource<'s>, input: OrgSource<'s>,
) -> Res<OrgSource<'s>, NodeProperty<'s>> { ) -> Res<OrgSource<'s>, NodeProperty<'s>> {
let (remaining, (_start_of_line, _leading_whitespace, _open_colon, _name, _close_colon)) = let (remaining, (_start_of_line, _leading_whitespace, _open_colon, name, _close_colon)) =
tuple(( tuple((
start_of_line, start_of_line,
space0, space0,
@ -120,6 +120,7 @@ fn node_property<'b, 'g, 'r, 's>(
remaining, remaining,
NodeProperty { NodeProperty {
source: source.into(), source: source.into(),
name: Into::<&str>::into(name),
value: None, value: None,
}, },
)) ))
@ -132,6 +133,7 @@ fn node_property<'b, 'g, 'r, 's>(
remaining, remaining,
NodeProperty { NodeProperty {
source: source.into(), source: source.into(),
name: Into::<&str>::into(name),
value: Some(value.into()), value: Some(value.into()),
}, },
)) ))

View File

@ -94,6 +94,7 @@ pub struct PropertyDrawer<'s> {
#[derive(Debug)] #[derive(Debug)]
pub struct NodeProperty<'s> { pub struct NodeProperty<'s> {
pub source: &'s str, pub source: &'s str,
pub name: &'s str,
pub value: Option<&'s str>, pub value: Option<&'s str>,
} }