This allows returning `impl ViewSequence` as this was previously not
possibly as the `Marker` generic parameter couldn't be named (easily) in
`ViewSequence<..., Marker>`.
This also provides specialized `ViewSequence`s for xilem
(`WidgetViewSequence` and `FlexSequence`) as well as for xilem_web
(`DomFragment`). Additional doc-tests/documentation and a small example
(in `counter`) for xilem_web is provided as well.
This has the drawback to not being able to reeimplement `ViewSequence`
for types that already implement `View`, which was previously possible
(as seen by the now removed `NoElementView` `ViewSequence`
implementation).
And additionally by introducing more boilerplate by having to implement
`ViewMarker` for every type that implements `View`.
---------
Co-authored-by: Daniel McNab <36049421+DJMcNab@users.noreply.github.com>
This uses the interface in Xilem Core from #394 and #436
Some thoughts:
1) You only need to specify the number of items in a single match arm.
I.e.
```rust
fn my_view(){
match x {
0 => OneOf3(...),
1=> OneOf9(...),
_=> OneOf9(...),
}
}
```
works. We probably should rename `OneOf9` back again in that case.
2) The example currently isn't that interesting. Any suggestions for a
more suitable state machine would be welcome.
This adds yet another generic parameter `Message` to the `View`,
`ViewSequence` and `AnyView` trait, such that implementors have more
freedom about what the message is. This is necessary for xilem_web, as a
`Send` bound is not possible to use with wasm_bindgen IIRC. (At least I
had to remove it in the `DynMessage` to get it to compile...).
It was fortunately straight-forward to just add the `Message` param with
the default `DynMessage`. Basically search replace... (I hope I haven't
missed anything, but I went through it twice...)
This ports the `OneOfN` views from `xilem_web` to `xilem_core`.
~~The new marking mechanism for the `ViewSequence` makes it possible to
use the same type as well for an implementation of `ViewSequence`, which
is provided here as well.~~
Because of ambiguity, and needing to specify the explicit type when
`OneOf(impl View)` would be used, where an `impl ViewSequence` is
expected, we have decided to not provide a `ViewSequence` impl, so that
it's not ambiguous, and not necessary to specify the concrete type. We
could instead add separate types for a `ViewSequence` instead like
`OneSeqOf2`.
Since macros make this unfortunately not super readable, for reviewers
of the code [this pre-macro
version](4f786c4282/xilem_core/src/views/one_of.rs)
may be better to look at, the only difference to this, is that this has
slightly enhanced doc comments, and obviously more than just `OneOf2`.