Skip to content

Commit 51d2aca

Browse files
committed
wip: redesign csr: feat: impl RenderInitPinned for array
1 parent 7725418 commit 51d2aca

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

packages/frender-common/src/reactive_value.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use std::{pin::Pin, task::Poll};
22

33
use crate::csr::StateUnmount;
44

5+
mod array;
56
pub mod csr_str;
67
pub mod simple_non_reactive;
78

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
use frender_pin_utils::pin_project_iter_mut_array;
2+
3+
use super::RenderInitPinned;
4+
5+
impl<
6+
T: for<'r> RenderInitPinned<&'r mut R, S, Output = Out>,
7+
const N: usize,
8+
R: ?Sized,
9+
S,
10+
Out,
11+
> RenderInitPinned<&mut R, [S; N]> for [T; N]
12+
{
13+
type Output = [Out; N];
14+
15+
fn render_init_pinned(
16+
self,
17+
renderer: &mut R,
18+
state: std::pin::Pin<&mut [S; N]>,
19+
) -> Self::Output {
20+
let mut state = pin_project_iter_mut_array(state);
21+
// This relies on a documented feature of <[_; N]>::map():
22+
// > ..., with function f applied to each element in order
23+
self.map(|this| this.render_init_pinned(renderer, state.next().unwrap()))
24+
}
25+
}

0 commit comments

Comments
 (0)