use crate::AmeBackendSync;
use crate::FieldCore;
use crate::facts::Facts;
use crate::path::StorePath;
use crate::primitives::error::{FieldError, ReactiveFieldResult};
use crate::primitives::field_core::FieldValue;
use uuid::Uuid;
pub fn field_set<B, T>(
backend: &B,
core: &FieldCore<T>,
path: StorePath,
value: T,
source: Option<Uuid>,
) -> ReactiveFieldResult<()>
where
B: AmeBackendSync,
T: FieldValue,
{
let change = core.change(value, source);
backend
.set_owned_with_source(path.clone(), &change.new_value, change.source)
.attach_key(&path)
.map_err(|why| FieldError::from_store(&path, why))?;
Ok(())
}
pub fn field_apply_remote_value<T>(core: &FieldCore<T>, value: T, source: Option<Uuid>)
where
T: Clone + 'static,
{
core.signal.set_forwarded(value, source);
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn a_value_from_elsewhere_is_what_the_field_holds_after_it() {
let core = FieldCore::new(0u32);
field_apply_remote_value(&core, 7, None);
assert_eq!(core.get(), 7);
}
}