diff --git a/src/librustc_error_codes/error_codes/E0446.md b/src/librustc_error_codes/error_codes/E0446.md index 77a1834ece42f..6ec47c4962c06 100644 --- a/src/librustc_error_codes/error_codes/E0446.md +++ b/src/librustc_error_codes/error_codes/E0446.md @@ -4,10 +4,10 @@ Erroneous code example: ```compile_fail,E0446 #![deny(private_in_public)] +struct Bar(u32); -mod Foo { - struct Bar(u32); - +mod foo { + use crate::Bar; pub fn bar() -> Bar { // error: private type in public interface Bar(0) } @@ -16,15 +16,31 @@ mod Foo { fn main() {} ``` -To solve this error, please ensure that the type is also public. The type -can be made inaccessible if necessary by placing it into a private inner -module, but it still has to be marked with `pub`. +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: ``` -mod Foo { - pub struct Bar(u32); // we set the Bar type public +struct Bar(u32); + +mod foo { + use crate::Bar; + pub(crate) fn bar() -> Bar { // only public to crate root + Bar(0) + } +} +fn main() {} +``` + +The other way to solve this error is to make the private type public. +Example: + +``` +pub struct Bar(u32); // we set the Bar type public +mod foo { + use crate::Bar; pub fn bar() -> Bar { // ok! Bar(0) }