lib

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

kinds.rs (32193B)


      1 pub const KIND_PROFILE: u32 = 0;
      2 pub const KIND_POST: u32 = 1;
      3 pub const KIND_FOLLOW: u32 = 3;
      4 pub const KIND_REPOST: u32 = 6;
      5 pub const KIND_REACTION: u32 = 7;
      6 pub const KIND_SEAL: u32 = 13;
      7 pub const KIND_MESSAGE: u32 = 14;
      8 pub const KIND_MESSAGE_FILE: u32 = 15;
      9 pub const KIND_GENERIC_REPOST: u32 = 16;
     10 pub const KIND_APP_CUSTOM_DATA: u32 = 78;
     11 pub const KIND_FARM_CRDT_CHANGE: u32 = KIND_APP_CUSTOM_DATA;
     12 pub const KIND_GIFT_WRAP: u32 = 1059;
     13 pub const KIND_FILE_METADATA: u32 = 1063;
     14 pub const KIND_FARM_FILE_METADATA: u32 = KIND_FILE_METADATA;
     15 pub const KIND_PUBLIC_FILE_METADATA: u32 = KIND_FILE_METADATA;
     16 pub const KIND_COMMENT: u32 = 1111;
     17 pub const KIND_REPORT: u32 = 1984;
     18 pub const KIND_GROUP_PUT_USER: u32 = 9000;
     19 pub const KIND_GROUP_REMOVE_USER: u32 = 9001;
     20 pub const KIND_GROUP_EDIT_METADATA: u32 = 9002;
     21 pub const KIND_GROUP_DELETE_EVENT: u32 = 9005;
     22 pub const KIND_GROUP_CREATE_GROUP: u32 = 9007;
     23 pub const KIND_GROUP_DELETE_GROUP: u32 = 9008;
     24 pub const KIND_GROUP_CREATE_INVITE: u32 = 9009;
     25 pub const KIND_GROUP_JOIN_REQUEST: u32 = 9021;
     26 pub const KIND_GROUP_LEAVE_REQUEST: u32 = 9022;
     27 pub const KIND_GEOCHAT: u32 = 20000;
     28 pub const KIND_RELAY_AUTH: u32 = 22242;
     29 pub const KIND_HTTP_AUTH: u32 = 27235;
     30 pub const KIND_LIST_MUTE: u32 = 10000;
     31 pub const KIND_LIST_PINNED_NOTES: u32 = 10001;
     32 pub const KIND_LIST_READ_WRITE_RELAYS: u32 = 10002;
     33 pub const KIND_LIST_BOOKMARKS: u32 = 10003;
     34 pub const KIND_LIST_COMMUNITIES: u32 = 10004;
     35 pub const KIND_LIST_PUBLIC_CHATS: u32 = 10005;
     36 pub const KIND_LIST_BLOCKED_RELAYS: u32 = 10006;
     37 pub const KIND_LIST_SEARCH_RELAYS: u32 = 10007;
     38 pub const KIND_LIST_SIMPLE_GROUPS: u32 = 10009;
     39 pub const KIND_LIST_RELAY_FEEDS: u32 = 10012;
     40 pub const KIND_LIST_INTERESTS: u32 = 10015;
     41 pub const KIND_LIST_MEDIA_FOLLOWS: u32 = 10020;
     42 pub const KIND_LIST_EMOJIS: u32 = 10030;
     43 pub const KIND_LIST_DM_RELAYS: u32 = 10050;
     44 pub const KIND_LIST_GOOD_WIKI_AUTHORS: u32 = 10101;
     45 pub const KIND_LIST_GOOD_WIKI_RELAYS: u32 = 10102;
     46 pub const KIND_LIST_SET_FOLLOW: u32 = 30000;
     47 pub const KIND_LIST_SET_GENERIC: u32 = 30001;
     48 pub const KIND_LIST_SET_RELAY: u32 = 30002;
     49 pub const KIND_LIST_SET_BOOKMARK: u32 = 30003;
     50 pub const KIND_LIST_SET_CURATION: u32 = 30004;
     51 pub const KIND_LIST_SET_VIDEO: u32 = 30005;
     52 pub const KIND_LIST_SET_PICTURE: u32 = 30006;
     53 pub const KIND_LIST_SET_KIND_MUTE: u32 = 30007;
     54 pub const KIND_LIST_SET_INTEREST: u32 = 30015;
     55 pub const KIND_LIST_SET_EMOJI: u32 = 30030;
     56 pub const KIND_LIST_SET_RELEASE_ARTIFACT: u32 = 30063;
     57 pub const KIND_LIST_SET_APP_CURATION: u32 = 30267;
     58 pub const KIND_ARTICLE: u32 = 30023;
     59 pub const KIND_CALENDAR_DATE_EVENT: u32 = 31922;
     60 pub const KIND_CALENDAR_TIME_EVENT: u32 = 31923;
     61 pub const KIND_LIST_SET_CALENDAR: u32 = 31924;
     62 pub const KIND_CALENDAR: u32 = KIND_LIST_SET_CALENDAR;
     63 pub const KIND_CALENDAR_EVENT_RSVP: u32 = 31925;
     64 pub const KIND_LIST_SET_STARTER_PACK: u32 = 39089;
     65 pub const KIND_LIST_SET_MEDIA_STARTER_PACK: u32 = 39092;
     66 pub const KIND_FARM: u32 = 30340;
     67 pub const KIND_PLOT: u32 = 30350;
     68 pub const KIND_COOP: u32 = 30360;
     69 pub const KIND_DOCUMENT: u32 = 30361;
     70 pub const KIND_RESOURCE_AREA: u32 = 30370;
     71 pub const KIND_RESOURCE_HARVEST_CAP: u32 = 30371;
     72 pub const KIND_ACCOUNT_CLAIM: u32 = 30380;
     73 pub const KIND_APP_DATA: u32 = 30078;
     74 pub const KIND_FARM_WORKSPACE_MANIFEST: u32 = KIND_APP_DATA;
     75 pub const KIND_LISTING: u32 = 30402;
     76 pub const KIND_LISTING_DRAFT: u32 = 30403;
     77 pub const KIND_APPLICATION_HANDLER: u32 = 31990;
     78 pub const KIND_GROUP_METADATA: u32 = 39000;
     79 pub const KIND_GROUP_ADMINS: u32 = 39001;
     80 pub const KIND_GROUP_MEMBERS: u32 = 39002;
     81 pub const KIND_GROUP_ROLES: u32 = 39003;
     82 
     83 pub const KIND_TRADE_LISTING_VALIDATION_REQUEST: u32 = 5321;
     84 pub const KIND_TRADE_LISTING_VALIDATION_RESULT: u32 = 6321;
     85 pub const KIND_TRADE_TRANSITION_PROOF_REQUEST: u32 = 5322;
     86 pub const KIND_TRADE_TRANSITION_PROOF_RESULT: u32 = 6322;
     87 pub const KIND_ORDER_REQUEST: u32 = 3422;
     88 pub const KIND_ORDER_DECISION: u32 = 3423;
     89 pub const KIND_ORDER_REVISION_PROPOSAL: u32 = 3424;
     90 pub const KIND_ORDER_REVISION_DECISION: u32 = 3425;
     91 pub const KIND_ORDER_CANCELLATION: u32 = 3432;
     92 pub const KIND_TRADE_QUESTION: u32 = 3426;
     93 pub const KIND_TRADE_ANSWER: u32 = 3427;
     94 pub const KIND_TRADE_DISCOUNT_REQUEST: u32 = 3428;
     95 pub const KIND_TRADE_DISCOUNT_OFFER: u32 = 3429;
     96 pub const KIND_TRADE_DISCOUNT_ACCEPT: u32 = 3430;
     97 pub const KIND_TRADE_FORBIDDEN_3431: u32 = 3431;
     98 pub const KIND_TRADE_FULFILLMENT_UPDATE: u32 = 3433;
     99 pub const KIND_TRADE_RECEIPT: u32 = 3434;
    100 pub const KIND_TRADE_VALIDATION_RECEIPT: u32 = 3440;
    101 
    102 pub const KIND_TRADE_LISTING_VALIDATE_REQ: u32 = KIND_TRADE_LISTING_VALIDATION_REQUEST;
    103 pub const KIND_TRADE_LISTING_VALIDATE_RES: u32 = KIND_TRADE_LISTING_VALIDATION_RESULT;
    104 pub const KIND_WORKER_TRADE_TRANSITION_PROOF_REQ: u32 = KIND_TRADE_TRANSITION_PROOF_REQUEST;
    105 pub const KIND_WORKER_TRADE_TRANSITION_PROOF_RES: u32 = KIND_TRADE_TRANSITION_PROOF_RESULT;
    106 
    107 pub const LISTING_EVENT_KINDS: [u32; 2] = [KIND_LISTING, KIND_LISTING_DRAFT];
    108 
    109 pub const ORDER_EVENT_KINDS: [u32; 5] = [
    110     KIND_ORDER_REQUEST,
    111     KIND_ORDER_DECISION,
    112     KIND_ORDER_REVISION_PROPOSAL,
    113     KIND_ORDER_REVISION_DECISION,
    114     KIND_ORDER_CANCELLATION,
    115 ];
    116 
    117 pub const TRADE_VALIDATION_SERVICE_EVENT_KINDS: [u32; 4] = [
    118     KIND_TRADE_LISTING_VALIDATION_REQUEST,
    119     KIND_TRADE_LISTING_VALIDATION_RESULT,
    120     KIND_TRADE_TRANSITION_PROOF_REQUEST,
    121     KIND_TRADE_TRANSITION_PROOF_RESULT,
    122 ];
    123 
    124 pub const TRADE_VALIDATION_EVENT_KINDS: [u32; 5] = [
    125     KIND_TRADE_LISTING_VALIDATION_REQUEST,
    126     KIND_TRADE_LISTING_VALIDATION_RESULT,
    127     KIND_TRADE_TRANSITION_PROOF_REQUEST,
    128     KIND_TRADE_TRANSITION_PROOF_RESULT,
    129     KIND_TRADE_VALIDATION_RECEIPT,
    130 ];
    131 
    132 pub const COMMERCIAL_EVENT_KINDS: [u32; 12] = [
    133     KIND_LISTING,
    134     KIND_LISTING_DRAFT,
    135     KIND_ORDER_REQUEST,
    136     KIND_ORDER_DECISION,
    137     KIND_ORDER_REVISION_PROPOSAL,
    138     KIND_ORDER_REVISION_DECISION,
    139     KIND_ORDER_CANCELLATION,
    140     KIND_TRADE_LISTING_VALIDATION_REQUEST,
    141     KIND_TRADE_LISTING_VALIDATION_RESULT,
    142     KIND_TRADE_TRANSITION_PROOF_REQUEST,
    143     KIND_TRADE_TRANSITION_PROOF_RESULT,
    144     KIND_TRADE_VALIDATION_RECEIPT,
    145 ];
    146 
    147 pub const KIND_JOB_REQUEST_MIN: u32 = 5000;
    148 pub const KIND_JOB_REQUEST_MAX: u32 = 5999;
    149 pub const KIND_JOB_RESULT_MIN: u32 = 6000;
    150 pub const KIND_JOB_RESULT_MAX: u32 = 6999;
    151 pub const KIND_JOB_FEEDBACK: u32 = 7000;
    152 
    153 pub const HOME_FEED_CANDIDATE_KINDS: [u32; 9] = [
    154     KIND_POST,
    155     KIND_REPOST,
    156     KIND_GENERIC_REPOST,
    157     KIND_ARTICLE,
    158     KIND_LISTING,
    159     KIND_CALENDAR_DATE_EVENT,
    160     KIND_CALENDAR_TIME_EVENT,
    161     KIND_FARM,
    162     KIND_PUBLIC_FILE_METADATA,
    163 ];
    164 
    165 pub const EVENTS_CANDIDATE_KINDS: [u32; 4] = [
    166     KIND_CALENDAR_DATE_EVENT,
    167     KIND_CALENDAR_TIME_EVENT,
    168     KIND_CALENDAR,
    169     KIND_CALENDAR_EVENT_RSVP,
    170 ];
    171 
    172 pub const MARKET_CANDIDATE_KINDS: [u32; 3] = [KIND_LISTING, KIND_FARM, KIND_PUBLIC_FILE_METADATA];
    173 
    174 pub const MAP_CANDIDATE_KINDS: [u32; 7] = [
    175     KIND_FARM,
    176     KIND_LISTING,
    177     KIND_CALENDAR_DATE_EVENT,
    178     KIND_CALENDAR_TIME_EVENT,
    179     KIND_POST,
    180     KIND_ARTICLE,
    181     KIND_PUBLIC_FILE_METADATA,
    182 ];
    183 
    184 pub const PROFILE_PUBLIC_CONTENT_KINDS: [u32; 8] = [
    185     KIND_POST,
    186     KIND_REPOST,
    187     KIND_GENERIC_REPOST,
    188     KIND_ARTICLE,
    189     KIND_LISTING,
    190     KIND_CALENDAR_DATE_EVENT,
    191     KIND_CALENDAR_TIME_EVENT,
    192     KIND_PUBLIC_FILE_METADATA,
    193 ];
    194 
    195 pub const MODERATION_ADMIN_CANDIDATE_KINDS: [u32; 1] = [KIND_REPORT];
    196 
    197 pub const DRAFT_OWNER_CANDIDATE_KINDS: [u32; 1] = [KIND_LISTING_DRAFT];
    198 
    199 pub const NIP29_GROUP_KINDS: [u32; 13] = [
    200     KIND_GROUP_METADATA,
    201     KIND_GROUP_ADMINS,
    202     KIND_GROUP_MEMBERS,
    203     KIND_GROUP_ROLES,
    204     KIND_GROUP_PUT_USER,
    205     KIND_GROUP_REMOVE_USER,
    206     KIND_GROUP_EDIT_METADATA,
    207     KIND_GROUP_DELETE_EVENT,
    208     KIND_GROUP_CREATE_GROUP,
    209     KIND_GROUP_DELETE_GROUP,
    210     KIND_GROUP_CREATE_INVITE,
    211     KIND_GROUP_JOIN_REQUEST,
    212     KIND_GROUP_LEAVE_REQUEST,
    213 ];
    214 
    215 pub const PRIVATE_FARM_OPS_KINDS: [u32; 16] = [
    216     KIND_FARM_WORKSPACE_MANIFEST,
    217     KIND_FARM_CRDT_CHANGE,
    218     KIND_FARM_FILE_METADATA,
    219     KIND_GROUP_METADATA,
    220     KIND_GROUP_ADMINS,
    221     KIND_GROUP_MEMBERS,
    222     KIND_GROUP_ROLES,
    223     KIND_GROUP_PUT_USER,
    224     KIND_GROUP_REMOVE_USER,
    225     KIND_GROUP_EDIT_METADATA,
    226     KIND_GROUP_DELETE_EVENT,
    227     KIND_GROUP_CREATE_GROUP,
    228     KIND_GROUP_DELETE_GROUP,
    229     KIND_GROUP_CREATE_INVITE,
    230     KIND_GROUP_JOIN_REQUEST,
    231     KIND_GROUP_LEAVE_REQUEST,
    232 ];
    233 
    234 pub const PUBLIC_SOCIAL_KINDS: [u32; 11] = [
    235     KIND_POST,
    236     KIND_REPOST,
    237     KIND_REACTION,
    238     KIND_GENERIC_REPOST,
    239     KIND_PUBLIC_FILE_METADATA,
    240     KIND_COMMENT,
    241     KIND_ARTICLE,
    242     KIND_CALENDAR_DATE_EVENT,
    243     KIND_CALENDAR_TIME_EVENT,
    244     KIND_CALENDAR,
    245     KIND_CALENDAR_EVENT_RSVP,
    246 ];
    247 
    248 pub const UNAMBIGUOUS_PUBLIC_SOCIAL_KINDS: [u32; 10] = [
    249     KIND_POST,
    250     KIND_REPOST,
    251     KIND_REACTION,
    252     KIND_GENERIC_REPOST,
    253     KIND_COMMENT,
    254     KIND_ARTICLE,
    255     KIND_CALENDAR_DATE_EVENT,
    256     KIND_CALENDAR_TIME_EVENT,
    257     KIND_CALENDAR,
    258     KIND_CALENDAR_EVENT_RSVP,
    259 ];
    260 
    261 pub const MVP_SOCIAL_KINDS: [u32; 5] = [
    262     KIND_POST,
    263     KIND_PUBLIC_FILE_METADATA,
    264     KIND_ARTICLE,
    265     KIND_CALENDAR_DATE_EVENT,
    266     KIND_CALENDAR_TIME_EVENT,
    267 ];
    268 
    269 pub const PRODUCTION_SOCIAL_KINDS: [u32; 4] = [
    270     KIND_REPOST,
    271     KIND_GENERIC_REPOST,
    272     KIND_CALENDAR,
    273     KIND_CALENDAR_EVENT_RSVP,
    274 ];
    275 
    276 #[inline]
    277 pub const fn is_listing_kind(kind: u32) -> bool {
    278     matches!(kind, KIND_LISTING | KIND_LISTING_DRAFT)
    279 }
    280 
    281 #[inline]
    282 pub const fn is_listing_event_kind(kind: u32) -> bool {
    283     is_listing_kind(kind)
    284 }
    285 
    286 #[inline]
    287 pub const fn is_public_file_metadata_kind(kind: u32) -> bool {
    288     kind == KIND_PUBLIC_FILE_METADATA
    289 }
    290 
    291 #[inline]
    292 pub const fn is_ambiguous_public_social_kind(kind: u32) -> bool {
    293     kind == KIND_PUBLIC_FILE_METADATA
    294 }
    295 
    296 #[inline]
    297 pub const fn is_unambiguous_public_social_kind(kind: u32) -> bool {
    298     matches!(
    299         kind,
    300         KIND_POST
    301             | KIND_REPOST
    302             | KIND_REACTION
    303             | KIND_GENERIC_REPOST
    304             | KIND_COMMENT
    305             | KIND_ARTICLE
    306             | KIND_CALENDAR_DATE_EVENT
    307             | KIND_CALENDAR_TIME_EVENT
    308             | KIND_CALENDAR
    309             | KIND_CALENDAR_EVENT_RSVP
    310     )
    311 }
    312 
    313 #[inline]
    314 pub const fn is_public_social_kind(kind: u32) -> bool {
    315     is_unambiguous_public_social_kind(kind) || is_ambiguous_public_social_kind(kind)
    316 }
    317 
    318 #[inline]
    319 pub const fn is_mvp_social_kind(kind: u32) -> bool {
    320     matches!(
    321         kind,
    322         KIND_POST
    323             | KIND_PUBLIC_FILE_METADATA
    324             | KIND_ARTICLE
    325             | KIND_CALENDAR_DATE_EVENT
    326             | KIND_CALENDAR_TIME_EVENT
    327     )
    328 }
    329 
    330 #[inline]
    331 pub const fn is_production_social_kind(kind: u32) -> bool {
    332     matches!(
    333         kind,
    334         KIND_REPOST | KIND_GENERIC_REPOST | KIND_CALENDAR | KIND_CALENDAR_EVENT_RSVP
    335     )
    336 }
    337 
    338 #[inline]
    339 pub const fn is_home_feed_candidate_kind(kind: u32) -> bool {
    340     matches!(
    341         kind,
    342         KIND_POST
    343             | KIND_REPOST
    344             | KIND_GENERIC_REPOST
    345             | KIND_ARTICLE
    346             | KIND_LISTING
    347             | KIND_CALENDAR_DATE_EVENT
    348             | KIND_CALENDAR_TIME_EVENT
    349             | KIND_FARM
    350             | KIND_PUBLIC_FILE_METADATA
    351     )
    352 }
    353 
    354 #[inline]
    355 pub const fn is_events_candidate_kind(kind: u32) -> bool {
    356     matches!(
    357         kind,
    358         KIND_CALENDAR_DATE_EVENT
    359             | KIND_CALENDAR_TIME_EVENT
    360             | KIND_CALENDAR
    361             | KIND_CALENDAR_EVENT_RSVP
    362     )
    363 }
    364 
    365 #[inline]
    366 pub const fn is_market_candidate_kind(kind: u32) -> bool {
    367     matches!(kind, KIND_LISTING | KIND_FARM | KIND_PUBLIC_FILE_METADATA)
    368 }
    369 
    370 #[inline]
    371 pub const fn is_map_candidate_kind(kind: u32) -> bool {
    372     matches!(
    373         kind,
    374         KIND_FARM
    375             | KIND_LISTING
    376             | KIND_CALENDAR_DATE_EVENT
    377             | KIND_CALENDAR_TIME_EVENT
    378             | KIND_POST
    379             | KIND_ARTICLE
    380             | KIND_PUBLIC_FILE_METADATA
    381     )
    382 }
    383 
    384 #[inline]
    385 pub const fn is_profile_public_content_kind(kind: u32) -> bool {
    386     matches!(
    387         kind,
    388         KIND_POST
    389             | KIND_REPOST
    390             | KIND_GENERIC_REPOST
    391             | KIND_ARTICLE
    392             | KIND_LISTING
    393             | KIND_CALENDAR_DATE_EVENT
    394             | KIND_CALENDAR_TIME_EVENT
    395             | KIND_PUBLIC_FILE_METADATA
    396     )
    397 }
    398 
    399 #[inline]
    400 pub const fn is_moderation_admin_candidate_kind(kind: u32) -> bool {
    401     kind == KIND_REPORT
    402 }
    403 
    404 #[inline]
    405 pub const fn is_draft_owner_candidate_kind(kind: u32) -> bool {
    406     kind == KIND_LISTING_DRAFT
    407 }
    408 
    409 #[inline]
    410 pub const fn is_nip29_group_kind(kind: u32) -> bool {
    411     matches!(
    412         kind,
    413         KIND_GROUP_METADATA
    414             | KIND_GROUP_ADMINS
    415             | KIND_GROUP_MEMBERS
    416             | KIND_GROUP_ROLES
    417             | KIND_GROUP_PUT_USER
    418             | KIND_GROUP_REMOVE_USER
    419             | KIND_GROUP_EDIT_METADATA
    420             | KIND_GROUP_DELETE_EVENT
    421             | KIND_GROUP_CREATE_GROUP
    422             | KIND_GROUP_DELETE_GROUP
    423             | KIND_GROUP_CREATE_INVITE
    424             | KIND_GROUP_JOIN_REQUEST
    425             | KIND_GROUP_LEAVE_REQUEST
    426     )
    427 }
    428 
    429 #[inline]
    430 pub const fn is_private_farm_ops_kind(kind: u32) -> bool {
    431     kind == KIND_FARM_WORKSPACE_MANIFEST
    432         || kind == KIND_FARM_CRDT_CHANGE
    433         || kind == KIND_FARM_FILE_METADATA
    434         || is_nip29_group_kind(kind)
    435 }
    436 
    437 #[inline]
    438 pub const fn is_trade_validation_service_request_kind(kind: u32) -> bool {
    439     matches!(
    440         kind,
    441         KIND_TRADE_LISTING_VALIDATION_REQUEST | KIND_TRADE_TRANSITION_PROOF_REQUEST
    442     )
    443 }
    444 
    445 #[inline]
    446 pub const fn is_trade_validation_service_result_kind(kind: u32) -> bool {
    447     matches!(
    448         kind,
    449         KIND_TRADE_LISTING_VALIDATION_RESULT | KIND_TRADE_TRANSITION_PROOF_RESULT
    450     )
    451 }
    452 
    453 #[inline]
    454 pub const fn is_trade_validation_service_event_kind(kind: u32) -> bool {
    455     is_trade_validation_service_request_kind(kind) || is_trade_validation_service_result_kind(kind)
    456 }
    457 
    458 #[inline]
    459 pub const fn is_order_event_kind(kind: u32) -> bool {
    460     matches!(
    461         kind,
    462         KIND_ORDER_REQUEST
    463             | KIND_ORDER_DECISION
    464             | KIND_ORDER_REVISION_PROPOSAL
    465             | KIND_ORDER_REVISION_DECISION
    466             | KIND_ORDER_CANCELLATION
    467     )
    468 }
    469 
    470 #[inline]
    471 pub const fn is_trade_validation_receipt_kind(kind: u32) -> bool {
    472     kind == KIND_TRADE_VALIDATION_RECEIPT
    473 }
    474 
    475 #[inline]
    476 pub const fn is_trade_validation_event_kind(kind: u32) -> bool {
    477     is_trade_validation_service_event_kind(kind) || is_trade_validation_receipt_kind(kind)
    478 }
    479 
    480 #[inline]
    481 pub const fn is_commercial_event_kind(kind: u32) -> bool {
    482     is_listing_event_kind(kind) || is_order_event_kind(kind) || is_trade_validation_event_kind(kind)
    483 }
    484 
    485 #[inline]
    486 pub const fn trade_validation_service_result_kind_for_request(kind: u32) -> Option<u32> {
    487     match kind {
    488         KIND_TRADE_LISTING_VALIDATION_REQUEST => Some(KIND_TRADE_LISTING_VALIDATION_RESULT),
    489         KIND_TRADE_TRANSITION_PROOF_REQUEST => Some(KIND_TRADE_TRANSITION_PROOF_RESULT),
    490         _ => None,
    491     }
    492 }
    493 
    494 #[inline]
    495 pub const fn trade_validation_service_request_kind_for_result(kind: u32) -> Option<u32> {
    496     match kind {
    497         KIND_TRADE_LISTING_VALIDATION_RESULT => Some(KIND_TRADE_LISTING_VALIDATION_REQUEST),
    498         KIND_TRADE_TRANSITION_PROOF_RESULT => Some(KIND_TRADE_TRANSITION_PROOF_REQUEST),
    499         _ => None,
    500     }
    501 }
    502 
    503 #[inline]
    504 pub const fn is_nip51_standard_list_kind(kind: u32) -> bool {
    505     matches!(
    506         kind,
    507         KIND_LIST_MUTE
    508             | KIND_LIST_PINNED_NOTES
    509             | KIND_LIST_READ_WRITE_RELAYS
    510             | KIND_LIST_BOOKMARKS
    511             | KIND_LIST_COMMUNITIES
    512             | KIND_LIST_PUBLIC_CHATS
    513             | KIND_LIST_BLOCKED_RELAYS
    514             | KIND_LIST_SEARCH_RELAYS
    515             | KIND_LIST_SIMPLE_GROUPS
    516             | KIND_LIST_RELAY_FEEDS
    517             | KIND_LIST_INTERESTS
    518             | KIND_LIST_MEDIA_FOLLOWS
    519             | KIND_LIST_EMOJIS
    520             | KIND_LIST_DM_RELAYS
    521             | KIND_LIST_GOOD_WIKI_AUTHORS
    522             | KIND_LIST_GOOD_WIKI_RELAYS
    523     )
    524 }
    525 #[inline]
    526 pub const fn is_nip51_list_set_kind(kind: u32) -> bool {
    527     matches!(
    528         kind,
    529         KIND_LIST_SET_FOLLOW
    530             | KIND_LIST_SET_GENERIC
    531             | KIND_LIST_SET_RELAY
    532             | KIND_LIST_SET_BOOKMARK
    533             | KIND_LIST_SET_CURATION
    534             | KIND_LIST_SET_VIDEO
    535             | KIND_LIST_SET_PICTURE
    536             | KIND_LIST_SET_KIND_MUTE
    537             | KIND_LIST_SET_INTEREST
    538             | KIND_LIST_SET_EMOJI
    539             | KIND_LIST_SET_RELEASE_ARTIFACT
    540             | KIND_LIST_SET_APP_CURATION
    541             | KIND_LIST_SET_CALENDAR
    542             | KIND_LIST_SET_STARTER_PACK
    543             | KIND_LIST_SET_MEDIA_STARTER_PACK
    544     )
    545 }
    546 
    547 #[inline]
    548 pub const fn is_request_kind(kind: u32) -> bool {
    549     kind >= KIND_JOB_REQUEST_MIN && kind <= KIND_JOB_REQUEST_MAX
    550 }
    551 #[inline]
    552 pub const fn is_result_kind(kind: u32) -> bool {
    553     kind >= KIND_JOB_RESULT_MIN && kind <= KIND_JOB_RESULT_MAX
    554 }
    555 #[inline]
    556 pub const fn result_kind_for_request_kind(kind: u32) -> Option<u32> {
    557     if is_request_kind(kind) {
    558         Some(kind + 1000)
    559     } else {
    560         None
    561     }
    562 }
    563 #[inline]
    564 pub const fn request_kind_for_result_kind(kind: u32) -> Option<u32> {
    565     if is_result_kind(kind) {
    566         Some(kind - 1000)
    567     } else {
    568         None
    569     }
    570 }
    571 
    572 #[cfg(test)]
    573 mod tests {
    574     use super::*;
    575 
    576     #[test]
    577     fn classifies_standard_list_kinds() {
    578         assert!(is_nip51_standard_list_kind(KIND_LIST_MUTE));
    579         assert!(is_nip51_standard_list_kind(KIND_LIST_GOOD_WIKI_RELAYS));
    580         assert!(!is_nip51_standard_list_kind(KIND_PROFILE));
    581     }
    582 
    583     #[test]
    584     fn classifies_list_set_kinds() {
    585         assert!(is_nip51_list_set_kind(KIND_LIST_SET_FOLLOW));
    586         assert!(is_nip51_list_set_kind(KIND_LIST_SET_MEDIA_STARTER_PACK));
    587         assert!(!is_nip51_list_set_kind(KIND_LIST_MUTE));
    588     }
    589 
    590     #[test]
    591     fn maps_job_request_and_result_kinds() {
    592         assert!(is_request_kind(KIND_JOB_REQUEST_MIN));
    593         assert!(is_request_kind(KIND_JOB_REQUEST_MAX));
    594         assert!(!is_request_kind(KIND_JOB_REQUEST_MIN - 1));
    595         assert!(!is_request_kind(KIND_JOB_REQUEST_MAX + 1));
    596 
    597         assert!(is_result_kind(KIND_JOB_RESULT_MIN));
    598         assert!(is_result_kind(KIND_JOB_RESULT_MAX));
    599         assert!(!is_result_kind(KIND_JOB_RESULT_MIN - 1));
    600         assert!(!is_result_kind(KIND_JOB_RESULT_MAX + 1));
    601 
    602         assert_eq!(
    603             result_kind_for_request_kind(KIND_JOB_REQUEST_MIN),
    604             Some(KIND_JOB_RESULT_MIN)
    605         );
    606         assert_eq!(result_kind_for_request_kind(KIND_JOB_RESULT_MIN), None);
    607         assert_eq!(
    608             request_kind_for_result_kind(KIND_JOB_RESULT_MIN),
    609             Some(KIND_JOB_REQUEST_MIN)
    610         );
    611         assert_eq!(request_kind_for_result_kind(KIND_JOB_REQUEST_MIN), None);
    612     }
    613 
    614     #[test]
    615     fn exposes_field_event_kind_aliases() {
    616         assert_eq!(KIND_APP_CUSTOM_DATA, 78);
    617         assert_eq!(KIND_FARM_CRDT_CHANGE, KIND_APP_CUSTOM_DATA);
    618         assert_eq!(KIND_FILE_METADATA, 1063);
    619         assert_eq!(KIND_FARM_FILE_METADATA, KIND_FILE_METADATA);
    620         assert_eq!(KIND_PUBLIC_FILE_METADATA, KIND_FILE_METADATA);
    621         assert_eq!(KIND_FARM_WORKSPACE_MANIFEST, KIND_APP_DATA);
    622         assert_eq!(KIND_RELAY_AUTH, 22242);
    623         assert_eq!(KIND_HTTP_AUTH, 27235);
    624     }
    625 
    626     #[test]
    627     fn exposes_social_event_kind_constants() {
    628         assert_eq!(KIND_REPOST, 6);
    629         assert_eq!(KIND_GENERIC_REPOST, 16);
    630         assert_eq!(KIND_REPORT, 1984);
    631         assert_eq!(KIND_ARTICLE, 30023);
    632         assert_eq!(KIND_CALENDAR_DATE_EVENT, 31922);
    633         assert_eq!(KIND_CALENDAR_TIME_EVENT, 31923);
    634         assert_eq!(KIND_CALENDAR, KIND_LIST_SET_CALENDAR);
    635         assert_eq!(KIND_CALENDAR_EVENT_RSVP, 31925);
    636     }
    637 
    638     #[test]
    639     fn classifies_public_social_kinds() {
    640         assert_eq!(PUBLIC_SOCIAL_KINDS.len(), 11);
    641         assert_eq!(UNAMBIGUOUS_PUBLIC_SOCIAL_KINDS.len(), 10);
    642         assert_eq!(MVP_SOCIAL_KINDS.len(), 5);
    643         assert_eq!(PRODUCTION_SOCIAL_KINDS.len(), 4);
    644 
    645         assert!(is_public_social_kind(KIND_POST));
    646         assert!(is_public_social_kind(KIND_PUBLIC_FILE_METADATA));
    647         assert!(is_public_file_metadata_kind(KIND_PUBLIC_FILE_METADATA));
    648         assert!(!is_public_file_metadata_kind(KIND_POST));
    649         assert!(is_public_social_kind(KIND_COMMENT));
    650         assert!(is_public_social_kind(KIND_REACTION));
    651         assert!(is_public_social_kind(KIND_ARTICLE));
    652         assert!(is_public_social_kind(KIND_CALENDAR_DATE_EVENT));
    653         assert!(is_public_social_kind(KIND_CALENDAR_TIME_EVENT));
    654         assert!(is_public_social_kind(KIND_REPOST));
    655         assert!(is_public_social_kind(KIND_GENERIC_REPOST));
    656         assert!(is_public_social_kind(KIND_CALENDAR));
    657         assert!(is_public_social_kind(KIND_CALENDAR_EVENT_RSVP));
    658         assert!(!is_public_social_kind(KIND_REPORT));
    659         assert!(!is_public_social_kind(KIND_LISTING));
    660         assert!(!is_public_social_kind(KIND_LISTING_DRAFT));
    661         assert!(!is_public_social_kind(KIND_LIST_READ_WRITE_RELAYS));
    662         assert!(!is_public_social_kind(KIND_FARM_CRDT_CHANGE));
    663         assert!(!is_public_social_kind(KIND_FARM_WORKSPACE_MANIFEST));
    664 
    665         assert!(is_mvp_social_kind(KIND_ARTICLE));
    666         assert!(!is_mvp_social_kind(KIND_REPORT));
    667         assert!(!is_production_social_kind(KIND_REPORT));
    668         assert!(!is_production_social_kind(KIND_ARTICLE));
    669         assert!(is_ambiguous_public_social_kind(KIND_PUBLIC_FILE_METADATA));
    670         assert!(!is_unambiguous_public_social_kind(
    671             KIND_PUBLIC_FILE_METADATA
    672         ));
    673         assert!(is_unambiguous_public_social_kind(KIND_ARTICLE));
    674     }
    675 
    676     #[test]
    677     fn classifies_product_surface_candidate_kinds() {
    678         assert_eq!(HOME_FEED_CANDIDATE_KINDS.len(), 9);
    679         assert_eq!(EVENTS_CANDIDATE_KINDS.len(), 4);
    680         assert_eq!(MARKET_CANDIDATE_KINDS.len(), 3);
    681         assert_eq!(MAP_CANDIDATE_KINDS.len(), 7);
    682         assert_eq!(PROFILE_PUBLIC_CONTENT_KINDS.len(), 8);
    683         assert_eq!(MODERATION_ADMIN_CANDIDATE_KINDS.len(), 1);
    684         assert_eq!(DRAFT_OWNER_CANDIDATE_KINDS.len(), 1);
    685         assert_eq!(NIP29_GROUP_KINDS.len(), 13);
    686         assert_eq!(PRIVATE_FARM_OPS_KINDS.len(), 16);
    687 
    688         assert!(is_home_feed_candidate_kind(KIND_POST));
    689         assert!(is_home_feed_candidate_kind(KIND_REPOST));
    690         assert!(is_home_feed_candidate_kind(KIND_GENERIC_REPOST));
    691         assert!(is_home_feed_candidate_kind(KIND_ARTICLE));
    692         assert!(is_home_feed_candidate_kind(KIND_LISTING));
    693         assert!(is_home_feed_candidate_kind(KIND_CALENDAR_DATE_EVENT));
    694         assert!(is_home_feed_candidate_kind(KIND_CALENDAR_TIME_EVENT));
    695         assert!(is_home_feed_candidate_kind(KIND_FARM));
    696         assert!(is_home_feed_candidate_kind(KIND_PUBLIC_FILE_METADATA));
    697         assert!(!is_home_feed_candidate_kind(KIND_LISTING_DRAFT));
    698         assert!(!is_home_feed_candidate_kind(KIND_REPORT));
    699         assert!(!is_home_feed_candidate_kind(KIND_FARM_CRDT_CHANGE));
    700         assert!(!is_home_feed_candidate_kind(KIND_RELAY_AUTH));
    701         assert!(!is_home_feed_candidate_kind(KIND_HTTP_AUTH));
    702 
    703         assert!(is_events_candidate_kind(KIND_CALENDAR_DATE_EVENT));
    704         assert!(is_events_candidate_kind(KIND_CALENDAR_TIME_EVENT));
    705         assert!(is_events_candidate_kind(KIND_CALENDAR));
    706         assert!(is_events_candidate_kind(KIND_CALENDAR_EVENT_RSVP));
    707         assert!(!is_events_candidate_kind(KIND_POST));
    708         assert!(!is_events_candidate_kind(KIND_FARM_CRDT_CHANGE));
    709 
    710         assert!(is_market_candidate_kind(KIND_LISTING));
    711         assert!(is_market_candidate_kind(KIND_FARM));
    712         assert!(is_market_candidate_kind(KIND_PUBLIC_FILE_METADATA));
    713         assert!(!is_market_candidate_kind(KIND_LISTING_DRAFT));
    714         assert!(!is_market_candidate_kind(KIND_REPORT));
    715 
    716         assert!(is_map_candidate_kind(KIND_FARM));
    717         assert!(is_map_candidate_kind(KIND_LISTING));
    718         assert!(is_map_candidate_kind(KIND_CALENDAR_DATE_EVENT));
    719         assert!(is_map_candidate_kind(KIND_CALENDAR_TIME_EVENT));
    720         assert!(is_map_candidate_kind(KIND_POST));
    721         assert!(is_map_candidate_kind(KIND_ARTICLE));
    722         assert!(is_map_candidate_kind(KIND_PUBLIC_FILE_METADATA));
    723         assert!(!is_map_candidate_kind(KIND_LISTING_DRAFT));
    724         assert!(!is_map_candidate_kind(KIND_REPORT));
    725 
    726         assert!(is_profile_public_content_kind(KIND_POST));
    727         assert!(is_profile_public_content_kind(KIND_REPOST));
    728         assert!(is_profile_public_content_kind(KIND_GENERIC_REPOST));
    729         assert!(is_profile_public_content_kind(KIND_ARTICLE));
    730         assert!(is_profile_public_content_kind(KIND_LISTING));
    731         assert!(is_profile_public_content_kind(KIND_CALENDAR_DATE_EVENT));
    732         assert!(is_profile_public_content_kind(KIND_CALENDAR_TIME_EVENT));
    733         assert!(is_profile_public_content_kind(KIND_PUBLIC_FILE_METADATA));
    734         assert!(!is_profile_public_content_kind(KIND_LISTING_DRAFT));
    735         assert!(!is_profile_public_content_kind(KIND_REPORT));
    736 
    737         assert!(is_moderation_admin_candidate_kind(KIND_REPORT));
    738         assert!(!is_moderation_admin_candidate_kind(KIND_POST));
    739         assert!(is_draft_owner_candidate_kind(KIND_LISTING_DRAFT));
    740         assert!(!is_draft_owner_candidate_kind(KIND_LISTING));
    741 
    742         assert!(is_private_farm_ops_kind(KIND_FARM_WORKSPACE_MANIFEST));
    743         assert!(is_private_farm_ops_kind(KIND_FARM_CRDT_CHANGE));
    744         assert!(is_private_farm_ops_kind(KIND_FARM_FILE_METADATA));
    745         assert!(is_nip29_group_kind(KIND_GROUP_METADATA));
    746         assert!(is_private_farm_ops_kind(KIND_GROUP_METADATA));
    747         assert!(is_private_farm_ops_kind(KIND_GROUP_ADMINS));
    748         assert!(is_private_farm_ops_kind(KIND_GROUP_MEMBERS));
    749         assert!(is_private_farm_ops_kind(KIND_GROUP_ROLES));
    750         assert!(is_private_farm_ops_kind(KIND_GROUP_PUT_USER));
    751         assert!(is_private_farm_ops_kind(KIND_GROUP_REMOVE_USER));
    752         assert!(is_private_farm_ops_kind(KIND_GROUP_EDIT_METADATA));
    753         assert!(is_private_farm_ops_kind(KIND_GROUP_DELETE_EVENT));
    754         assert!(is_private_farm_ops_kind(KIND_GROUP_CREATE_GROUP));
    755         assert!(is_private_farm_ops_kind(KIND_GROUP_DELETE_GROUP));
    756         assert!(is_private_farm_ops_kind(KIND_GROUP_CREATE_INVITE));
    757         assert!(is_private_farm_ops_kind(KIND_GROUP_JOIN_REQUEST));
    758         assert!(is_private_farm_ops_kind(KIND_GROUP_LEAVE_REQUEST));
    759         assert!(!is_private_farm_ops_kind(KIND_RELAY_AUTH));
    760         assert!(!is_private_farm_ops_kind(KIND_HTTP_AUTH));
    761         assert!(!is_private_farm_ops_kind(KIND_REPORT));
    762         assert!(!is_private_farm_ops_kind(KIND_LISTING_DRAFT));
    763     }
    764 
    765     #[test]
    766     fn exposes_nip29_group_kind_constants() {
    767         assert_eq!(KIND_GROUP_PUT_USER, 9000);
    768         assert_eq!(KIND_GROUP_REMOVE_USER, 9001);
    769         assert_eq!(KIND_GROUP_EDIT_METADATA, 9002);
    770         assert_eq!(KIND_GROUP_DELETE_EVENT, 9005);
    771         assert_eq!(KIND_GROUP_CREATE_GROUP, 9007);
    772         assert_eq!(KIND_GROUP_DELETE_GROUP, 9008);
    773         assert_eq!(KIND_GROUP_CREATE_INVITE, 9009);
    774         assert_eq!(KIND_GROUP_JOIN_REQUEST, 9021);
    775         assert_eq!(KIND_GROUP_LEAVE_REQUEST, 9022);
    776         assert_eq!(KIND_GROUP_METADATA, 39000);
    777         assert_eq!(KIND_GROUP_ADMINS, 39001);
    778         assert_eq!(KIND_GROUP_MEMBERS, 39002);
    779         assert_eq!(KIND_GROUP_ROLES, 39003);
    780     }
    781 
    782     #[test]
    783     fn classifies_commercial_event_kinds() {
    784         assert_eq!(LISTING_EVENT_KINDS, [KIND_LISTING, KIND_LISTING_DRAFT]);
    785         assert_eq!(
    786             ORDER_EVENT_KINDS,
    787             [
    788                 KIND_ORDER_REQUEST,
    789                 KIND_ORDER_DECISION,
    790                 KIND_ORDER_REVISION_PROPOSAL,
    791                 KIND_ORDER_REVISION_DECISION,
    792                 KIND_ORDER_CANCELLATION,
    793             ]
    794         );
    795         assert_eq!(
    796             TRADE_VALIDATION_SERVICE_EVENT_KINDS,
    797             [
    798                 KIND_TRADE_LISTING_VALIDATION_REQUEST,
    799                 KIND_TRADE_LISTING_VALIDATION_RESULT,
    800                 KIND_TRADE_TRANSITION_PROOF_REQUEST,
    801                 KIND_TRADE_TRANSITION_PROOF_RESULT,
    802             ]
    803         );
    804         assert_eq!(
    805             TRADE_VALIDATION_EVENT_KINDS,
    806             [
    807                 KIND_TRADE_LISTING_VALIDATION_REQUEST,
    808                 KIND_TRADE_LISTING_VALIDATION_RESULT,
    809                 KIND_TRADE_TRANSITION_PROOF_REQUEST,
    810                 KIND_TRADE_TRANSITION_PROOF_RESULT,
    811                 KIND_TRADE_VALIDATION_RECEIPT,
    812             ]
    813         );
    814         assert_eq!(COMMERCIAL_EVENT_KINDS.len(), 12);
    815 
    816         assert!(is_listing_event_kind(KIND_LISTING));
    817         assert!(is_listing_event_kind(KIND_LISTING_DRAFT));
    818         assert!(!is_listing_event_kind(KIND_PROFILE));
    819 
    820         assert!(is_order_event_kind(KIND_ORDER_REQUEST));
    821         assert!(is_order_event_kind(KIND_ORDER_DECISION));
    822         assert!(is_order_event_kind(KIND_ORDER_REVISION_PROPOSAL));
    823         assert!(is_order_event_kind(KIND_ORDER_REVISION_DECISION));
    824         assert!(is_order_event_kind(KIND_ORDER_CANCELLATION));
    825         assert!(!is_order_event_kind(3433));
    826         assert!(!is_order_event_kind(3434));
    827         assert!(!is_order_event_kind(3435));
    828         assert!(!is_order_event_kind(3436));
    829         assert!(!is_order_event_kind(KIND_TRADE_LISTING_VALIDATION_REQUEST));
    830         assert!(!is_order_event_kind(KIND_TRADE_VALIDATION_RECEIPT));
    831         assert!(!is_order_event_kind(3431));
    832 
    833         assert!(is_trade_validation_service_request_kind(
    834             KIND_TRADE_LISTING_VALIDATION_REQUEST
    835         ));
    836         assert!(is_trade_validation_service_request_kind(
    837             KIND_TRADE_TRANSITION_PROOF_REQUEST
    838         ));
    839         assert!(!is_trade_validation_service_request_kind(
    840             KIND_TRADE_LISTING_VALIDATION_RESULT
    841         ));
    842         assert!(is_trade_validation_service_result_kind(
    843             KIND_TRADE_LISTING_VALIDATION_RESULT
    844         ));
    845         assert!(is_trade_validation_service_result_kind(
    846             KIND_TRADE_TRANSITION_PROOF_RESULT
    847         ));
    848         assert!(!is_trade_validation_service_result_kind(
    849             KIND_TRADE_LISTING_VALIDATION_REQUEST
    850         ));
    851         assert!(is_trade_validation_service_event_kind(
    852             KIND_TRADE_LISTING_VALIDATION_REQUEST
    853         ));
    854         assert!(is_trade_validation_service_event_kind(
    855             KIND_TRADE_LISTING_VALIDATION_RESULT
    856         ));
    857         assert!(is_trade_validation_service_event_kind(
    858             KIND_TRADE_TRANSITION_PROOF_REQUEST
    859         ));
    860         assert!(is_trade_validation_service_event_kind(
    861             KIND_TRADE_TRANSITION_PROOF_RESULT
    862         ));
    863         assert!(!is_trade_validation_service_event_kind(KIND_ORDER_REQUEST));
    864         assert!(is_trade_validation_receipt_kind(
    865             KIND_TRADE_VALIDATION_RECEIPT
    866         ));
    867         assert!(!is_trade_validation_receipt_kind(3434));
    868         assert!(is_trade_validation_event_kind(
    869             KIND_TRADE_VALIDATION_RECEIPT
    870         ));
    871         assert!(is_trade_validation_event_kind(
    872             KIND_TRADE_TRANSITION_PROOF_RESULT
    873         ));
    874         assert!(!is_trade_validation_event_kind(3434));
    875 
    876         assert!(is_commercial_event_kind(KIND_LISTING));
    877         assert!(is_commercial_event_kind(KIND_ORDER_REQUEST));
    878         assert!(is_commercial_event_kind(
    879             KIND_TRADE_LISTING_VALIDATION_REQUEST
    880         ));
    881         assert!(is_commercial_event_kind(KIND_TRADE_VALIDATION_RECEIPT));
    882         assert!(!is_commercial_event_kind(KIND_PROFILE));
    883 
    884         assert_eq!(
    885             trade_validation_service_result_kind_for_request(KIND_TRADE_LISTING_VALIDATION_REQUEST),
    886             Some(KIND_TRADE_LISTING_VALIDATION_RESULT)
    887         );
    888         assert_eq!(
    889             trade_validation_service_result_kind_for_request(KIND_TRADE_TRANSITION_PROOF_REQUEST),
    890             Some(KIND_TRADE_TRANSITION_PROOF_RESULT)
    891         );
    892         assert_eq!(
    893             trade_validation_service_result_kind_for_request(KIND_ORDER_REQUEST),
    894             None
    895         );
    896         assert_eq!(
    897             trade_validation_service_request_kind_for_result(KIND_TRADE_LISTING_VALIDATION_RESULT),
    898             Some(KIND_TRADE_LISTING_VALIDATION_REQUEST)
    899         );
    900         assert_eq!(
    901             trade_validation_service_request_kind_for_result(KIND_TRADE_TRANSITION_PROOF_RESULT),
    902             Some(KIND_TRADE_TRANSITION_PROOF_REQUEST)
    903         );
    904         assert_eq!(
    905             trade_validation_service_request_kind_for_result(KIND_ORDER_DECISION),
    906             None
    907         );
    908     }
    909 }