#![expect(
clippy::print_stdout,
reason = "We are in a CLI program, we need to print something"
)]
#![expect(clippy::use_debug, reason = "We are trying to show debug printing")]
use token_string::{Builder, Collect as _, Concat as _, TokenString};
fn main() {
let str = "HUGO HUGO HUGO HUGO".to_owned();
let s1 = TokenString::try_from(str).unwrap();
println!("S1: {s1}");
println!("S1 debug: {s1:?}");
let s1_str: &str = s1.as_str();
let s1_bytes: &[u8] = s1.as_bytes();
let s1_string = s1.as_string();
let s1_chars: Vec<char> = s1.as_chars();
assert!(&s1 == s1_str, "Should be the same!");
assert!(&s1 == s1_bytes, "Should be the same!");
assert!(s1 == s1_string, "Should be the same!");
assert!(s1.as_chars() == s1_chars, "Should be the same!");
println!("========================================");
let s2 = TokenString::try_from("HUGO06").unwrap();
for i in &s2 {
println!("S2 iterator: {i}");
}
println!("========================================");
let s3: TokenString = "HUGO HUGO HUGO".try_into().unwrap();
let s4 = TokenString::default();
println!("S3 debug: {s3:?}\nS4 debug: {s4:?}");
println!("S3: '{s3}'\nS4: '{s4}'");
println!("S2[2..=43]: {}", &s2[2 ..= 3]);
println!("========================================");
let s21 = TokenString::try_from("Hello, ").unwrap();
let s22 = TokenString::try_from("world!").unwrap();
let mut builder = Builder::<'_, 2>::new(&s21);
let s21_s22 = builder.concat(&s22).collect().unwrap();
println!("S11 + S22:\n'{s21_s22}'\nshould be:\n'Hello, world!'");
println!("========================================");
let mut b = Builder::<'_, 64>::new(&s3);
println!("Only S3: {b}");
let c = b.concat(&s3).concat(&s3).unwrap();
println!("3x S3: {c}");
let s5 = c.collect_checked().unwrap();
println!("S5: {s5:?}");
println!("========================================");
let s6 = TokenString::try_from("1").unwrap();
let s7: TokenString = "2".try_into().unwrap();
let mut d = Builder::<'_, 64>::new(&s2);
println!("Only S2: {d}");
let e = d.concat(&s6).concat(&s7).unwrap();
println!("S2 + S6 + S7: {e}");
let s8 = e.collect_checked().unwrap();
println!("S8: {s8:?}");
println!("========================================");
let s9 = TokenString::try_from("3").unwrap();
let s10: TokenString = "4".try_into().unwrap();
let s11 = Builder::<'_, 64>::new(&s6)
.concat(&s7)
.concat(&s9)
.concat(&s10)
.collect()
.unwrap();
println!("S11: {s11:?}");
println!("========================================");
let s12 = token_string::concat!(
&s6,
&s7,
&s9,
&s10,
&TokenString::try_from("asd").unwrap()
)
.unwrap();
println!("S12: {s12:?}");
}