lib-nested/src/main.rs

80 lines
1.6 KiB
Rust
Raw Normal View History

2020-12-04 20:38:51 +01:00
#![feature(trait_alias)]
2020-12-08 15:51:24 +01:00
#![feature(assoc_char_funcs)]
2020-12-04 20:38:51 +01:00
pub mod view;
pub mod port;
pub mod channel;
pub mod singleton_buffer;
pub mod vec_buffer;
2020-12-04 20:38:51 +01:00
use {
async_std::{
prelude::*, task, stream
},
std::{
sync::{Arc, RwLock}
},
cgmath::{Vector2},
crate::{
view::{View, Observer},
port::{InnerViewPort, OuterViewPort},
singleton_buffer::SingletonBuffer,
vec_buffer::VecBuffer
}
};
2020-12-04 20:38:51 +01:00
#[async_std::main]
async fn main() {
2020-12-08 15:51:24 +01:00
let digits = port::ViewPort::new();
let mut buf = VecBuffer::new(digits.inner());
let digit_view = digits.outer()
// digit encoding
.map_value(
|digit|
if let Some(digit) = digit {
char::from_digit(digit, 16)
} else {
None
}
)
2020-12-08 15:51:24 +01:00
// simple horizontal layout
.map_key(
|idx| Vector2::<i16>::new(idx as i16, 0),
|pos| pos.x as usize
);
2020-12-04 20:38:51 +01:00
2020-12-08 15:51:24 +01:00
let view = digit_view.get_view();
let mut stream = digit_view.stream().map({
move |idx| (idx, view.view(idx))
2020-12-04 20:38:51 +01:00
});
let fut = task::spawn({
async move {
2020-12-08 15:51:24 +01:00
while let Some((idx, val)) = stream.next().await {
println!("v[{:?}] = {:?}", idx, val);
}
println!("end print task");
2020-12-04 20:38:51 +01:00
}
});
2020-12-08 15:51:24 +01:00
buf.push(0);
buf.push(1);
task::sleep(std::time::Duration::from_secs(1)).await;
2020-12-08 15:51:24 +01:00
buf.push(2);
buf.push(3);
task::sleep(std::time::Duration::from_secs(1)).await;
2020-12-08 15:51:24 +01:00
buf.push(4);
2020-12-04 20:38:51 +01:00
drop(buf);
2020-12-08 15:51:24 +01:00
drop(digits);
drop(digit_view);
2020-12-04 20:38:51 +01:00
fut.await;
}