lib

Core libraries for Radroots
git clone https://radroots.dev/git/lib.git
Log | Files | Refs | README | LICENSE

commit ea8865e25f664914911eb88b6440e8c7d46d35c8
parent c352b84746b6b7c6ab90e7b92e62d64fb4ea0a3b
Author: triesap <tyson@radroots.org>
Date:   Sat, 13 Jun 2026 13:46:00 -0700

events: parse contract content discriminators as json

Diffstat:
Mcrates/events/src/contract.rs | 21+++++++++------------
1 file changed, 9 insertions(+), 12 deletions(-)

diff --git a/crates/events/src/contract.rs b/crates/events/src/contract.rs @@ -2591,17 +2591,14 @@ fn tag_value<'a>(tags: &'a [Vec<String>], name: &str) -> Option<&'a str> { } fn content_json_string_field_equals(content: &str, field: &str, value: &str) -> bool { - let mut quoted = content.split('"'); - while let Some(token) = quoted.next() { - if token == field { - if let Some(separator) = quoted.next() { - if separator.trim_start().starts_with(':') { - return quoted.next() == Some(value); - } - } - } - } - false + serde_json::from_str::<serde_json::Value>(content) + .ok() + .and_then(|json| { + json.get(field) + .and_then(|field| field.as_str()) + .map(|field| field == value) + }) + .unwrap_or(false) } #[cfg(test)] @@ -2788,7 +2785,7 @@ mod tests { } #[test] - fn supports_content_field_discriminators_without_json_dependency() { + fn supports_content_field_discriminators() { assert!(discriminator_matches( &RadrootsEventDiscriminator::EnvelopeType("order_request"), &[],