Description
Code
`cargo build` with
https://github.com/Philipp-M/xilem_web-error-message-repro
Current output
With current rustc:
error[E0599]: the method `fill` exists for struct `Line<_, _, ()>`, but its trait bounds were not satisfied
--> src/main.rs:5:23
|
5 | svg::line(()).fill(Color::LIGHT_GRAY)
| ^^^^ method cannot be called on `Line<_, _, ()>` due to unsatisfied trait bounds
|
= note: the following trait bounds were not satisfied:
`&xilem_web::elements::svg::Line<_, _, ()>: SvgGeometryElement<_, _>`
which is required by `&xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgCircleElement<_, _>`
`<&xilem_web::elements::svg::Line<_, _, ()> as View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>>::Element = Pod<_, _>`
which is required by `&xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgCircleElement<_, _>`
`&xilem_web::elements::svg::Line<_, _, ()>: View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>`
which is required by `&xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgCircleElement<_, _>`
`&xilem_web::elements::svg::Line<_, _, ()>: SvgGeometryElement<_, _>`
which is required by `&xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgEllipseElement<_, _>`
`<&xilem_web::elements::svg::Line<_, _, ()> as View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>>::Element = Pod<_, _>`
which is required by `&xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgEllipseElement<_, _>`
`&xilem_web::elements::svg::Line<_, _, ()>: View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>`
which is required by `&xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgEllipseElement<_, _>`
`&xilem_web::elements::svg::Line<_, _, ()>: SvgGraphicsElement<_, _>`
which is required by `&xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvggElement<_, _>`
`<&xilem_web::elements::svg::Line<_, _, ()> as View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>>::Element = Pod<_, _>`
which is required by `&xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvggElement<_, _>`
`&xilem_web::elements::svg::Line<_, _, ()>: View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>`
which is required by `&xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvggElement<_, _>`
`&xilem_web::elements::svg::Line<_, _, ()>: SvgGeometryElement<_, _>`
which is required by `&xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgPathElement<_, _>`
`<&xilem_web::elements::svg::Line<_, _, ()> as View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>>::Element = Pod<_, _>`
which is required by `&xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgPathElement<_, _>`
`&xilem_web::elements::svg::Line<_, _, ()>: View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>`
which is required by `&xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgPathElement<_, _>`
`&xilem_web::elements::svg::Line<_, _, ()>: SvgGeometryElement<_, _>`
which is required by `&xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgPolygonElement<_, _>`
`<&xilem_web::elements::svg::Line<_, _, ()> as View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>>::Element = Pod<_, _>`
which is required by `&xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgPolygonElement<_, _>`
`&xilem_web::elements::svg::Line<_, _, ()>: View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>`
which is required by `&xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgPolygonElement<_, _>`
`&xilem_web::elements::svg::Line<_, _, ()>: SvgGeometryElement<_, _>`
which is required by `&xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgPolylineElement<_, _>`
`<&xilem_web::elements::svg::Line<_, _, ()> as View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>>::Element = Pod<_, _>`
which is required by `&xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgPolylineElement<_, _>`
`&xilem_web::elements::svg::Line<_, _, ()>: View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>`
which is required by `&xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgPolylineElement<_, _>`
`&xilem_web::elements::svg::Line<_, _, ()>: SvgGeometryElement<_, _>`
which is required by `&xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgRectElement<_, _>`
`<&xilem_web::elements::svg::Line<_, _, ()> as View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>>::Element = Pod<_, _>`
which is required by `&xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgRectElement<_, _>`
`&xilem_web::elements::svg::Line<_, _, ()>: View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>`
which is required by `&xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgRectElement<_, _>`
`&xilem_web::elements::svg::Line<_, _, ()>: SvgGraphicsElement<_, _>`
which is required by `&xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgTextContentElement<_, _>`
`<&xilem_web::elements::svg::Line<_, _, ()> as View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>>::Element = Pod<_, _>`
which is required by `&xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgTextContentElement<_, _>`
`&xilem_web::elements::svg::Line<_, _, ()>: View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>`
which is required by `&xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgTextContentElement<_, _>`
`&mut xilem_web::elements::svg::Line<_, _, ()>: SvgGeometryElement<_, _>`
which is required by `&mut xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgCircleElement<_, _>`
`<&mut xilem_web::elements::svg::Line<_, _, ()> as View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>>::Element = Pod<_, _>`
which is required by `&mut xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgCircleElement<_, _>`
`&mut xilem_web::elements::svg::Line<_, _, ()>: View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>`
which is required by `&mut xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgCircleElement<_, _>`
`&mut xilem_web::elements::svg::Line<_, _, ()>: SvgGeometryElement<_, _>`
which is required by `&mut xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgEllipseElement<_, _>`
`<&mut xilem_web::elements::svg::Line<_, _, ()> as View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>>::Element = Pod<_, _>`
which is required by `&mut xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgEllipseElement<_, _>`
`&mut xilem_web::elements::svg::Line<_, _, ()>: View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>`
which is required by `&mut xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgEllipseElement<_, _>`
`&mut xilem_web::elements::svg::Line<_, _, ()>: SvgGraphicsElement<_, _>`
which is required by `&mut xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvggElement<_, _>`
`<&mut xilem_web::elements::svg::Line<_, _, ()> as View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>>::Element = Pod<_, _>`
which is required by `&mut xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvggElement<_, _>`
`&mut xilem_web::elements::svg::Line<_, _, ()>: View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>`
which is required by `&mut xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvggElement<_, _>`
`&mut xilem_web::elements::svg::Line<_, _, ()>: SvgGeometryElement<_, _>`
which is required by `&mut xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgPathElement<_, _>`
`<&mut xilem_web::elements::svg::Line<_, _, ()> as View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>>::Element = Pod<_, _>`
which is required by `&mut xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgPathElement<_, _>`
`&mut xilem_web::elements::svg::Line<_, _, ()>: View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>`
which is required by `&mut xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgPathElement<_, _>`
`&mut xilem_web::elements::svg::Line<_, _, ()>: SvgGeometryElement<_, _>`
which is required by `&mut xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgPolygonElement<_, _>`
`<&mut xilem_web::elements::svg::Line<_, _, ()> as View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>>::Element = Pod<_, _>`
which is required by `&mut xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgPolygonElement<_, _>`
`&mut xilem_web::elements::svg::Line<_, _, ()>: View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>`
which is required by `&mut xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgPolygonElement<_, _>`
`&mut xilem_web::elements::svg::Line<_, _, ()>: SvgGeometryElement<_, _>`
which is required by `&mut xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgPolylineElement<_, _>`
`<&mut xilem_web::elements::svg::Line<_, _, ()> as View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>>::Element = Pod<_, _>`
which is required by `&mut xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgPolylineElement<_, _>`
`&mut xilem_web::elements::svg::Line<_, _, ()>: View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>`
which is required by `&mut xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgPolylineElement<_, _>`
`&mut xilem_web::elements::svg::Line<_, _, ()>: SvgGeometryElement<_, _>`
which is required by `&mut xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgRectElement<_, _>`
`<&mut xilem_web::elements::svg::Line<_, _, ()> as View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>>::Element = Pod<_, _>`
which is required by `&mut xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgRectElement<_, _>`
`&mut xilem_web::elements::svg::Line<_, _, ()>: View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>`
which is required by `&mut xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgRectElement<_, _>`
`&mut xilem_web::elements::svg::Line<_, _, ()>: SvgGraphicsElement<_, _>`
which is required by `&mut xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgTextContentElement<_, _>`
`<&mut xilem_web::elements::svg::Line<_, _, ()> as View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>>::Element = Pod<_, _>`
which is required by `&mut xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgTextContentElement<_, _>`
`&mut xilem_web::elements::svg::Line<_, _, ()>: View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>`
which is required by `&mut xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgTextContentElement<_, _>`
warning: unused import: `interfaces`
--> src/main.rs:1:47
|
1 | use xilem_web::{document_body, elements::svg, interfaces::*, svg::peniko::Color, App};
| ^^^^^^^^^^
|
= note: `#[warn(unused_imports)]` on by default
For more information about this error, try `rustc --explain E0599`.
warning: `xilem_web-error-message-repro` (bin "xilem_web-error-message-repro") generated 1 warning
error: could not compile `xilem_web-error-message-repro` (bin "xilem_web-error-message-repro") due to 1 previous error; 1 warning emitted
With RUSTFLAGS="-Znext-solver"
this is a little bit better, but still confusing:
error[E0599]: the method `fill` exists for struct `Line<_, _, ()>`, but its trait bounds were not satisfied
--> src/main.rs:5:23
|
5 | svg::line(()).fill(Color::LIGHT_GRAY)
| ^^^^ method cannot be called on `Line<_, _, ()>` due to unsatisfied trait bounds
|
::: /home/philm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/web-sys-0.3.69/src/features/gen_SvgLineElement.rs:5:1
|
5 | #[wasm_bindgen]
| --------------- doesn't satisfy 8 bounds
|
::: /home/philm/.cargo/git/checkouts/xilem-031d790027f85a11/101fa9b/xilem_web/src/elements.rs:649:5
|
649 | / define_elements!(
650 | | SVG_NS,
651 | | (Svg, svg, SvgsvgElement),
652 | | (A, a, SvgaElement),
... |
815 | | (SvgView, view, SvgViewElement),
816 | | );
| |_____- doesn't satisfy 8 bounds
|
= note: the following trait bounds were not satisfied:
`web_sys::features::gen_SvgLineElement::SvgLineElement: AsRef<web_sys::features::gen_SvgCircleElement::SvgCircleElement>`
which is required by `xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgCircleElement<_, _>`
`web_sys::features::gen_SvgLineElement::SvgLineElement: AsRef<web_sys::features::gen_SvgEllipseElement::SvgEllipseElement>`
which is required by `xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgEllipseElement<_, _>`
`web_sys::features::gen_SvgLineElement::SvgLineElement: AsRef<web_sys::features::gen_SvggElement::SvggElement>`
which is required by `xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvggElement<_, _>`
`web_sys::features::gen_SvgLineElement::SvgLineElement: AsRef<web_sys::features::gen_SvgPathElement::SvgPathElement>`
which is required by `xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgPathElement<_, _>`
`web_sys::features::gen_SvgLineElement::SvgLineElement: AsRef<web_sys::features::gen_SvgPolygonElement::SvgPolygonElement>`
which is required by `xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgPolygonElement<_, _>`
`web_sys::features::gen_SvgLineElement::SvgLineElement: AsRef<web_sys::features::gen_SvgPolylineElement::SvgPolylineElement>`
which is required by `xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgPolylineElement<_, _>`
`web_sys::features::gen_SvgLineElement::SvgLineElement: AsRef<web_sys::features::gen_SvgRectElement::SvgRectElement>`
which is required by `xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgRectElement<_, _>`
`web_sys::features::gen_SvgLineElement::SvgLineElement: AsRef<web_sys::features::gen_SvgTextContentElement::SvgTextContentElement>`
which is required by `xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgTextContentElement<_, _>`
`&xilem_web::elements::svg::Line<_, _, ()>: View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>`
which is required by `&xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgCircleElement<_, _>`
`&xilem_web::elements::svg::Line<_, _, ()>: View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>`
which is required by `&xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgEllipseElement<_, _>`
`&xilem_web::elements::svg::Line<_, _, ()>: View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>`
which is required by `&xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvggElement<_, _>`
`&xilem_web::elements::svg::Line<_, _, ()>: View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>`
which is required by `&xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgPathElement<_, _>`
`&xilem_web::elements::svg::Line<_, _, ()>: View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>`
which is required by `&xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgPolygonElement<_, _>`
`&xilem_web::elements::svg::Line<_, _, ()>: View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>`
which is required by `&xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgPolylineElement<_, _>`
`&xilem_web::elements::svg::Line<_, _, ()>: View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>`
which is required by `&xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgRectElement<_, _>`
`&xilem_web::elements::svg::Line<_, _, ()>: View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>`
which is required by `&xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgTextContentElement<_, _>`
`&mut xilem_web::elements::svg::Line<_, _, ()>: View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>`
which is required by `&mut xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgCircleElement<_, _>`
`&mut xilem_web::elements::svg::Line<_, _, ()>: View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>`
which is required by `&mut xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgEllipseElement<_, _>`
`&mut xilem_web::elements::svg::Line<_, _, ()>: View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>`
which is required by `&mut xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvggElement<_, _>`
`&mut xilem_web::elements::svg::Line<_, _, ()>: View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>`
which is required by `&mut xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgPathElement<_, _>`
`&mut xilem_web::elements::svg::Line<_, _, ()>: View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>`
which is required by `&mut xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgPolygonElement<_, _>`
`&mut xilem_web::elements::svg::Line<_, _, ()>: View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>`
which is required by `&mut xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgPolylineElement<_, _>`
`&mut xilem_web::elements::svg::Line<_, _, ()>: View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>`
which is required by `&mut xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgRectElement<_, _>`
`&mut xilem_web::elements::svg::Line<_, _, ()>: View<_, _, ViewCtx, Box<(dyn xilem_web::Message + 'static)>>`
which is required by `&mut xilem_web::elements::svg::Line<_, _, ()>: xilem_web::interfaces::SvgTextContentElement<_, _>`
warning: unused import: `interfaces`
--> src/main.rs:1:47
|
1 | use xilem_web::{document_body, elements::svg, interfaces::*, svg::peniko::Color, App};
| ^^^^^^^^^^
|
= note: `#[warn(unused_imports)]` on by default
For more information about this error, try `rustc --explain E0599`.
warning: `xilem_web-error-message-repro` (bin "xilem_web-error-message-repro") generated 1 warning
error: could not compile `xilem_web-error-message-repro` (bin "xilem_web-error-message-repro") due to 1 previous error; 1 warning emitted
Desired output
I'm not sure to be honest, but this error message seems to be worse than not having it at all.
Rationale and extra context
In xilem_web DOM interfaces are emulated via extension traits heavily relying on super trait-bounds with associated type bounds, something like this:
pub trait SvgPathElement<State, Action = ()>:
SvgGeometryElement<State, Action, DomNode: AsRef<web_sys::SvgPathElement>>
{
fn fill(self, brush: impl Into<peniko::Brush>) -> crate::svg::Fill<Self, State, Action> {
crate::svg::fill(self, brush)
}
}
The provided repro-example is a special cased fill
method (i.e. exists on multiple off those traits (8 if I counted correctly)).
This error message is only raised, when having all those traits in scope (i.e. use xilem_web::interfaces::*
).
It's practically not possible that these bounds can be fulfilled with the line
element, as DomNode: AsRef<_>
can not be fulfilled with the associated type DomNode = web_sys::SvgLineElement
for any of those with the fill
method.
Originally this error message was raised (due to a now fixed bug) in linebender/xilem#446 and posted on zulip
Other cases
No response
Rust Version
rustc 1.82.0-nightly (8e86c9567 2024-08-01)
binary: rustc
commit-hash: 8e86c9567154dc5a9ada15ab196d23eae2bd7d89
commit-date: 2024-08-01
host: x86_64-unknown-linux-gnu
release: 1.82.0-nightly
LLVM version: 19.1.0
Anything else?
No response