Skip to main content

nanvm_lib/vm/string/
mod.rs

1mod add;
2mod building;
3pub mod casing;
4mod cmp;
5pub(crate) mod code_unit;
6pub(crate) mod create;
7mod debug;
8mod from;
9mod from_char_code;
10mod index;
11mod member_access;
12mod partial_eq;
13mod patterns;
14mod reads;
15mod search;
16
17pub mod to_string;
18
19use crate::vm::IVm;
20
21/// ```
22/// use nanvm_lib::{
23///     vm::{String, IVm, Any, ToString, ToAny},
24///     common::sized_index::SizedIndex,
25///     naive::Naive,
26/// };
27/// fn string_test<A: IVm>() {
28///     let a: String<A> = "Hello, world!".into();
29///     assert_eq!(a.length(), 13);
30///     assert_eq!(a[12], '!' as u16);
31///     let b: String<A> = ['H' as u16, 'i' as u16, '!' as u16].to_string();
32///     let c = a.clone() + b;
33///     let ac: Any<A> = c.to_any();
34///     let d: String<A> = ac.try_into().unwrap();
35///     assert_eq!(d.length(), 16);
36///     assert_eq!(format!("{d:?}"), r#""Hello, world!Hi!""#);
37///     assert_eq!(char::decode_utf16(d.clone()).map(Result::unwrap).collect::<std::string::String>(), "Hello, world!Hi!");
38///     let n = "Hello, world!Hi!".into();
39///     assert_eq!(d, n);
40///     assert_eq!(d, d);
41///     assert_ne!(d, a);
42/// }
43///
44/// string_test::<Naive>();
45/// ```
46#[derive(Clone)]
47pub struct String<A: IVm>(A::InternalString);