Add check for rust version

This commit is contained in:
Charles-Xavier Roy
2023-02-17 16:25:16 -05:00
parent bd4a0981ba
commit f7636428ed
4 changed files with 18 additions and 9 deletions
+5
View File
@@ -114,6 +114,11 @@ fn main() {
println!("cargo:rustc-cfg=no_std_atomic"); println!("cargo:rustc-cfg=no_std_atomic");
} }
} }
// Support for core::ffi::CStr and alloc::ffi::CString stabilized in Rust 1.64.
if minor < 64 {
println!("cargo:rustc-cfg=no_core_cstr");
}
} }
fn rustc_minor_version() -> Option<u32> { fn rustc_minor_version() -> Option<u32> {
+4 -4
View File
@@ -666,10 +666,10 @@ impl<'de: 'a, 'a> Deserialize<'de> for &'a [u8] {
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
#[cfg(feature = "std")] #[cfg(any(feature = "std", all(not(no_core_cstr), feature = "alloc")))]
struct CStringVisitor; struct CStringVisitor;
#[cfg(feature = "std")] #[cfg(any(feature = "std", all(not(no_core_cstr), feature = "alloc")))]
impl<'de> Visitor<'de> for CStringVisitor { impl<'de> Visitor<'de> for CStringVisitor {
type Value = CString; type Value = CString;
@@ -720,7 +720,7 @@ impl<'de> Visitor<'de> for CStringVisitor {
} }
} }
#[cfg(feature = "std")] #[cfg(any(feature = "std", all(not(no_core_cstr), feature = "alloc")))]
impl<'de> Deserialize<'de> for CString { impl<'de> Deserialize<'de> for CString {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where where
@@ -747,7 +747,7 @@ macro_rules! forwarded_impl {
} }
} }
#[cfg(all(feature = "std", not(no_de_boxed_c_str)))] #[cfg(all(any(feature = "std", all(not(no_core_cstr), feature = "alloc")), not(no_de_boxed_c_str)))]
forwarded_impl!((), Box<CStr>, CString::into_boxed_c_str); forwarded_impl!((), Box<CStr>, CString::into_boxed_c_str);
#[cfg(not(no_core_reverse))] #[cfg(not(no_core_reverse))]
+7 -3
View File
@@ -176,7 +176,6 @@ mod lib {
pub use self::core::clone::{self, Clone}; pub use self::core::clone::{self, Clone};
pub use self::core::convert::{self, From, Into}; pub use self::core::convert::{self, From, Into};
pub use self::core::default::{self, Default}; pub use self::core::default::{self, Default};
pub use self::core::ffi::CStr;
pub use self::core::fmt::{self, Debug, Display}; pub use self::core::fmt::{self, Debug, Display};
pub use self::core::marker::{self, PhantomData}; pub use self::core::marker::{self, PhantomData};
pub use self::core::num::Wrapping; pub use self::core::num::Wrapping;
@@ -219,10 +218,15 @@ mod lib {
#[cfg(feature = "std")] #[cfg(feature = "std")]
pub use std::collections::{BTreeMap, BTreeSet, BinaryHeap, LinkedList, VecDeque}; pub use std::collections::{BTreeMap, BTreeSet, BinaryHeap, LinkedList, VecDeque};
#[cfg(all(feature = "alloc", not(feature = "std")))] #[cfg(all(not(no_core_cstr), not(feature = "std")))]
pub use core::ffi::CStr;
#[cfg(feature = "std")]
pub use std::ffi::CStr;
#[cfg(all(not(no_core_cstr), feature = "alloc", not(feature = "std")))]
pub use alloc::ffi::{CString}; pub use alloc::ffi::{CString};
#[cfg(feature = "std")] #[cfg(feature = "std")]
pub use std::ffi::{CString}; pub use std::ffi::CString;
#[cfg(feature = "std")] #[cfg(feature = "std")]
pub use std::{error, net}; pub use std::{error, net};
+2 -2
View File
@@ -72,7 +72,7 @@ impl<'a> Serialize for fmt::Arguments<'a> {
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
#[cfg(feature = "std")] #[cfg(any(feature = "std", not(no_core_cstr)))]
impl Serialize for CStr { impl Serialize for CStr {
#[inline] #[inline]
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
@@ -83,7 +83,7 @@ impl Serialize for CStr {
} }
} }
#[cfg(feature = "std")] #[cfg(any(feature = "std", all(not(no_core_cstr), feature = "alloc")))]
impl Serialize for CString { impl Serialize for CString {
#[inline] #[inline]
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>