Skip to content

Commit cbe98a9

Browse files
committed
Use differently named __private module per patch release
1 parent 957996f commit cbe98a9

File tree

7 files changed

+54
-10
lines changed

7 files changed

+54
-10
lines changed

serde/build.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,29 @@
11
use std::env;
2+
use std::fs;
3+
use std::path::PathBuf;
24
use std::process::Command;
35
use std::str;
46

7+
const PRIVATE: &str = "\
8+
#[doc(hidden)]
9+
pub mod __private$$ {
10+
#[doc(hidden)]
11+
pub use crate::private::*;
12+
}
13+
use serde_core::__private$$ as serde_core_private;
14+
";
15+
516
// The rustc-cfg strings below are *not* public API. Please let us know by
617
// opening a GitHub issue if your build environment requires some way to enable
718
// these cfgs other than by executing our build script.
819
fn main() {
920
println!("cargo:rerun-if-changed=build.rs");
1021

22+
let out_dir = PathBuf::from(env::var_os("OUT_DIR").unwrap());
23+
let patch_version = env::var("CARGO_PKG_VERSION_PATCH").unwrap();
24+
let module = PRIVATE.replace("$$", &patch_version);
25+
fs::write(out_dir.join("private.rs"), module).unwrap();
26+
1127
let minor = match rustc_minor_version() {
1228
Some(minor) => minor,
1329
None => return,

serde/src/lib.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -239,8 +239,9 @@ mod integer128;
239239

240240
// Used by generated code and doc tests. Not public API.
241241
#[doc(hidden)]
242-
#[path = "private/mod.rs"]
243-
pub mod __private;
242+
mod private;
243+
244+
include!(concat!(env!("OUT_DIR"), "/private.rs"));
244245

245246
// Re-export #[derive(Serialize, Deserialize)].
246247
//

serde/src/private/de.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ pub use self::content::{
1717
UntaggedUnitVisitor,
1818
};
1919

20-
pub use serde_core::__private::InPlaceSeed;
20+
pub use crate::serde_core_private::InPlaceSeed;
2121

2222
/// If the missing field is of type `Option<T>` then treat is as `None`,
2323
/// otherwise it is an error.
@@ -216,8 +216,8 @@ mod content {
216216
self, Deserialize, DeserializeSeed, Deserializer, EnumAccess, Expected, IgnoredAny,
217217
MapAccess, SeqAccess, Unexpected, Visitor,
218218
};
219-
use serde_core::__private::size_hint;
220-
pub use serde_core::__private::Content;
219+
use crate::serde_core_private::size_hint;
220+
pub use crate::serde_core_private::Content;
221221

222222
pub fn content_as_str<'a, 'de>(content: &'a Content<'de>) -> Option<&'a str> {
223223
match *content {

serde/src/private/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ pub use crate::lib::option::Option::{self, None, Some};
1212
pub use crate::lib::ptr;
1313
pub use crate::lib::result::Result::{self, Err, Ok};
1414

15-
pub use serde_core::__private::string::from_utf8_lossy;
15+
pub use crate::serde_core_private::string::from_utf8_lossy;
1616

1717
#[cfg(any(feature = "alloc", feature = "std"))]
1818
pub use crate::lib::{ToString, Vec};

serde_core/build.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,28 @@
11
use std::env;
2+
use std::fs;
3+
use std::path::PathBuf;
24
use std::process::Command;
35
use std::str;
46

7+
const PRIVATE: &str = "\
8+
#[doc(hidden)]
9+
pub mod __private$$ {
10+
#[doc(hidden)]
11+
pub use crate::private::*;
12+
}
13+
";
14+
515
// The rustc-cfg strings below are *not* public API. Please let us know by
616
// opening a GitHub issue if your build environment requires some way to enable
717
// these cfgs other than by executing our build script.
818
fn main() {
919
println!("cargo:rerun-if-changed=build.rs");
1020

21+
let out_dir = PathBuf::from(env::var_os("OUT_DIR").unwrap());
22+
let patch_version = env::var("CARGO_PKG_VERSION_PATCH").unwrap();
23+
let module = PRIVATE.replace("$$", &patch_version);
24+
fs::write(out_dir.join("private.rs"), module).unwrap();
25+
1126
let minor = match rustc_minor_version() {
1227
Some(minor) => minor,
1328
None => return,

serde_core/src/lib.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -252,9 +252,18 @@ pub use crate::ser::{Serialize, Serializer};
252252

253253
// Used by generated code. Not public API.
254254
#[doc(hidden)]
255-
#[path = "private/mod.rs"]
256-
pub mod __private;
257-
use self::__private as private;
255+
mod private;
256+
257+
// Used by declarative macro generated code. Not public API.
258+
#[doc(hidden)]
259+
pub mod __private {
260+
#[doc(hidden)]
261+
pub use crate::private::doc;
262+
#[doc(hidden)]
263+
pub use core::result::Result;
264+
}
265+
266+
include!(concat!(env!("OUT_DIR"), "/private.rs"));
258267

259268
#[cfg(all(not(feature = "std"), no_core_error))]
260269
mod std_error;

serde_derive/src/lib.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,10 @@ struct private;
9696

9797
impl private {
9898
fn ident(&self) -> Ident {
99-
Ident::new("__private", Span::call_site())
99+
Ident::new(
100+
concat!("__private", env!("CARGO_PKG_VERSION_PATCH")),
101+
Span::call_site(),
102+
)
100103
}
101104
}
102105

0 commit comments

Comments
 (0)