From 8a8006c52196629715ede2e80546e5710319c932 Mon Sep 17 00:00:00 2001 From: Jeff Baskin Date: Sat, 21 Mar 2026 08:50:47 -0400 Subject: [PATCH] Added features to document definition. --- src/document.rs | 5 +++++ src/document/definition.rs | 32 +++++++++++++++++++++++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/document.rs b/src/document.rs index 5a5c70d..cf03118 100644 --- a/src/document.rs +++ b/src/document.rs @@ -13,3 +13,8 @@ pub use definition::{DocDef, DocFuncType}; pub use field::{Field, FieldType, MissingTranslation}; pub use record::{Record, Records}; pub use session::Session; + +#[derive(Clone, Debug, Eq, Hash, PartialEq)] +enum DocFeature { + System, +} diff --git a/src/document/definition.rs b/src/document/definition.rs index ef7168b..42cc5fb 100644 --- a/src/document/definition.rs +++ b/src/document/definition.rs @@ -1,3 +1,4 @@ +use super::DocFeature; use crate::{ action::{Action, CalcValue, Field, FieldType, MsgAction}, document::create::IndexType, @@ -215,6 +216,7 @@ impl PathAction { #[derive(Clone, Debug)] pub struct DocDef { doc_names: Vec, + features: HashSet, field_names: Names, fields: HashMap, indexes: HashMap, @@ -227,7 +229,22 @@ impl DocDef { Self::with_names(names) } + pub fn system(name: Name) -> Self { + let names = vec![name]; + Self::system_with_names(names) + } + + pub fn system_with_names(names: Vec) -> Self { + let mut features = HashSet::new(); + features.insert(DocFeature::System); + Self::create(names, features) + } + pub fn with_names(names: Vec) -> Self { + Self::create(names, HashSet::new()) + } + + fn create(names: Vec, features: HashSet) -> Self { let routes = vec![ PathAction::new( Path::new( @@ -272,6 +289,7 @@ impl DocDef { ]; Self { doc_names: names, + features: features, field_names: Names::new(), fields: HashMap::new(), indexes: HashMap::new(), @@ -406,10 +424,22 @@ mod docdefs { use crate::action::{Query, Update}; #[test] - fn message_doc_name_returns_none() { + fn can_create_document_definition() { let docname = Name::english("tester"); let mut docdef = DocDef::new(docname); assert_eq!(docdef.doc_name(), &NameType::None); + assert!( + docdef.features.is_empty(), + "should not have special features" + ); + } + + #[test] + fn can_create_system_document_definition() { + let docname = Name::english("system"); + let mut docdef = DocDef::system(docname); + assert_eq!(docdef.features.len(), 1); + assert_eq!(docdef.features.iter().last().unwrap(), &DocFeature::System); } #[test]