Skip to main content

Set

Enum Set 

Source
pub enum Set<T> {
    Unset,
    Null,
    Value(T),
}
Expand description

One field of a generated Setter: unset, NULL, or a value — three states, distinguished by type.

The three states are the whole point (bob’s omit/null/value): an unset field does not appear in the INSERT or UPDATE at all — the column keeps its database default on insert and its current value on update — while Null writes SQL NULL explicitly. Collapsing the first two into Option would make “leave it alone” and “erase it” the same call site, which is precisely the bug this type exists to prevent.

Default is Unset, which is what makes the struct-update spelling work:

users::table().insert(users::Setter {
    name: set("Stephen"),
    email: null(),
    ..Default::default()      // every other column: untouched
})

Null is representable for every column, NOT NULL ones included — the constraint violation is the database’s to report, exactly as it is for raw SQL. Encoding nullability in the Setter’s types was considered and rejected: it would split Set<T> into two vocabularies and make every generated field’s type depend on a constraint the schema can change, for a check the engine performs anyway.

Variants§

§

Unset

Not mentioned: the field contributes nothing to the statement.

§

Null

Explicitly NULL, bound as an argument.

§

Value(T)

A value, bound as an argument.

Implementations§

Source§

impl<T> Set<T>

Source

pub fn is_unset(&self) -> bool

Whether the field is Unset and so contributes nothing.

Source§

impl<T: ToValue> Set<T>

Source

pub fn into_expr(self) -> Option<Expr>

The bound expression this field contributes: None when unset, a bound NULL for Set::Null, a bound argument for a value.

Always a placeholder, never an inline literal — the same binding-only contract every mapped type follows (docs/type-mappings.md).

Source

pub fn push_into( self, column: &'static str, columns: &mut Vec<&'static str>, values: &mut Vec<Expr>, )

Contribute this field to an INSERT’s column and value lists — one call per field is the shape generated insert_query bodies take.

Trait Implementations§

Source§

impl<T: Clone> Clone for Set<T>

Source§

fn clone(&self) -> Set<T>

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<T: Copy> Copy for Set<T>

Source§

impl<T: Debug> Debug for Set<T>

Source§

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

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

impl<T> Default for Set<T>

Source§

fn default() -> Set<T>

Returns the “default value” for a type. Read more
Source§

impl<T: Eq> Eq for Set<T>

Source§

impl<T: PartialEq> PartialEq for Set<T>

Source§

fn eq(&self, other: &Set<T>) -> bool

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

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

Inequality operator !=. Read more
Source§

impl<T: PartialEq> StructuralPartialEq for Set<T>

Auto Trait Implementations§

§

impl<T> Freeze for Set<T>
where T: Freeze,

§

impl<T> RefUnwindSafe for Set<T>
where T: RefUnwindSafe,

§

impl<T> Send for Set<T>
where T: Send,

§

impl<T> Sync for Set<T>
where T: Sync,

§

impl<T> Unpin for Set<T>
where T: Unpin,

§

impl<T> UnsafeUnpin for Set<T>
where T: UnsafeUnpin,

§

impl<T> UnwindSafe for Set<T>
where T: UnwindSafe,

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> 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 = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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.