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);