Skip to content

Commit 12682bd

Browse files
committed
Removed unnecessary String interface, already covered by core
1 parent 73d209a commit 12682bd

File tree

2 files changed

+9
-134
lines changed

2 files changed

+9
-134
lines changed

src/de.rs

+8-6
Original file line numberDiff line numberDiff line change
@@ -246,13 +246,15 @@ impl<'de, const N: usize> Deserialize<'de> for String<N> {
246246
where
247247
E: de::Error,
248248
{
249-
let mut bytes = Vec::new();
250-
if bytes.extend_from_slice(v).is_err() {
251-
return Err(E::invalid_value(de::Unexpected::Bytes(v), &self));
252-
}
249+
let mut s = String::new();
253250

254-
String::from_utf8(bytes)
255-
.map_err(|_| E::invalid_value(de::Unexpected::Bytes(v), &self))
251+
s.push_str(
252+
core::str::from_utf8(v)
253+
.map_err(|_| E::invalid_value(de::Unexpected::Bytes(v), &self))?,
254+
)
255+
.map_err(|_| E::invalid_length(v.len(), &self))?;
256+
257+
Ok(s)
256258
}
257259
}
258260

src/string.rs

+1-128
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,4 @@
1-
use core::{
2-
fmt,
3-
fmt::Write,
4-
hash,
5-
mem::{self, MaybeUninit},
6-
ops, str,
7-
str::Utf8Error,
8-
};
1+
use core::{fmt, fmt::Write, hash, ops, str};
92

103
use hash32;
114

@@ -16,13 +9,6 @@ pub struct String<const N: usize> {
169
vec: Vec<u8, N>,
1710
}
1811

19-
// impl<const N: usize> String<N> {
20-
// /// `String` `const` constructor; wrap the returned value in [`String`](../struct.String.html)
21-
// pub const fn new() -> Self {
22-
// Self { vec: Vec::new() }
23-
// }
24-
// }
25-
2612
impl<const N: usize> String<N> {
2713
/// Constructs a new, empty `String` with a fixed capacity of `N`
2814
///
@@ -44,65 +30,6 @@ impl<const N: usize> String<N> {
4430
Self { vec: Vec::new() }
4531
}
4632

47-
/// Converts a vector of bytes into a `String`.
48-
///
49-
/// A string slice ([`&str`]) is made of bytes ([`u8`]), and a vector of bytes
50-
/// ([`Vec<u8>`]) is made of bytes, so this function converts between the
51-
/// two. Not all byte slices are valid `String`s, however: `String`
52-
/// requires that it is valid UTF-8. `from_utf8()` checks to ensure that
53-
/// the bytes are valid UTF-8, and then does the conversion.
54-
///
55-
/// See std::String for further information.
56-
///
57-
/// # Examples
58-
///
59-
/// Basic usage:
60-
///
61-
/// ```
62-
/// use heapless::{String, Vec};
63-
///
64-
/// let mut v: Vec<u8, 8> = Vec::new();
65-
/// v.push('a' as u8).unwrap();
66-
/// v.push('b' as u8).unwrap();
67-
///
68-
/// let s = String::from_utf8(v).unwrap();
69-
/// assert!(s.len() == 2);
70-
/// ```
71-
///
72-
/// Incorrect bytes:
73-
///
74-
/// ```
75-
/// use heapless::{String, Vec};
76-
///
77-
/// // some invalid bytes, in a vector
78-
///
79-
/// let mut v: Vec<u8, 8> = Vec::new();
80-
/// v.push(0).unwrap();
81-
/// v.push(159).unwrap();
82-
/// v.push(146).unwrap();
83-
/// v.push(150).unwrap();
84-
/// assert!(String::from_utf8(v).is_err());
85-
/// ```
86-
#[inline]
87-
pub fn from_utf8(vec: Vec<u8, N>) -> Result<String<N>, Utf8Error> {
88-
// validate input
89-
str::from_utf8(&*vec)?;
90-
91-
Ok(unsafe { String::from_utf8_unchecked(vec) })
92-
}
93-
94-
/// Converts a vector of bytes to a `String` without checking that the
95-
/// string contains valid UTF-8.
96-
///
97-
/// See the safe version, `from_utf8`, for more details.
98-
#[inline]
99-
pub unsafe fn from_utf8_unchecked(mut vec: Vec<u8, N>) -> String<N> {
100-
// FIXME this may result in a memcpy at runtime
101-
let vec_ = mem::replace(&mut vec, MaybeUninit::uninit().assume_init());
102-
mem::forget(vec);
103-
String { vec: vec_ }
104-
}
105-
10633
/// Converts a `String` into a byte vector.
10734
///
10835
/// This consumes the `String`, so we do not need to copy its contents.
@@ -544,14 +471,6 @@ impl<const N: usize> PartialEq<String<N>> for &str {
544471

545472
impl<const N: usize> Eq for String<N> {}
546473

547-
// impl<const N: usize, D: core::fmt::Display> From<D> for String<N> {
548-
// fn from(s: D) -> Self {
549-
// let mut new = String::new();
550-
// write!(&mut new, "{}", s).unwrap();
551-
// new
552-
// }
553-
// }
554-
555474
macro_rules! impl_from_num {
556475
($num:ty, $size:expr) => {
557476
impl<const N: usize> From<$num> for String<N> {
@@ -647,52 +566,6 @@ mod tests {
647566
let _: String<4> = String::from("12345");
648567
}
649568

650-
#[test]
651-
fn from_utf8() {
652-
let mut v: Vec<u8, 8> = Vec::new();
653-
v.push('a' as u8).unwrap();
654-
v.push('b' as u8).unwrap();
655-
656-
let s = String::from_utf8(v).unwrap();
657-
assert_eq!(s, "ab");
658-
}
659-
660-
#[test]
661-
fn from_utf8_uenc() {
662-
let mut v: Vec<u8, 8> = Vec::new();
663-
v.push(240).unwrap();
664-
v.push(159).unwrap();
665-
v.push(146).unwrap();
666-
v.push(150).unwrap();
667-
668-
assert!(String::from_utf8(v).is_ok());
669-
}
670-
671-
#[test]
672-
fn from_utf8_uenc_err() {
673-
let mut v: Vec<u8, 8> = Vec::new();
674-
v.push(0).unwrap();
675-
v.push(159).unwrap();
676-
v.push(146).unwrap();
677-
v.push(150).unwrap();
678-
679-
assert!(String::from_utf8(v).is_err());
680-
}
681-
682-
#[test]
683-
fn from_utf8_unchecked() {
684-
let mut v: Vec<u8, 8> = Vec::new();
685-
v.push(104).unwrap();
686-
v.push(101).unwrap();
687-
v.push(108).unwrap();
688-
v.push(108).unwrap();
689-
v.push(111).unwrap();
690-
691-
let s = unsafe { String::from_utf8_unchecked(v) };
692-
693-
assert_eq!(s, "hello");
694-
}
695-
696569
#[test]
697570
fn from_num() {
698571
let v: String<20> = String::from(18446744073709551615 as u64);

0 commit comments

Comments
 (0)