// SPDX-FileCopyrightText: Copyright (C) 2024 Roland Csaszar // SPDX-License-Identifier: EUPL-1.2 // // Project: token-string // File: main.rs // Date: 16.Nov.2024 // ============================================================================= //! This is just an example on how to use [`token_string`]. #![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}; /// Main entry point of the program. 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 = 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); // Create the new `TokenString`. An error may be returned. let s21_s22 = builder.concat(&s22).collect().unwrap(); // Check, if the result is actually "Hello, world!". 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:?}"); }