kinds.rs (4418B)
1 use tangle_protocol::Kind; 2 3 pub const KIND_GROUP_PUT_USER: u32 = 9_000; 4 pub const KIND_GROUP_REMOVE_USER: u32 = 9_001; 5 pub const KIND_GROUP_EDIT_METADATA: u32 = 9_002; 6 pub const KIND_GROUP_DELETE_EVENT: u32 = 9_005; 7 pub const KIND_GROUP_CREATE_GROUP: u32 = 9_007; 8 pub const KIND_GROUP_DELETE_GROUP: u32 = 9_008; 9 pub const KIND_GROUP_CREATE_INVITE: u32 = 9_009; 10 pub const KIND_GROUP_JOIN_REQUEST: u32 = 9_021; 11 pub const KIND_GROUP_LEAVE_REQUEST: u32 = 9_022; 12 pub const KIND_GROUP_METADATA: u32 = 39_000; 13 pub const KIND_GROUP_ADMINS: u32 = 39_001; 14 pub const KIND_GROUP_MEMBERS: u32 = 39_002; 15 pub const KIND_GROUP_ROLES: u32 = 39_003; 16 pub const KIND_GROUP_STATE_39004: u32 = 39_004; 17 18 pub const NIP29_MODERATION_KIND_VALUES: [u32; 7] = [ 19 KIND_GROUP_PUT_USER, 20 KIND_GROUP_REMOVE_USER, 21 KIND_GROUP_EDIT_METADATA, 22 KIND_GROUP_DELETE_EVENT, 23 KIND_GROUP_CREATE_GROUP, 24 KIND_GROUP_DELETE_GROUP, 25 KIND_GROUP_CREATE_INVITE, 26 ]; 27 28 pub const NIP29_USER_REQUEST_KIND_VALUES: [u32; 2] = 29 [KIND_GROUP_JOIN_REQUEST, KIND_GROUP_LEAVE_REQUEST]; 30 31 pub const NIP29_RELAY_GENERATED_KIND_VALUES: [u32; 5] = [ 32 KIND_GROUP_METADATA, 33 KIND_GROUP_ADMINS, 34 KIND_GROUP_MEMBERS, 35 KIND_GROUP_ROLES, 36 KIND_GROUP_STATE_39004, 37 ]; 38 39 pub const NIP29_GROUP_KIND_VALUES: [u32; 14] = [ 40 KIND_GROUP_PUT_USER, 41 KIND_GROUP_REMOVE_USER, 42 KIND_GROUP_EDIT_METADATA, 43 KIND_GROUP_DELETE_EVENT, 44 KIND_GROUP_CREATE_GROUP, 45 KIND_GROUP_DELETE_GROUP, 46 KIND_GROUP_CREATE_INVITE, 47 KIND_GROUP_JOIN_REQUEST, 48 KIND_GROUP_LEAVE_REQUEST, 49 KIND_GROUP_METADATA, 50 KIND_GROUP_ADMINS, 51 KIND_GROUP_MEMBERS, 52 KIND_GROUP_ROLES, 53 KIND_GROUP_STATE_39004, 54 ]; 55 56 pub fn is_moderation_kind(kind: Kind) -> bool { 57 NIP29_MODERATION_KIND_VALUES.contains(&kind.as_u32()) 58 } 59 60 pub fn is_user_request_kind(kind: Kind) -> bool { 61 NIP29_USER_REQUEST_KIND_VALUES.contains(&kind.as_u32()) 62 } 63 64 pub fn is_relay_generated_kind(kind: Kind) -> bool { 65 NIP29_RELAY_GENERATED_KIND_VALUES.contains(&kind.as_u32()) 66 } 67 68 pub fn is_group_specific_kind(kind: Kind) -> bool { 69 NIP29_GROUP_KIND_VALUES.contains(&kind.as_u32()) 70 } 71 72 #[cfg(test)] 73 mod tests { 74 use super::{ 75 KIND_GROUP_ADMINS, KIND_GROUP_CREATE_GROUP, KIND_GROUP_CREATE_INVITE, 76 KIND_GROUP_DELETE_EVENT, KIND_GROUP_DELETE_GROUP, KIND_GROUP_EDIT_METADATA, 77 KIND_GROUP_JOIN_REQUEST, KIND_GROUP_LEAVE_REQUEST, KIND_GROUP_MEMBERS, KIND_GROUP_METADATA, 78 KIND_GROUP_PUT_USER, KIND_GROUP_REMOVE_USER, KIND_GROUP_ROLES, KIND_GROUP_STATE_39004, 79 NIP29_GROUP_KIND_VALUES, is_group_specific_kind, is_moderation_kind, 80 is_relay_generated_kind, is_user_request_kind, 81 }; 82 use tangle_protocol::Kind; 83 84 #[test] 85 fn nip29_kind_constants_cover_moderation_and_relay_generated_ranges() { 86 assert_eq!( 87 NIP29_GROUP_KIND_VALUES, 88 [ 89 9_000, 9_001, 9_002, 9_005, 9_007, 9_008, 9_009, 9_021, 9_022, 39_000, 39_001, 90 39_002, 39_003, 39_004 91 ] 92 ); 93 for value in [ 94 KIND_GROUP_PUT_USER, 95 KIND_GROUP_REMOVE_USER, 96 KIND_GROUP_EDIT_METADATA, 97 KIND_GROUP_DELETE_EVENT, 98 KIND_GROUP_CREATE_GROUP, 99 KIND_GROUP_DELETE_GROUP, 100 KIND_GROUP_CREATE_INVITE, 101 ] { 102 let kind = Kind::new(value.into()).expect("kind"); 103 assert!(is_moderation_kind(kind)); 104 assert!(is_group_specific_kind(kind)); 105 assert!(!is_relay_generated_kind(kind)); 106 assert!(!is_user_request_kind(kind)); 107 } 108 for value in [KIND_GROUP_JOIN_REQUEST, KIND_GROUP_LEAVE_REQUEST] { 109 let kind = Kind::new(value.into()).expect("kind"); 110 assert!(is_user_request_kind(kind)); 111 assert!(is_group_specific_kind(kind)); 112 assert!(!is_moderation_kind(kind)); 113 assert!(!is_relay_generated_kind(kind)); 114 } 115 for value in [ 116 KIND_GROUP_METADATA, 117 KIND_GROUP_ADMINS, 118 KIND_GROUP_MEMBERS, 119 KIND_GROUP_ROLES, 120 KIND_GROUP_STATE_39004, 121 ] { 122 let kind = Kind::new(value.into()).expect("kind"); 123 assert!(is_relay_generated_kind(kind)); 124 assert!(is_group_specific_kind(kind)); 125 assert!(!is_moderation_kind(kind)); 126 } 127 assert!(!is_group_specific_kind(Kind::new(1).expect("kind"))); 128 } 129 }