use crate::model::field_types::{FieldDefinition, FieldType};
use std::collections::HashMap;
pub fn array_field(
item_type: FieldType,
max_items: Option<usize>,
min_items: Option<usize>,
) -> FieldDefinition {
FieldDefinition::new(FieldType::Array {
item_type: Box::new(item_type),
max_items,
min_items,
})
}
pub fn list_field(
item_type: FieldType,
max_items: Option<usize>,
min_items: Option<usize>,
) -> FieldDefinition {
array_field(item_type, max_items, min_items)
}
pub fn string_field(
max_length: Option<usize>,
min_length: Option<usize>,
regex: Option<String>,
) -> FieldDefinition {
FieldDefinition::new(FieldType::String {
max_length,
min_length,
regex,
})
}
pub fn integer_field(min_value: Option<i64>, max_value: Option<i64>) -> FieldDefinition {
FieldDefinition::new(FieldType::Integer {
min_value,
max_value,
})
}
pub fn float_field(min_value: Option<f64>, max_value: Option<f64>) -> FieldDefinition {
FieldDefinition::new(FieldType::Float {
min_value,
max_value,
})
}
pub fn boolean_field() -> FieldDefinition {
FieldDefinition::new(FieldType::Boolean)
}
pub fn datetime_field() -> FieldDefinition {
datetime_with_tz_field("+00:00")
}
pub fn datetime_with_tz_field(timezone_offset: &str) -> FieldDefinition {
FieldDefinition::new(FieldType::DateTimeWithTz {
timezone_offset: timezone_offset.to_string(),
})
}
pub fn uuid_field() -> FieldDefinition {
FieldDefinition::new(FieldType::Uuid)
}
pub fn json_field() -> FieldDefinition {
FieldDefinition::new(FieldType::Json)
}
#[deprecated(
since = "0.5.5",
note = "请使用 json_field() 替代。json_field 支持存储任意 JSON 对象,并且在所有数据库中正常工作。"
)]
pub fn dict_field(fields: HashMap<String, FieldDefinition>) -> FieldDefinition {
FieldDefinition::new(FieldType::Object { fields })
}
pub fn reference_field(target_collection: String) -> FieldDefinition {
FieldDefinition::new(FieldType::Reference { target_collection })
}