mirror of
https://github.com/zed-industries/zed.git
synced 2025-02-11 12:46:07 +00:00
39 lines
1,020 B
Rust
39 lines
1,020 B
Rust
use gpui::{Entity, ModelHandle};
|
|
use smol::channel;
|
|
use std::marker::PhantomData;
|
|
|
|
pub fn sample_text(rows: usize, cols: usize) -> String {
|
|
let mut text = String::new();
|
|
for row in 0..rows {
|
|
let c: char = ('a' as u32 + row as u32) as u8 as char;
|
|
let mut line = c.to_string().repeat(cols);
|
|
if row < rows - 1 {
|
|
line.push('\n');
|
|
}
|
|
text += &line;
|
|
}
|
|
text
|
|
}
|
|
|
|
pub struct Observer<T>(PhantomData<T>);
|
|
|
|
impl<T: 'static> Entity for Observer<T> {
|
|
type Event = ();
|
|
}
|
|
|
|
impl<T: Entity> Observer<T> {
|
|
pub fn new(
|
|
handle: &ModelHandle<T>,
|
|
cx: &mut gpui::TestAppContext,
|
|
) -> (ModelHandle<Self>, channel::Receiver<()>) {
|
|
let (notify_tx, notify_rx) = channel::unbounded();
|
|
let observer = cx.add_model(|cx| {
|
|
cx.observe(handle, move |_, _, _| {
|
|
let _ = notify_tx.try_send(());
|
|
})
|
|
.detach();
|
|
Observer(PhantomData)
|
|
});
|
|
(observer, notify_rx)
|
|
}
|
|
}
|