#[non_exhaustive]pub enum Accepted<'a> {
Family(Family),
Type(&'a str),
Suffix(&'a str),
}Expand description
One entry in a file field’s accept list.
Three shapes rather than a string, and all three are in the measured sites:
the MNW server writes image/*, image/jpeg,image/png,image/webp,
.zip,.dmg,.exe,.appimage,.deb,.tar.gz,.clap,.vst3 and, in one place,
.csv,text/csv. A single string would carry all of them and answer nothing
about any of them.
§Why the list is not just a filter
It is read twice. Once to decide what the picker offers, which any of the
three shapes serves, and once to decide which disclosure the field gets:
a preview for a picture, a duration or a waveform for a sound. There is one
upload shape and a media upload is that shape with more of it shown, so the
accept list is what says which more. family is that
question answered once here instead of a media-type parser in each renderer.
§A suffix names no family, on purpose
.mp3 is audio in fact, and nothing here says so. A suffix-to-family table
in a published crate is a mapping that goes stale, disagrees with the host’s
own idea of what a file is, and is wrong the first time somebody hands it a
container. A call site that wants a picture’s preview writes
Family::Image or image/jpeg; a call site listing installer suffixes
wants no disclosure anyway, which is the measured case.
Added 0.31.0, f7261a5a.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Family(Family)
Every file of a family: image/* and its siblings.
Type(&'a str)
One media type, written the way a media type is written:
image/jpeg, text/csv.
Suffix(&'a str)
One file-name suffix, written with its leading dot: .zip, .tar.gz.
A suffix and not an extension, because .tar.gz is a measured site and
is two dots.