digraph {
    subgraph {
        backend [label = "trait Backend"]
        web [label = "struct Web;"]
        native [label = "struct Native;"]

        web_back_impl [label = "impl Backend for Web", shape="rectangle"]
        native_back_impl [label = "impl Backend for Native", shape="rectangle"]

        web -> web_back_impl
        web_back_impl -> backend

        native -> native_back_impl
        native_back_impl -> backend

        ib_trait [label = "trait InputBoxTrait { type Backend; }"]
        ib_web [label = "struct InputBoxWeb {\l    web_ref: Reference,\l}\l"]
        ib_native [label = "struct InputBoxNative {\l    gl_ctx: GlContext,\l}\l"]

        ib_web_trait_impl [label = "impl InputBoxTrait for InputBoxWeb {\l    type Backend = Web;\l}\l", shape="rectangle"]
        ib_native_trait_impl [label = "impl InputBoxTrait for InputBoxNative {\l    type Backend = Native;\l}\l", shape="rectangle"]

        ib_web_trait_impl -> ib_trait
        ib_native_trait_impl -> ib_trait

        ib_web -> ib_web_trait_impl
        ib_web_trait_impl -> web

        ib_native -> ib_native_trait_impl
        ib_native_trait_impl -> native
    }
}