use std::collections::{HashMap, HashSet};
type Snapshot = HashMap<String, HashSet<String>>;
fn compare_snapshots(snapshot1: Snapshot, snapshot2: Snapshot, entry1: String, entry2: String) {}
fn main() {
    let snapshot1 = HashMap::new();
    let snapshot2 = HashMap::new();
    let entries1: HashSet<String> = snapshot1.keys().cloned().collect();
    let entries2: HashSet<String> = snapshot2.keys().cloned().collect();
    let entries: Vec<String> = entries1.union(&entries2).cloned().collect();
    for e1 in entries {
        for e2 in entries {
            if e1 < e2 {
                compare_snapshots(snapshot1, snapshot2, *e1.to_string(), *e2.to_string());
            }
        }
    }
}
And the following errors:
error[E0308]: mismatched types
  --> src/main.rs:18:57
   |
18 |                 compare_snapshots(snapshot1, snapshot2, *e1.to_string(), *e2.to_string());
   |                                                         ^^^^^^^^^^^^^^^ expected struct `std::string::String`, found str
   |
   = note: expected type `std::string::String`
              found type `str`
error[E0308]: mismatched types
  --> src/main.rs:18:74
   |
18 |                 compare_snapshots(snapshot1, snapshot2, *e1.to_string(), *e2.to_string());
   |                                                                          ^^^^^^^^^^^^^^^ expected struct `std::string::String`, found str
   |
   = note: expected type `std::string::String`
              found type `str`
Why did I get them given that I explicitly made gave entries a Vec<String> type?
 
    