Skip to main content

ControlValue

Enum ControlValue 

Source
pub enum ControlValue {
    Choice {
        option: OptionId,
    },
    Text {
        text: String,
    },
    Toggle {
        on: bool,
    },
    Secret {
        reference: SecretRef,
    },
}
Expand description

What was submitted for one control, typed.

Typed at the TYPE rather than at a downstream parser: a String here would make every consumer decide whether "TRUE", "1", and "yes" are the same toggle, which is the per-surface drift the epic exists to end. Canonicalization lives in the shape, so A3 revalidates rather than re-parses. Deliberately NOT #[non_exhaustive], unlike the open vocabularies in this crate (InteractionKind, SemanticRole, Audience, …). This variant set is a security boundary: “no variant can carry a secret” is provable only by an exhaustive match, and #[non_exhaustive] would force every such match to end in a wildcard — after which adding a plaintext-carrying variant would compile silently everywhere. Adding a variant here SHOULD break every consumer that reasons about the set. Every variant is a STRUCT variant: serde’s internally-tagged form cannot represent a newtype variant wrapping a primitive, and the named field is the clearer thing to freeze into A2.1’s vectors anyway ({"kind":"toggle","on":true}).

Variants§

§

Choice

One of the control’s options was chosen.

Fields

§option: OptionId

Which OPTION of the control named by the enclosing Submission. A distinct id space from ControlId, so the pair cannot name two things of the same kind with no rule saying which wins. Its charset is enforced on construction AND on deserialization, so the guarantee holds on the wire too.

§

Text

Free text, as typed.

Fields

§text: String

The submitted text.

§

Toggle

A boolean. Travels as a bool, never as text.

Fields

§on: bool

Whether the control is on.

§

Secret

A secret, BY REFERENCE. There is deliberately no variant that can hold plaintext.

Fields

§reference: SecretRef

The handle the host can resolve.

Trait Implementations§

Source§

impl Clone for ControlValue

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ControlValue

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for ControlValue

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Eq for ControlValue

Source§

impl PartialEq for ControlValue

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl Serialize for ControlValue

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for ControlValue

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.