11use std:: { pin:: Pin , task:: Poll } ;
22
33use frender_common:: utils:: pin_project_iter_mut_array;
4- use frender_dom:: render:: RenderWithContext ;
54
65use crate :: {
7- element:: { self , CsrElementRenderInitPinned , PinnedRenderInitKind , PinnedRenderStateKind , PinnedRenderStateKindPollRender , UnpinnedRenderStateKind , UnpinnedRenderStateKindPollRender } ,
6+ element:: { self , PinnedRenderStateKind , PinnedRenderStateKindPollRender , UnpinnedRenderStateKind , UnpinnedRenderStateKindPollRender } ,
87 CsrElement , HtmlRenderContext , RenderHtml ,
98} ;
109
@@ -39,22 +38,6 @@ impl<K: PinnedRenderStateKind, const N: usize> PinnedRenderStateKind for Kind<K,
3938 type PinnedUiHandle < R : RenderHtml + ?Sized > = [ K :: PinnedUiHandle < R > ; N ] ;
4039 type PinnedState < R : RenderHtml + ?Sized > = [ K :: PinnedState < R > ; N ] ;
4140}
42- impl < K : PinnedRenderInitKind , const N : usize > PinnedRenderInitKind for Kind < K , N > {
43- type PinnedRenderStateKind = Kind < K :: PinnedRenderStateKind , N > ;
44- type PinnedRenderInit < R : RenderHtml + ?Sized > = [ K :: PinnedRenderInit < R > ; N ] ;
45- }
46-
47- impl < T : CsrElementRenderInitPinned < R > , const N : usize , R : ?Sized + RenderWithContext > CsrElementRenderInitPinned < R > for [ T ; N ] {
48- type UiHandle = [ T :: UiHandle ; N ] ;
49- type State = [ T :: State ; N ] ;
50-
51- fn render_init_pinned ( self , render_context : & mut R :: RenderContext < ' _ > , state : Pin < & mut Self :: State > ) -> Self :: UiHandle {
52- let mut state = pin_project_iter_mut_array ( state) ;
53- // This relies on a documented feature of <[_; N]>::map():
54- // > ..., with function f applied to each element in order
55- self . map ( |this| this. render_init_pinned ( render_context, state. next ( ) . unwrap ( ) ) )
56- }
57- }
5841
5942impl < K : PinnedRenderStateKindPollRender , const N : usize > PinnedRenderStateKindPollRender for Kind < K , N > {
6043 fn pinned_poll_render < R : RenderHtml + ?Sized > (
@@ -77,23 +60,23 @@ impl<K: PinnedRenderStateKindPollRender, const N: usize> PinnedRenderStateKindPo
7760
7861impl < E : CsrElement , const N : usize > CsrElement for [ E ; N ] {
7962 type RenderStateKind = Kind < E :: RenderStateKind , N > ;
80- type RenderInitKind = Kind < E :: RenderInitKind , N > ;
63+ type PinnedRenderInit < R : ? Sized + RenderHtml > = [ E :: PinnedRenderInit < R > ; N ] ;
8164
82- fn pinned_render_init < Renderer : ?Sized + RenderHtml > (
65+ fn pinned_render_init < Ctx : ?Sized + HtmlRenderContext > (
8366 //
8467 self ,
85- renderer : & mut Renderer ,
68+ render_context : & mut Ctx ,
8669 ) -> (
8770 //
88- element:: PinnedStateOfKind < Renderer , Self :: RenderStateKind > ,
89- element :: PinnedRenderInitOfKind < Renderer , Self :: RenderInitKind > ,
71+ element:: PinnedStateOfKind < Ctx :: Renderer , Self :: RenderStateKind > ,
72+ Self :: PinnedRenderInit < Ctx :: Renderer > ,
9073 ) {
9174 use arrayvec:: ArrayVec ;
9275
9376 let ( states, render_inits) = self
9477 . into_iter ( )
9578 //
96- . map ( |el| el. pinned_render_init ( renderer ) )
79+ . map ( |el| el. pinned_render_init ( render_context ) )
9780 . unzip :: < _ , _ , ArrayVec < _ , N > , ArrayVec < _ , N > > ( ) ;
9881
9982 let (
0 commit comments