MyClass
只是一个字节数组。由于我希望与MyClass
之间进行灵活的转换,因此我将From
实施为From<T> for MyClass where T: AsRef<[u8]>
。这是有效的,但是一旦我实现了相应的AsRef<[u8]> for MyClass
,我就会得到一个相互冲突的实现&#34;错误。
use std::convert::{AsRef, From};
const MY_SIZE: usize = 32;
pub struct MyClass(pub [u8; MY_SIZE]);
impl AsRef<[u8]> for MyClass {
fn as_ref(&self) -> &[u8] {
&self.0
}
}
impl<T> From<T> for MyClass
where
T: AsRef<[u8]>,
{
fn from(byteable: T) -> Self {
let bytes: &[u8] = byteable.as_ref();
assert_eq!(bytes.len(), MY_SIZE);
let mut dst: [u8; MY_SIZE] = [0; MY_SIZE];
dst.copy_from_slice(&bytes);
MyClass(dst)
}
}
fn main() {}
error[E0119]: conflicting implementations of trait `std::convert::From<MyClass>` for type `MyClass`:
--> src/main.rs:13:1
|
13 | / impl<T> From<T> for MyClass
14 | | where
15 | | T: AsRef<[u8]>,
16 | | {
... |
23 | | }
24 | | }
| |_^
|
= note: conflicting implementation in crate `core`:
- impl<T> std::convert::From<T> for T;
我可以避免错误,还是有更好的方法来设计这个库?