chore: fix adding attr todo for static types

This commit is contained in:
Greg Johnston 2024-09-20 15:26:16 -04:00
parent 412ecd6b1b
commit d1a4bbe28e
2 changed files with 33 additions and 5 deletions

View file

@ -530,6 +530,21 @@ where
} }
} }
impl<T> ToTemplate for BoxedView<T>
where
T: ToTemplate,
{
fn to_template(
buf: &mut String,
class: &mut String,
style: &mut String,
inner_html: &mut String,
position: &mut Position,
) {
T::to_template(buf, class, style, inner_html, position);
}
}
/// A newtype around a view that allows us to get out of certain compile errors. /// A newtype around a view that allows us to get out of certain compile errors.
/// ///
/// It is unlikely that you need this in your own work. /// It is unlikely that you need this in your own work.
@ -627,3 +642,18 @@ where
self.into_inner().hydrate::<FROM_SERVER>(cursor, position) self.into_inner().hydrate::<FROM_SERVER>(cursor, position)
} }
} }
impl<T> ToTemplate for WrappedView<T>
where
T: ToTemplate,
{
fn to_template(
buf: &mut String,
class: &mut String,
style: &mut String,
inner_html: &mut String,
position: &mut Position,
) {
T::to_template(buf, class, style, inner_html, position);
}
}

View file

@ -1,6 +1,6 @@
use super::{ use super::{
add_attr::AddAnyAttr, Mountable, Position, PositionState, Render, add_attr::AddAnyAttr, Mountable, Position, PositionState, Render,
RenderHtml, ToTemplate, RenderHtml, ToTemplate, WrappedView,
}; };
use crate::{ use crate::{
html::attribute::{Attribute, AttributeKey, AttributeValue, NextAttribute}, html::attribute::{Attribute, AttributeKey, AttributeValue, NextAttribute},
@ -216,7 +216,7 @@ impl<R, const V: &'static str> AddAnyAttr<R> for Static<V>
where where
R: Renderer, R: Renderer,
{ {
type Output<SomeNewAttr: Attribute<R>> = Static<V>; type Output<SomeNewAttr: Attribute<R>> = WrappedView<Static<V>>;
fn add_any_attr<NewAttr: Attribute<R>>( fn add_any_attr<NewAttr: Attribute<R>>(
self, self,
@ -225,9 +225,7 @@ where
where where
Self::Output<NewAttr>: RenderHtml<R>, Self::Output<NewAttr>: RenderHtml<R>,
{ {
// TODO: there is a strange compiler thing that seems to prevent us returning Self here, WrappedView::new(self)
// even though we've already said that Output is always the same as Self
todo!()
} }
} }