1#![cfg_attr(not(any(doc, feature = "std")), no_std)]
2
3#![cfg_attr(feature = "alloc", feature(vec_into_raw_parts))]
16#![feature(str_internals)]
17#![feature(allocator_api)]
18#![feature(slice_range)]
19#![feature(slice_index_methods)]
20#![feature(slice_ptr_get)]
21#![feature(slice_ptr_len)]
22#![feature(const_mut_refs)]
23#![feature(const_fn_trait_bound)]
24#![feature(unicode_internals)]
25
26mod convert;
27mod owned_utf32;
28mod owned_utf8;
29mod slice_utf32;
30mod slice_utf32_index;
31mod slice_utf8;
32mod slice_utf8_index;
33mod string_base;
34mod traits_utf32;
35mod traits_utf8;
36mod validation;
37
38pub use convert::*;
39pub use owned_utf32::*;
40pub use owned_utf8::*;
41pub use slice_utf32::*;
42pub use slice_utf8::*;
43pub use string_base::*;
44
45#[cfg(test)]
46mod tests {
47 use crate::str;
48
49 #[test]
50 fn test() {
51 let foo: &str = "foo".into();
52 let expected: &str = "foobar".into();
53
54 let mut foobar = foo.to_owned();
55 foobar.push_str("bar".into());
56
57 assert_eq!(foobar, *expected);
58 }
59}