I strongly believe in the first option - having an open Prefix. The reason is that code which matches prefixes in the case of the second and fourth options would probably have to be inside of #[cfg(windows)] blocks if we overload the Verbatim variant or remove variants from anything that isn’t #[cfg(windows)].
Yes, it might break some crates, but I doubt that Prefix is being used beyond two cases:
// Matching some of, but not all of the prefix variants
match prefix {
VerbatimUNC(...) => (),
UNC(...) => (),
_ => ()
}
or
// Matching one of the prefix variants
if let Verbatim(...) = prefix {
} else {
}
In the cases I have seen, using the path components, prefix is simply thrown away in path processing.