lib

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

repost.rs (1895B)


      1 #[cfg(not(feature = "std"))]
      2 use alloc::string::String;
      3 
      4 use crate::social::SocialTarget;
      5 
      6 #[cfg_attr(
      7     any(feature = "serde", test),
      8     derive(serde::Serialize, serde::Deserialize)
      9 )]
     10 #[derive(Clone, Debug)]
     11 pub struct Repost {
     12     pub target: SocialTarget,
     13     #[cfg_attr(
     14         feature = "serde",
     15         serde(default, skip_serializing_if = "Option::is_none")
     16     )]
     17     pub content: Option<String>,
     18 }
     19 
     20 #[cfg_attr(
     21     any(feature = "serde", test),
     22     derive(serde::Serialize, serde::Deserialize)
     23 )]
     24 #[derive(Clone, Debug)]
     25 pub struct GenericRepost {
     26     pub target: SocialTarget,
     27     pub target_kind: u32,
     28     #[cfg_attr(
     29         feature = "serde",
     30         serde(default, skip_serializing_if = "Option::is_none")
     31     )]
     32     pub content: Option<String>,
     33 }
     34 
     35 #[cfg(test)]
     36 #[cfg_attr(coverage_nightly, coverage(off))]
     37 mod tests {
     38     use super::*;
     39 
     40     #[test]
     41     fn repost_models_represent_note_and_generic_targets() {
     42         let note_target = SocialTarget::Event {
     43             id: "a".repeat(64),
     44             author: Some(crate::test_valid_hex_64('b')),
     45             event_kind: Some(1),
     46             relays: None,
     47         };
     48         let article_target = SocialTarget::Address {
     49             address: "30023:pubkey:article".to_string(),
     50             author: Some(crate::test_valid_hex_64('b')),
     51             event_kind: Some(30023),
     52             relays: Some(vec!["wss://relay.example".to_string()]),
     53         };
     54 
     55         let repost = Repost {
     56             target: note_target,
     57             content: None,
     58         };
     59         let generic = GenericRepost {
     60             target: article_target,
     61             target_kind: 30023,
     62             content: Some("long-form share".to_string()),
     63         };
     64 
     65         assert!(matches!(repost.target, SocialTarget::Event { .. }));
     66         assert_eq!(generic.target_kind, 30023);
     67         assert!(matches!(generic.target, SocialTarget::Address { .. }));
     68     }
     69 }