7 releases
0.1.6 | Aug 23, 2024 |
---|---|
0.1.5 | Apr 13, 2024 |
0.1.4 | Jun 29, 2023 |
0.1.3 | Mar 26, 2023 |
0.0.0 |
|
#1554 in Rust patterns
185 downloads per month
Used in 2 crates
19KB
131 lines
negative-impl
Negative trait implementations on stable Rust.
This crate emulates the unstable negative_impls
feature
by generating a trait implementation with a condition that will never be true.
Usage
Add this to your Cargo.toml
:
[dependencies]
negative-impl = "0.1"
Examples
use negative_impl::negative_impl;
pub struct Type {}
#[negative_impl]
impl !Send for Type {}
#[negative_impl]
impl !Sync for Type {}
Supported traits
Currently this crate only supports auto traits.
Limitations
Conflicting implementations
The following code cannot compile due to impl<T: Send> Trait for T
and
impl Trait for Type
conflict.
use negative_impl::negative_impl;
pub struct Type {}
#[negative_impl]
impl !Send for Type {}
trait Trait {}
impl<T: Send> Trait for T {}
impl Trait for Type {}
error[E0119]: conflicting implementations of trait `Trait` for type `Type`:
--> src/lib.rs:60:1
|
14 | impl<T: Send> Trait for T {}
| ------------------------- first implementation here
15 | impl Trait for Type {}
| ^^^^^^^^^^^^^^^^^^^ conflicting implementation for `Type`
The above code can be compiled using the unstable negative_impls
feature.
#![feature(negative_impls)]
pub struct Type {}
impl !Send for Type {}
trait Trait {}
impl<T: Send> Trait for T {}
impl Trait for Type {}
License
Licensed under either of Apache License, Version 2.0 or MIT license at your option.
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.
Dependencies
~230–670KB
~16K SLoC