use ifc_model::{Entity, EntityId, Model, Value};
pub fn entity(type_name: &str, attributes: Vec<Value>) -> Entity {
Entity::new(type_name, attributes)
}
pub fn r(id: u64) -> Value {
Value::Ref(EntityId(id))
}
pub fn n(value: f64) -> Value {
Value::Real(value)
}
pub fn i(value: i64) -> Value {
Value::Integer(value)
}
pub fn e(token: &str) -> Value {
Value::Enum(token.into())
}
pub fn list(items: Vec<Value>) -> Value {
Value::List(items)
}
pub fn refs(ids: &[u64]) -> Value {
Value::List(ids.iter().map(|id| r(*id)).collect())
}
pub fn ints(values: &[i64]) -> Value {
Value::List(values.iter().map(|v| i(*v)).collect())
}
pub fn int_grid(rows: &[&[i64]]) -> Value {
Value::List(rows.iter().map(|row| ints(row)).collect())
}
pub fn model(entities: Vec<(u64, Entity)>) -> Model {
let mut m = Model::new();
for (id, e) in entities {
m.insert(EntityId(id), e);
}
m
}