#[non_exhaustive]pub enum FieldKind {
Text,
Secret,
Number,
Email,
Url,
Tel,
Textarea,
Select,
Radio,
Checkbox,
Hidden,
}Expand description
What kind of value a form field takes.
The union of the two vocabularies that diverged, which is what triggered
this crate. They have since converged on their own: both apps now have a
renderFormField emitting the same anatomy, and what is left differing is
the kind set, the error shape, and whether the return is a string or a node.
Validation is deliberately absent. Neither app has a shared story (goingson
validates after collecting the form data, with per-field transform hooks;
Balanced Breakfast has required and nothing else), and a schema that
describes fields but not constraints acquires a constraint layer per app,
which is exactly how the current divergence started. Naming it absent is a
decision; leaving it unmentioned would not be.
#[non_exhaustive] for the reason Fill is: renderers match on this and
the set keeps growing, so growth must not be a lockstep event. Email, Url
and Tel arriving in 0.5.0 is the second growth in two releases.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Text
A single line of text.
Secret
A single line of text that must never be echoed, logged or round-tripped through anything that might persist it.
Number
A number.
An email address.
Distinct from Text because the distinction is not
decoration: a webview renderer emits type="email", which on a touch
device changes the keyboard that appears and turns on the platform’s own
validation. goingson ships to iOS, so collapsing this into text costs a
keyboard with no @ on it.
Added 0.5.0, from goingson’s contact form.
Url
A URL. Same reasoning as Email.
Added 0.5.0, from goingson’s contact-social and contact-feed forms.
Tel
A telephone number. Same reasoning as Email, and the
clearest case of it: the keyboard is a numeric pad rather than letters.
Added 0.5.0, from goingson’s contact-phone form.
Textarea
Several lines of text.
Select
One of a fixed set, offered behind a control that shows one at a time.
Radio
One of a fixed set, with every option on screen at once.
Not a presentation of Select, which is the reading to
resist: what differs is a property of the question. A choice that is
consequential or irreversible has to be readable without opening
anything, because a closed control shows one option and hides the rest,
and the one it shows is whichever was current before the user had read
the alternatives. audiofiles asks whether a library copies samples into
its store or references them where they lie — which cannot be changed
afterwards — and had already promoted that out of a checkbox by hand,
with a comment giving this reason, before the description could say it.
It is also the one HTML input type this enum was missing. Everything
else here is an <input type=...>, a <select> or a <textarea>, and
the hole was radio.
Added 0.8.1, from audiofiles’ Add Library form.
Checkbox
On or off.
Hidden
Carried through the form and never shown.
Implementations§
Source§impl FieldKind
impl FieldKind
Sourcepub const fn confidential(self) -> bool
pub const fn confidential(self) -> bool
Whether the value must be kept out of logs and diagnostics.
Sourcepub const fn labels_itself(self) -> bool
pub const fn labels_itself(self) -> bool
Where the field’s own label sits.
A checkbox labels itself on the right of the box; everything else takes a label above. Both webview apps already do this and both special-case it inline, which is the tell that it belongs in the description.
A Radio is not one of them, and the near-miss is worth
naming: its options each label themselves, but the field still asks a
question above them, so the group takes a label like everything else.
Sourcepub const fn offers_options(self) -> bool
pub const fn offers_options(self) -> bool
Whether the kind reads Field::options.
Two kinds do, so the pair is named once here rather than spelled out at
each renderer and again in Field::options’ own doc, where “every
kind but Select” was true for exactly one release. A third
option-taking kind should land here and nowhere else.