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:
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"),
&[],