Added default type functions.
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 3m1s
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 3m1s
This commit is contained in:
parent
051fd9ebf6
commit
c961cf49a8
@ -989,9 +989,14 @@ mod fieldtypes {
|
|||||||
let result = ftype.get_default();
|
let result = ftype.get_default();
|
||||||
match result {
|
match result {
|
||||||
Field::Uuid(data) => {
|
Field::Uuid(data) => {
|
||||||
assert!(!ids.contains(&data), "found duplicate id {:?} in {:?}", data, ids);
|
assert!(
|
||||||
|
!ids.contains(&data),
|
||||||
|
"found duplicate id {:?} in {:?}",
|
||||||
|
data,
|
||||||
|
ids
|
||||||
|
);
|
||||||
ids.push(data.clone());
|
ids.push(data.clone());
|
||||||
},
|
}
|
||||||
_ => unreachable!("got {:?}: should have been uuid", result),
|
_ => unreachable!("got {:?}: should have been uuid", result),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1078,19 +1083,38 @@ mod fields {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug)]
|
||||||
|
enum DefaultSetting {
|
||||||
|
Value(Field),
|
||||||
|
FieldType,
|
||||||
|
None,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
struct FieldSetting {
|
struct FieldSetting {
|
||||||
fieldtype: FieldType,
|
fieldtype: FieldType,
|
||||||
|
default_setting: DefaultSetting,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl FieldSetting {
|
impl FieldSetting {
|
||||||
fn new(ftype: FieldType) -> Self {
|
fn new(ftype: FieldType) -> Self {
|
||||||
Self { fieldtype: ftype }
|
Self {
|
||||||
|
fieldtype: ftype,
|
||||||
|
default_setting: DefaultSetting::None,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_type(&self) -> &FieldType {
|
fn get_type(&self) -> &FieldType {
|
||||||
&self.fieldtype
|
&self.fieldtype
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn set_default(&mut self, value: DefaultSetting) {
|
||||||
|
self.default_setting = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_default(&self) -> &DefaultSetting {
|
||||||
|
&self.default_setting
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
@ -1103,6 +1127,22 @@ mod fieldsettings {
|
|||||||
for ftype in ftypes.into_iter() {
|
for ftype in ftypes.into_iter() {
|
||||||
let fieldinfo = FieldSetting::new(ftype.clone());
|
let fieldinfo = FieldSetting::new(ftype.clone());
|
||||||
assert_eq!(fieldinfo.get_type(), &ftype);
|
assert_eq!(fieldinfo.get_type(), &ftype);
|
||||||
|
let dset = fieldinfo.get_default();
|
||||||
|
match dset {
|
||||||
|
DefaultSetting::None => {}
|
||||||
|
_ => unreachable!("got {:?}: should have been none", dset),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn can_default_be_changed() {
|
||||||
|
let mut fieldinfo = FieldSetting::new(FieldType::Uuid);
|
||||||
|
fieldinfo.set_default(DefaultSetting::FieldType);
|
||||||
|
let dset = fieldinfo.get_default();
|
||||||
|
match dset {
|
||||||
|
DefaultSetting::FieldType => {}
|
||||||
|
_ => unreachable!("got {:?}: should have been none", dset),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1202,6 +1242,11 @@ impl DocDef {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn use_default_function(&mut self, field_name: &str) {
|
||||||
|
let setting = self.fields.get_mut(field_name).unwrap();
|
||||||
|
setting.set_default(DefaultSetting::FieldType);
|
||||||
|
}
|
||||||
|
|
||||||
fn iter(&self) -> impl Iterator<Item = (&String, &FieldSetting)> {
|
fn iter(&self) -> impl Iterator<Item = (&String, &FieldSetting)> {
|
||||||
self.fields.iter()
|
self.fields.iter()
|
||||||
}
|
}
|
||||||
@ -1247,6 +1292,19 @@ mod docdefs {
|
|||||||
assert_eq!(result.get_type(), &field_type);
|
assert_eq!(result.get_type(), &field_type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn can_change_field_default_to_function() {
|
||||||
|
let mut docdef = DocDef::new();
|
||||||
|
let name = "defaultfunction";
|
||||||
|
docdef.add_field(name.to_string(), FieldType::StaticString);
|
||||||
|
docdef.use_default_function(name);
|
||||||
|
let dset = docdef.get_field(name).unwrap().get_default();
|
||||||
|
match dset {
|
||||||
|
DefaultSetting::FieldType => {}
|
||||||
|
_ => unreachable!("got {:?}: should have been field type", dset),
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
@ -1560,10 +1618,18 @@ impl DocumentFile {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (key, _) in self.docdef.iter() {
|
for (key, value) in self.docdef.iter() {
|
||||||
match holder.get_field(key) {
|
match holder.get_field(key) {
|
||||||
Some(_) => {}
|
Some(_) => {}
|
||||||
None => return MTTError::DocumentFieldMissing(key.clone()).into(),
|
None => match value.get_default() {
|
||||||
|
DefaultSetting::Value(_) => {}
|
||||||
|
DefaultSetting::FieldType => {
|
||||||
|
holder.add_field(key.clone(), value.get_type().get_default())
|
||||||
|
}
|
||||||
|
DefaultSetting::None => {
|
||||||
|
return MTTError::DocumentFieldMissing(key.clone()).into()
|
||||||
|
}
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
self.docs.push(holder.clone());
|
self.docs.push(holder.clone());
|
||||||
@ -2058,6 +2124,29 @@ mod document_files {
|
|||||||
_ => unreachable!("got {:?}: should have been a error", action),
|
_ => unreachable!("got {:?}: should have been a error", action),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn can_use_default_values() {
|
||||||
|
let doc_name = "default";
|
||||||
|
let mut docdef = create_docdef([FieldType::StaticString].to_vec());
|
||||||
|
docdef.use_default_function("field0");
|
||||||
|
let (queue, rx) = test_doc(doc_name, docdef, standard_routes());
|
||||||
|
let new_doc = Addition::new();
|
||||||
|
let msg = Message::new(doc_name, new_doc);
|
||||||
|
queue.send(msg).unwrap();
|
||||||
|
let result = rx.recv_timeout(TIMEOUT).unwrap();
|
||||||
|
let action = result.get_action();
|
||||||
|
match action {
|
||||||
|
MsgAction::Reply(docs) => {
|
||||||
|
assert_eq!(docs.len(), 1);
|
||||||
|
for doc in docs.iter() {
|
||||||
|
let expected: Field = "".into();
|
||||||
|
assert_eq!(doc.get_field("field0").unwrap(), &expected);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => unreachable!("got {:?}: should have gotten a reply", action),
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user