The caller (the place where you call new) gets to choose T, not the callee (new itself). Your implementation of new violates this contract, because it doesn't return Route<T> (T being defined by the caller), but Route<Map<_, _>>
You are trying to create a self-referential struct, where the generator field borrows from the path field. Self-referential structs are considered an antipattern and are best to be avoided
What should Route<u8>::new do? Or what about Route<SomeTypeThatHasNoConstructors>::new? Generic arguments are arguments, decided by the caller of the function. They’re not the right tool for what you’re trying to do. You probably want to return a Route<impl Iterator<Item = String>> or make your generator field a Box<dyn Iterator>.