The next step could be to remove `.collect()` and use `.next()` for each subsequent part. Zero allocations!
let mut parts = l.split(&['@', ',', ':', 'x'][..])
.flat_map(|s| s.trim().parse::<i32>().ok());
let x = parts.next().expect("x as i32");
let y = parts.next().expect("y as i32");
let w = parts.next().expect("width as i32");
let h = parts.next().expect("height as i32");