Short (up to 65,535 bytes) immutable strings to e.g. parse tokens, implemented in Rust. These are sometimes called "German Strings", because Germans have written the paper mentioning them
at main 102 lines 3.1 kB view raw
1// SPDX-FileCopyrightText: Copyright (C) 2024 Roland Csaszar 2// SPDX-License-Identifier: EUPL-1.2 3// 4// Project: token-string 5// File: main.rs 6// Date: 16.Nov.2024 7// ============================================================================= 8//! This is just an example on how to use [`token_string`]. 9 10#![expect( 11 clippy::print_stdout, 12 reason = "We are in a CLI program, we need to print something" 13)] 14#![expect(clippy::use_debug, reason = "We are trying to show debug printing")] 15 16use token_string::{Builder, Collect as _, Concat as _, TokenString}; 17 18/// Main entry point of the program. 19fn main() { 20 let str = "HUGO HUGO HUGO HUGO".to_owned(); 21 let s1 = TokenString::try_from(str).unwrap(); 22 println!("S1: {s1}"); 23 println!("S1 debug: {s1:?}"); 24 25 let s1_str: &str = s1.as_str(); 26 let s1_bytes: &[u8] = s1.as_bytes(); 27 let s1_string = s1.as_string(); 28 let s1_chars: Vec<char> = s1.as_chars(); 29 30 assert!(&s1 == s1_str, "Should be the same!"); 31 assert!(&s1 == s1_bytes, "Should be the same!"); 32 assert!(s1 == s1_string, "Should be the same!"); 33 assert!(s1.as_chars() == s1_chars, "Should be the same!"); 34 35 println!("========================================"); 36 37 let s2 = TokenString::try_from("HUGO06").unwrap(); 38 for i in &s2 { 39 println!("S2 iterator: {i}"); 40 } 41 42 println!("========================================"); 43 44 let s3: TokenString = "HUGO HUGO HUGO".try_into().unwrap(); 45 let s4 = TokenString::default(); 46 println!("S3 debug: {s3:?}\nS4 debug: {s4:?}"); 47 println!("S3: '{s3}'\nS4: '{s4}'"); 48 println!("S2[2..=43]: {}", &s2[2 ..= 3]); 49 50 println!("========================================"); 51 52 let s21 = TokenString::try_from("Hello, ").unwrap(); 53 let s22 = TokenString::try_from("world!").unwrap(); 54 55 let mut builder = Builder::<'_, 2>::new(&s21); 56 57 // Create the new `TokenString`. An error may be returned. 58 let s21_s22 = builder.concat(&s22).collect().unwrap(); 59 60 // Check, if the result is actually "Hello, world!". 61 println!("S11 + S22:\n'{s21_s22}'\nshould be:\n'Hello, world!'"); 62 63 println!("========================================"); 64 let mut b = Builder::<'_, 64>::new(&s3); 65 println!("Only S3: {b}"); 66 let c = b.concat(&s3).concat(&s3).unwrap(); 67 println!("3x S3: {c}"); 68 let s5 = c.collect_checked().unwrap(); 69 println!("S5: {s5:?}"); 70 71 println!("========================================"); 72 let s6 = TokenString::try_from("1").unwrap(); 73 let s7: TokenString = "2".try_into().unwrap(); 74 let mut d = Builder::<'_, 64>::new(&s2); 75 println!("Only S2: {d}"); 76 let e = d.concat(&s6).concat(&s7).unwrap(); 77 println!("S2 + S6 + S7: {e}"); 78 let s8 = e.collect_checked().unwrap(); 79 println!("S8: {s8:?}"); 80 81 println!("========================================"); 82 let s9 = TokenString::try_from("3").unwrap(); 83 let s10: TokenString = "4".try_into().unwrap(); 84 let s11 = Builder::<'_, 64>::new(&s6) 85 .concat(&s7) 86 .concat(&s9) 87 .concat(&s10) 88 .collect() 89 .unwrap(); 90 println!("S11: {s11:?}"); 91 92 println!("========================================"); 93 let s12 = token_string::concat!( 94 &s6, 95 &s7, 96 &s9, 97 &s10, 98 &TokenString::try_from("asd").unwrap() 99 ) 100 .unwrap(); 101 println!("S12: {s12:?}"); 102}