ActiveValueState::Unchanged
This commit is contained in:
parent
b1afd5da3e
commit
ea091d7438
@ -41,7 +41,7 @@ pub fn expand_derive_active_model(ident: Ident, data: Data) -> syn::Result<Token
|
|||||||
impl From<#ident> for ActiveModel {
|
impl From<#ident> for ActiveModel {
|
||||||
fn from(m: #ident) -> Self {
|
fn from(m: #ident) -> Self {
|
||||||
Self {
|
Self {
|
||||||
#(#field: sea_orm::ActiveValue::set(m.#field)),*
|
#(#field: sea_orm::unchanged_active_value_not_intended_for_public_use(m.#field)),*
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,8 +11,9 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
pub enum ActiveValueState {
|
enum ActiveValueState {
|
||||||
Set,
|
Set,
|
||||||
|
Unchanged,
|
||||||
Unset,
|
Unset,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -22,6 +23,13 @@ impl Default for ActiveValueState {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn unchanged_active_value_not_intended_for_public_use<V>(value: V) -> ActiveValue<V>
|
||||||
|
where
|
||||||
|
V: Default,
|
||||||
|
{
|
||||||
|
ActiveValue::unchanged(value)
|
||||||
|
}
|
||||||
|
|
||||||
impl<V> ActiveValue<V>
|
impl<V> ActiveValue<V>
|
||||||
where
|
where
|
||||||
V: Default,
|
V: Default,
|
||||||
@ -37,6 +45,13 @@ where
|
|||||||
matches!(self.state, ActiveValueState::Set)
|
matches!(self.state, ActiveValueState::Set)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(crate) fn unchanged(value: V) -> Self {
|
||||||
|
Self {
|
||||||
|
value,
|
||||||
|
state: ActiveValueState::Unchanged,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn unset() -> Self {
|
pub fn unset() -> Self {
|
||||||
Self {
|
Self {
|
||||||
value: V::default(),
|
value: V::default(),
|
||||||
@ -58,6 +73,15 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<V> std::convert::AsRef<V> for ActiveValue<V>
|
||||||
|
where
|
||||||
|
V: Default,
|
||||||
|
{
|
||||||
|
fn as_ref(&self) -> &V {
|
||||||
|
&self.value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<V> ActiveValue<V>
|
impl<V> ActiveValue<V>
|
||||||
where
|
where
|
||||||
V: Default + Into<Value>,
|
V: Default + Into<Value>,
|
||||||
@ -69,6 +93,7 @@ where
|
|||||||
pub fn into_wrapped_value(self) -> ActiveValue<Value> {
|
pub fn into_wrapped_value(self) -> ActiveValue<Value> {
|
||||||
match self.state {
|
match self.state {
|
||||||
ActiveValueState::Set => ActiveValue::set(self.into_value()),
|
ActiveValueState::Set => ActiveValue::set(self.into_value()),
|
||||||
|
ActiveValueState::Unchanged => ActiveValue::set(self.into_value()),
|
||||||
ActiveValueState::Unset => ActiveValue::unset(),
|
ActiveValueState::Unset => ActiveValue::unset(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,7 +37,7 @@ where
|
|||||||
let mut values = Vec::new();
|
let mut values = Vec::new();
|
||||||
for col in A::Column::iter() {
|
for col in A::Column::iter() {
|
||||||
let av = am.take(col);
|
let av = am.take(col);
|
||||||
if av.is_set() {
|
if !av.is_unset() {
|
||||||
columns.push(col);
|
columns.push(col);
|
||||||
values.push(av.into_value());
|
values.push(av.into_value());
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user