xso: make FromEventsBuilder implementations around Box more versatile

By removing the implicit `Sized` bound, they can be used with `dyn _`.
The `Sized` bound is unnecessary for a boxed value, so it is a
superfluous restriction. Also, the use with `dyn _` may turn out useful
in the future when we want to allow type-erased XSOs.
This commit is contained in:
Jonas Schäfer 2025-05-01 10:26:59 +02:00 committed by Link Mauve
commit ee9ffb2d9c

View file

@ -84,9 +84,9 @@ impl<T: FromXml> FromXml for Option<T> {
}
/// Helper struct to construct an `Box<T>` from XML events.
pub struct BoxBuilder<T: FromEventsBuilder>(Box<T>);
pub struct BoxBuilder<T: FromEventsBuilder + ?Sized>(Box<T>);
impl<T: FromEventsBuilder> FromEventsBuilder for BoxBuilder<T> {
impl<T: FromEventsBuilder + ?Sized> FromEventsBuilder for BoxBuilder<T> {
type Output = Box<T::Output>;
fn feed(&mut self, ev: rxml::Event, ctx: &Context<'_>) -> Result<Option<Self::Output>, Error> {
@ -94,8 +94,8 @@ impl<T: FromEventsBuilder> FromEventsBuilder for BoxBuilder<T> {
}
}
/// Parsers `T` into a `Box`.
impl<T: FromXml> FromXml for Box<T> {
/// Parses `T` into a `Box`.
impl<T: FromXml + ?Sized> FromXml for Box<T> {
type Builder = BoxBuilder<T::Builder>;
fn from_events(
@ -107,6 +107,14 @@ impl<T: FromXml> FromXml for Box<T> {
}
}
impl<T: FromEventsBuilder + ?Sized> FromEventsBuilder for Box<T> {
type Output = T::Output;
fn feed(&mut self, ev: rxml::Event, ctx: &Context<'_>) -> Result<Option<Self::Output>, Error> {
(**self).feed(ev, ctx)
}
}
#[derive(Debug)]
enum FallibleBuilderInner<T: FromEventsBuilder, E> {
Processing { depth: usize, builder: T },