implement TextBuffer -> PostBuffer downcasting
Signed-off-by: kernelkind <kernelkind@gmail.com>
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user