diff --git a/crates/notedeck_columns/src/post.rs b/crates/notedeck_columns/src/post.rs index 7988964b..42322598 100644 --- a/crates/notedeck_columns/src/post.rs +++ b/crates/notedeck_columns/src/post.rs @@ -2,7 +2,9 @@ use egui::TextBuffer; use enostr::{FullKeypair, Pubkey}; use nostrdb::{Note, NoteBuilder, NoteReply}; use std::{ + any::TypeId, collections::{BTreeMap, HashMap, HashSet}, + hash::{DefaultHasher, Hash, Hasher}, ops::Range, }; use tracing::error; @@ -351,6 +353,18 @@ impl PostBuffer { } } +pub fn downcast_post_buffer(buffer: &dyn TextBuffer) -> Option<&PostBuffer> { + let mut hasher = DefaultHasher::new(); + TypeId::of::().hash(&mut hasher); + let post_id = hasher.finish() as usize; + + if buffer.type_id() == post_id { + unsafe { Some(&*(buffer as *const dyn TextBuffer as *const PostBuffer)) } + } else { + None + } +} + pub struct PostOutput { pub text: String, pub mentions: Vec, @@ -555,6 +569,12 @@ impl TextBuffer for PostBuffer { } } } + + fn type_id(&self) -> usize { + let mut hasher = DefaultHasher::new(); + TypeId::of::().hash(&mut hasher); + hasher.finish() as usize + } } fn first_is_desired_char(text: &str, desired: char) -> bool {