do actually already do work in dpkg. You represent them as:
Build-Depends:
librust-foo-dev (>= 0.4),
librust-foo-dev (<< 0.6)
><--snip->
> Provides: librust-foo-dev = 0.4.2-1
>
> then the conjunctive, versioned Depends would be able to figure out how
> to satisfy it.
The problem is that once versioned provides get involved
librust-foo-dev (>= 0.4), librust-foo-dev (<< 0.6)
is not equivalent to
librust-foo-dev (>= 0.4, << 0.6)
Specifically lets say you have three packages.
librust-foo-dev version 0.9.1-1
librust-foo-0.1-dev version 0.1.1-1 provides: librust-foo-dev (= 0.1.1-1)
librust-foo-0.4-dev version 0.4.1-1 provides: librust-foo-dev (= 0.4.1-1)
Installing (or having already installed) librust-foo-dev and
librust-foo-0.1-dev will satisfy "librust-foo-dev (>= 0.4),
librust-foo-dev (<< 0.6)" just fine but it is almost-certainly
not what you as the developer intended.