commit a3e975d133de5204307c3879636adcbb092d0b1b
parent 07c6b27493560c81b925172a769be3229bae4b1d
Author: kernelkind <kernelkind@gmail.com>
Date: Mon, 3 Feb 2025 17:29:36 -0500
implement TextBuffer -> PostBuffer downcasting
Signed-off-by: kernelkind <kernelkind@gmail.com>
Diffstat:
1 file changed, 20 insertions(+), 0 deletions(-)
diff --git 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::<PostBuffer>().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<Pubkey>,
@@ -555,6 +569,12 @@ impl TextBuffer for PostBuffer {
}
}
}
+
+ fn type_id(&self) -> usize {
+ let mut hasher = DefaultHasher::new();
+ TypeId::of::<PostBuffer>().hash(&mut hasher);
+ hasher.finish() as usize
+ }
}
fn first_is_desired_char(text: &str, desired: char) -> bool {