pub enum ActiveValue<V>{
Set(V),
Unchanged(V),
NotSet,
}
Expand description
Defines a stateful value used in ActiveModel.
There are three possible state represented by three enum variants.
- ActiveValue::Set: A defined Value actively being set
- ActiveValue::Unchanged: A defined Value remain unchanged
- ActiveValue::NotSet: An undefined Value
The stateful value is useful when constructing UPDATE SQL statement, see an example below.
ยงExamples
use sea_orm::tests_cfg::{cake, fruit};
use sea_orm::{entity::*, query::*, DbBackend};
// The code snipped below does an UPDATE operation on a `ActiveValue`
assert_eq!(
Update::one(fruit::ActiveModel {
id: ActiveValue::set(1),
name: ActiveValue::set("Orange".to_owned()),
cake_id: ActiveValue::not_set(),
})
.build(DbBackend::Postgres)
.to_string(),
r#"UPDATE "fruit" SET "name" = 'Orange' WHERE "fruit"."id" = 1"#
);
Variantsยง
Set(V)
A defined Value actively being set
Unchanged(V)
A defined Value remain unchanged
NotSet
An undefined Value
Implementationsยง
Sourceยงimpl<V> ActiveValue<V>
impl<V> ActiveValue<V>
Sourcepub fn set(value: V) -> Self
pub fn set(value: V) -> Self
Create an ActiveValue::Set
Sourcepub fn is_set(&self) -> bool
pub fn is_set(&self) -> bool
Check if the ActiveValue is ActiveValue::Set
Sourcepub fn unchanged(value: V) -> Self
pub fn unchanged(value: V) -> Self
Create an ActiveValue::Unchanged
Sourcepub fn is_unchanged(&self) -> bool
pub fn is_unchanged(&self) -> bool
Check if the ActiveValue is ActiveValue::Unchanged
Sourcepub fn not_set() -> Self
pub fn not_set() -> Self
Create an ActiveValue::NotSet
Sourcepub fn is_not_set(&self) -> bool
pub fn is_not_set(&self) -> bool
Check if the ActiveValue is ActiveValue::NotSet
Sourcepub fn take(&mut self) -> Option<V>
pub fn take(&mut self) -> Option<V>
Get the mutable value an ActiveValue also setting itself to ActiveValue::NotSet
Sourcepub fn into_value(self) -> Option<Value>
pub fn into_value(self) -> Option<Value>
Check if a Value exists or not
Sourcepub fn into_wrapped_value(self) -> ActiveValue<Value>
pub fn into_wrapped_value(self) -> ActiveValue<Value>
Wrap the Value into a ActiveValue<Value>
Sourcepub fn reset(&mut self)
pub fn reset(&mut self)
Reset the value from ActiveValue::Unchanged to ActiveValue::Set, leaving ActiveValue::NotSet untouched.
Sourcepub fn set_if_not_equals(&mut self, value: V)where
V: PartialEq,
pub fn set_if_not_equals(&mut self, value: V)where
V: PartialEq,
Set(value)
, except when self.is_unchanged()
and value
equals the current Unchanged value.
This is useful when you have an Unchanged value from the database,
then update it using this method,
and then use .is_unchanged()
to see whether it has actually changed.
The same nice effect applies to the entire ActiveModel
.
You can now meaningfully use ActiveModelTrait::is_changed
to see whether are any changes that need to be saved to the database.
ยงExamples
let mut value = ActiveValue::Unchanged("old");
// This wouldn't be the case if we used plain `value = Set("old");`
value.set_if_not_equals("old");
assert!(value.is_unchanged());
// Only when we change the actual `&str` value, it becomes `Set`
value.set_if_not_equals("new");
assert_eq!(value.is_unchanged(), false);
assert_eq!(value, ActiveValue::Set("new"));
Sourcepub fn try_as_ref(&self) -> Option<&V>
pub fn try_as_ref(&self) -> Option<&V>
Get the inner value, unless self
is NotSet.
Thereโs also a panicking version: ActiveValue::as_ref.
ยงExamples
assert_eq!(ActiveValue::Unchanged(42).try_as_ref(), Some(&42));
assert_eq!(ActiveValue::Set(42).try_as_ref(), Some(&42));
assert_eq!(ActiveValue::NotSet.try_as_ref(), None::<&i32>);
Trait Implementationsยง
Sourceยงimpl<V> AsRef<V> for ActiveValue<V>
impl<V> AsRef<V> for ActiveValue<V>
Sourceยงfn as_ref(&self) -> &V
fn as_ref(&self) -> &V
ยงPanics
Panics if it is ActiveValue::NotSet.
See ActiveValue::try_as_ref for a fallible non-panicking version.
Sourceยงimpl<V> Clone for ActiveValue<V>
impl<V> Clone for ActiveValue<V>
Sourceยงfn clone(&self) -> ActiveValue<V>
fn clone(&self) -> ActiveValue<V>
1.0.0 ยท Sourceยงfn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSourceยงimpl<V> Debug for ActiveValue<V>
impl<V> Debug for ActiveValue<V>
Sourceยงimpl<V> Default for ActiveValue<V>
impl<V> Default for ActiveValue<V>
Sourceยงfn default() -> Self
fn default() -> Self
Create an ActiveValue::NotSet
Sourceยงimpl<V> From<ActiveValue<V>> for ActiveValue<Option<V>>
impl<V> From<ActiveValue<V>> for ActiveValue<Option<V>>
Sourceยงfn from(value: ActiveValue<V>) -> Self
fn from(value: ActiveValue<V>) -> Self
Sourceยงimpl<V> PartialEq for ActiveValue<V>
impl<V> PartialEq for ActiveValue<V>
Auto Trait Implementationsยง
impl<V> Freeze for ActiveValue<V>where
V: Freeze,
impl<V> RefUnwindSafe for ActiveValue<V>where
V: RefUnwindSafe,
impl<V> Send for ActiveValue<V>where
V: Send,
impl<V> Sync for ActiveValue<V>where
V: Sync,
impl<V> Unpin for ActiveValue<V>where
V: Unpin,
impl<V> UnwindSafe for ActiveValue<V>where
V: UnwindSafe,
Blanket Implementationsยง
Sourceยงimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Sourceยงfn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Sourceยงimpl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Sourceยงunsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)Sourceยงimpl<T> Instrument for T
impl<T> Instrument for T
Sourceยงfn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Sourceยงfn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Sourceยงimpl<T> IntoEither for T
impl<T> IntoEither for T
Sourceยงfn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSourceยงfn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more