tangle


git clone https://radroots.dev/git/tangle.git
Log | Files | Refs | README | LICENSE

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 }