memstead_schema/
base_metadata.rs1use crate::types::{FieldType, Filterable, MetadataFieldDef, Serialization};
11
12pub fn prefix_fields() -> Vec<MetadataFieldDef> {
14 vec![
15 MetadataFieldDef {
16 key: "type".to_string(),
17 description: "Entity type discriminator — matches the schema type name.".to_string(),
18 field_type: FieldType::String,
19 default_value: None,
20 enum_values: None,
21 required: Some(true),
22 legacy_optional: None,
23 required_resolved: true,
24 init_timestamp: false,
25 auto_timestamp: false,
26 serialization: Serialization::Default,
27 filterable: Filterable::None,
28 },
29 MetadataFieldDef {
30 key: "created_date".to_string(),
31 description: "Date the entity was created — filled by the engine on create."
32 .to_string(),
33 field_type: FieldType::Date,
34 default_value: None,
35 enum_values: None,
36 required: Some(true),
37 legacy_optional: None,
38 required_resolved: true,
39 init_timestamp: true,
40 auto_timestamp: false,
41 serialization: Serialization::Default,
42 filterable: Filterable::Range,
46 },
47 MetadataFieldDef {
48 key: "last_modified".to_string(),
49 description: "Date of the most recent edit — filled by the engine on write."
50 .to_string(),
51 field_type: FieldType::Date,
52 default_value: None,
53 enum_values: None,
54 required: Some(true),
55 legacy_optional: None,
56 required_resolved: true,
57 init_timestamp: false,
58 auto_timestamp: true,
59 serialization: Serialization::Default,
60 filterable: Filterable::Range,
61 },
62 ]
63}
64
65pub fn suffix_fields() -> Vec<MetadataFieldDef> {
67 vec![MetadataFieldDef {
68 key: "tags".to_string(),
69 description: "Free-form categorization tags — comma-separated on disk.".to_string(),
70 field_type: FieldType::String,
71 default_value: None,
72 enum_values: None,
73 required: None,
74 legacy_optional: None,
75 required_resolved: false,
76 init_timestamp: false,
77 auto_timestamp: false,
78 serialization: Serialization::CsvArray,
79 filterable: Filterable::Equality,
80 }]
81}
82
83pub const BASE_KEYS: &[&str] = &["type", "created_date", "last_modified", "tags"];
86
87pub fn is_base_key(key: &str) -> bool {
88 BASE_KEYS.contains(&key)
89}