lib

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

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:
Mcrates/events/src/kinds.rs | 71+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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)); + } }