use crate::types::{FieldType, Filterable, MetadataFieldDef, Serialization};
pub fn prefix_fields() -> Vec<MetadataFieldDef> {
vec![
MetadataFieldDef {
key: "type".to_string(),
description: "Entity type discriminator — matches the schema type name.".to_string(),
field_type: FieldType::String,
default_value: None,
enum_values: None,
required: Some(true),
legacy_optional: None,
required_resolved: true,
init_timestamp: false,
auto_timestamp: false,
serialization: Serialization::Default,
filterable: Filterable::None,
},
MetadataFieldDef {
key: "created_date".to_string(),
description: "Date the entity was created — filled by the engine on create."
.to_string(),
field_type: FieldType::Date,
default_value: None,
enum_values: None,
required: Some(true),
legacy_optional: None,
required_resolved: true,
init_timestamp: true,
auto_timestamp: false,
serialization: Serialization::Default,
filterable: Filterable::Range,
},
MetadataFieldDef {
key: "last_modified".to_string(),
description: "Date of the most recent edit — filled by the engine on write."
.to_string(),
field_type: FieldType::Date,
default_value: None,
enum_values: None,
required: Some(true),
legacy_optional: None,
required_resolved: true,
init_timestamp: false,
auto_timestamp: true,
serialization: Serialization::Default,
filterable: Filterable::Range,
},
]
}
pub fn suffix_fields() -> Vec<MetadataFieldDef> {
vec![MetadataFieldDef {
key: "tags".to_string(),
description: "Free-form categorization tags — comma-separated on disk.".to_string(),
field_type: FieldType::String,
default_value: None,
enum_values: None,
required: None,
legacy_optional: None,
required_resolved: false,
init_timestamp: false,
auto_timestamp: false,
serialization: Serialization::CsvArray,
filterable: Filterable::Equality,
}]
}
pub const BASE_KEYS: &[&str] = &["type", "created_date", "last_modified", "tags"];
pub fn is_base_key(key: &str) -> bool {
BASE_KEYS.contains(&key)
}