commit 595ada4b744ac27843108c08860eed6ee4df284b
parent 373754006bf850c98c6105870ec00fcad554af7c
Author: triesap <tyson@radroots.org>
Date: Mon, 27 Apr 2026 21:42:31 +0000
events: add active trade kind taxonomy
Diffstat:
1 file changed, 71 insertions(+), 0 deletions(-)
diff --git a/crates/events/src/kinds.rs b/crates/events/src/kinds.rs
@@ -55,6 +55,7 @@ pub const KIND_TRADE_LISTING_VALIDATE_REQ: u32 = 5321;
pub const KIND_TRADE_LISTING_VALIDATE_RES: u32 = 6321;
pub const KIND_TRADE_ORDER_REQUEST: u32 = 3422;
pub const KIND_TRADE_ORDER_RESPONSE: u32 = 3423;
+pub const KIND_TRADE_ORDER_DECISION: u32 = KIND_TRADE_ORDER_RESPONSE;
pub const KIND_TRADE_ORDER_REVISION: u32 = 3424;
pub const KIND_TRADE_ORDER_REVISION_RESPONSE: u32 = 3425;
pub const KIND_TRADE_QUESTION: u32 = 3426;
@@ -122,6 +123,18 @@ pub const TRADE_KINDS: [u32; 15] = [
pub const TRADE_LISTING_KINDS: [u32; 15] = TRADE_KINDS;
+pub const ACTIVE_TRADE_LISTING_KINDS: [u32; 2] = [KIND_LISTING, KIND_LISTING_DRAFT];
+
+pub const ACTIVE_TRADE_PUBLIC_KINDS: [u32; 2] =
+ [KIND_TRADE_ORDER_REQUEST, KIND_TRADE_ORDER_DECISION];
+
+pub const ACTIVE_TRADE_KINDS: [u32; 4] = [
+ KIND_LISTING,
+ KIND_LISTING_DRAFT,
+ KIND_TRADE_ORDER_REQUEST,
+ KIND_TRADE_ORDER_DECISION,
+];
+
pub const KIND_JOB_REQUEST_MIN: u32 = 5000;
pub const KIND_JOB_REQUEST_MAX: u32 = 5999;
pub const KIND_JOB_RESULT_MIN: u32 = 6000;
@@ -174,6 +187,21 @@ pub const fn is_trade_kind(kind: u32) -> bool {
}
#[inline]
+pub const fn is_active_trade_listing_kind(kind: u32) -> bool {
+ matches!(kind, KIND_LISTING | KIND_LISTING_DRAFT)
+}
+
+#[inline]
+pub const fn is_active_trade_public_kind(kind: u32) -> bool {
+ matches!(kind, KIND_TRADE_ORDER_REQUEST | KIND_TRADE_ORDER_DECISION)
+}
+
+#[inline]
+pub const fn is_active_trade_kind(kind: u32) -> bool {
+ is_active_trade_listing_kind(kind) || is_active_trade_public_kind(kind)
+}
+
+#[inline]
pub const fn is_trade_listing_request_kind(kind: u32) -> bool {
matches!(
kind,
@@ -416,6 +444,7 @@ mod kinds_constants_tests {
),
("KIND_TRADE_ORDER_REQUEST", KIND_TRADE_ORDER_REQUEST),
("KIND_TRADE_ORDER_RESPONSE", KIND_TRADE_ORDER_RESPONSE),
+ ("KIND_TRADE_ORDER_DECISION", KIND_TRADE_ORDER_DECISION),
("KIND_TRADE_ORDER_REVISION", KIND_TRADE_ORDER_REVISION),
(
"KIND_TRADE_ORDER_REVISION_RESPONSE",
@@ -690,4 +719,46 @@ mod kinds_constants_tests {
None
);
}
+
+ #[test]
+ fn active_trade_kind_set_contains_only_listing_request_and_decision() {
+ assert_eq!(
+ ACTIVE_TRADE_LISTING_KINDS,
+ [KIND_LISTING, KIND_LISTING_DRAFT]
+ );
+ assert_eq!(
+ ACTIVE_TRADE_PUBLIC_KINDS,
+ [KIND_TRADE_ORDER_REQUEST, KIND_TRADE_ORDER_DECISION]
+ );
+ assert_eq!(
+ ACTIVE_TRADE_KINDS,
+ [
+ KIND_LISTING,
+ KIND_LISTING_DRAFT,
+ KIND_TRADE_ORDER_REQUEST,
+ KIND_TRADE_ORDER_DECISION,
+ ]
+ );
+
+ assert!(is_active_trade_kind(KIND_LISTING));
+ assert!(is_active_trade_kind(KIND_LISTING_DRAFT));
+ assert!(is_active_trade_public_kind(KIND_TRADE_ORDER_REQUEST));
+ assert!(is_active_trade_public_kind(KIND_TRADE_ORDER_DECISION));
+ assert!(!is_active_trade_public_kind(
+ KIND_TRADE_LISTING_VALIDATE_REQ
+ ));
+ assert!(!is_active_trade_public_kind(KIND_TRADE_ORDER_REVISION));
+ assert!(!is_active_trade_public_kind(
+ KIND_TRADE_ORDER_REVISION_RESPONSE
+ ));
+ assert!(!is_active_trade_public_kind(KIND_TRADE_QUESTION));
+ assert!(!is_active_trade_public_kind(KIND_TRADE_ANSWER));
+ assert!(!is_active_trade_public_kind(KIND_TRADE_DISCOUNT_REQUEST));
+ assert!(!is_active_trade_public_kind(KIND_TRADE_DISCOUNT_OFFER));
+ assert!(!is_active_trade_public_kind(KIND_TRADE_DISCOUNT_ACCEPT));
+ assert!(!is_active_trade_public_kind(3431));
+ assert!(!is_active_trade_public_kind(KIND_TRADE_CANCEL));
+ assert!(!is_active_trade_public_kind(KIND_TRADE_FULFILLMENT_UPDATE));
+ assert!(!is_active_trade_public_kind(KIND_TRADE_RECEIPT));
+ }
}