summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel McCarney <daniel@binaryparadox.net>2024-07-05 11:25:46 -0400
committerDaniel McCarney <daniel@binaryparadox.net>2024-09-09 11:42:49 -0400
commit7edc60029d7c41b3ef5a929ba54f62898f850883 (patch)
tree8e9b6f845fa9d06885b7dc1eb3fc9267b47e46f4
parentcc17f0e0b479c466d6a187c84c40fe0999dd22e7 (diff)
rslice: rustls_str -> str
Offer an `unsafe` route for Rust code to translate a `rustls_str` to a `&str`.
-rw-r--r--src/rslice.rs11
-rw-r--r--tests/rustls_version.rs8
2 files changed, 12 insertions, 7 deletions
diff --git a/src/rslice.rs b/src/rslice.rs
index c14c47e..d653cef 100644
--- a/src/rslice.rs
+++ b/src/rslice.rs
@@ -212,6 +212,15 @@ impl<'a> rustls_str<'a> {
pub unsafe fn into_static(self) -> rustls_str<'static> {
std::mem::transmute(self)
}
+
+ /// Change a rustls_str back to a &str.
+ ///
+ /// # Safety
+ ///
+ /// The caller must ensure the rustls_str data is valid utf8
+ pub unsafe fn to_str(&self) -> &str {
+ str::from_utf8_unchecked(slice::from_raw_parts(self.data as *const u8, self.len))
+ }
}
// If the assertion about Rust code being the only creator of rustls_str objects
@@ -247,6 +256,8 @@ fn test_rustls_str() {
assert_eq!(*rs.data, 'a' as c_char);
assert_eq!(*rs.data.offset(3), 'd' as c_char);
}
+ let rs = unsafe { rs.to_str() };
+ assert_eq!(rs, s);
}
#[cfg(test)]
diff --git a/tests/rustls_version.rs b/tests/rustls_version.rs
index 446cd58..4830d3c 100644
--- a/tests/rustls_version.rs
+++ b/tests/rustls_version.rs
@@ -1,7 +1,6 @@
use std::fs::File;
use std::io::Read;
use std::path::PathBuf;
-use std::{slice, str};
use toml::Table;
@@ -51,12 +50,7 @@ fn rustls_version_match() {
// E.g.:
// rustls-ffi/0.13.0/rustls/0.23.4
let rustls_ffi_version = rustls_version();
- let rustls_ffi_version = unsafe {
- str::from_utf8_unchecked(slice::from_raw_parts(
- rustls_ffi_version.data as *const u8,
- rustls_ffi_version.len,
- ))
- };
+ let rustls_ffi_version = unsafe { rustls_ffi_version.to_str() };
let rustls_ffi_version_parts = rustls_ffi_version.split('/').collect::<Vec<_>>();
assert_eq!(
rustls_ffi_version_parts,