interns 1.2.0

Object interner
Documentation
use std::io::{self, stdin, stdout, Write};

use std::collections::HashSet;
use interns::Interner;

pub fn main() -> io::Result<()> {
    let mut interner: Interner<str> = Interner::new();

    let mut words = HashSet::new();
    let mut line = String::new();
    loop {
        line.clear();
        print!("> ");
        stdout().flush()?;

        stdin().read_line(&mut line)?;
        let linet = line.trim();
        if linet.is_empty() { break }
        let sym = interner.get_or_intern(linet);
        if words.contains(&sym) {
            println!("String '{linet}' already interned as {sym:?}");
        } else {
            words.insert(sym);
            println!("'{linet}' = {sym:?}");
        }
    }

    println!("\n== Interned symbols ==");
    let mut syms = words.iter().collect::<Vec<_>>();
    syms.sort();
    for sym in syms {
        let s = interner.resolve(*sym).unwrap();
        println!("{sym:?} = '{s}'");
    }

    Ok(())
}