Unused
About Unused
The unused crate allows types to have unused generic parameters that do
not act like they are owned.
Example
Imagine we have a struct LazyFromStr, which contains a &'static str and can
lazily create a T using its FromStr impl.
To have T be a generic parameter of LazyFromStr, we can use a
PhantomData. Otherwise, we get a
compilation error that the parameter T is never used.
use PhantomData;
use FromStr;
The issue with using PhantomData is that
LazyFromStr<T> is only Send and Sync if T also is, even though
our LazyFromStr<T> does not own a T.
This is where unused comes in.
// We need to import `Unused`.
use Unused;
use Infallible;
use Rc;
// `RcString` is not `Send` or `Sync`.
;
let lazy: = LazyFromStr ;
use thread;
// `lazy` is `Send` (even though `RcString` is not), so we can send it between threads.
spawn
.join
.unwrap;
Usage
First, add unused to your dependencies in Cargo.toml:
= "0.1"
Create a simple struct with an unused generic parameter:
use Unused;
let foo: = Foo ;
See the docs for the full documentation.
Feedback
If you experience any issues or have any feedback, please feel free to open an issue on the GitHub repository.
Related/Similar Crates
- type_variance - Marker traits for subtype variance
- ghost - Define your own PhantomData
- rich-phantoms - Phantom types with control over variance and sync/sync inheritance
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.