| A private type or trait was used in a public associated type signature. | |
| Erroneous code example: | |
| ```compile_fail,E0446 | |
| struct Bar; | |
| pub trait PubTr { | |
| type Alias; | |
| } | |
| impl PubTr for u8 { | |
| type Alias = Bar; // error private type in public interface | |
| } | |
| fn main() {} | |
| ``` | |
| There are two ways to solve this error. The first is to make the public type | |
| signature only public to a module that also has access to the private type. | |
| This is done by using pub(crate) or pub(in crate::my_mod::etc) | |
| Example: | |
| ``` | |
| struct Bar; | |
| pub(crate) trait PubTr { // only public to crate root | |
| type Alias; | |
| } | |
| impl PubTr for u8 { | |
| type Alias = Bar; | |
| } | |
| fn main() {} | |
| ``` | |
| The other way to solve this error is to make the private type public. | |
| Example: | |
| ``` | |
| pub struct Bar; // we set the Bar trait public | |
| pub trait PubTr { | |
| type Alias; | |
| } | |
| impl PubTr for u8 { | |
| type Alias = Bar; | |
| } | |
| fn main() {} | |
| ``` |