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:
parent
1262b560e9
commit
ee9ffb2d9c
1 changed files with 12 additions and 4 deletions
|
|
@ -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 },
|
||||
|
|
|
|||
Loading…
Reference in a new issue