vantage_dataset/im/
dataset_insertable.rs1use async_trait::async_trait;
2use vantage_types::{Entity, Record};
3
4use crate::{im::ImTable, traits::InsertableDataSet};
5
6#[async_trait]
7impl<E> InsertableDataSet<E> for ImTable<E>
8where
9 E: Entity,
10{
11 async fn insert_return_id(&self, entity: &E) -> crate::traits::Result<Self::Id> {
12 let mut record: Record<serde_json::Value> = entity.clone().into_record();
14
15 let id = if let Some(record_id) = record.get("id") {
17 if record_id.is_null() {
18 self.generate_id()
19 } else if let Some(id_str) = record_id.as_str() {
20 if id_str.is_empty() {
21 self.generate_id()
22 } else {
23 id_str.to_string()
24 }
25 } else if let Some(id_num) = record_id.as_u64() {
26 id_num.to_string()
27 } else {
28 self.generate_id()
29 }
30 } else {
31 self.generate_id()
32 };
33
34 record.shift_remove("id");
36
37 let mut table = self.data_source.get_or_create_table(&self.table_name);
39 table.insert(id.clone(), record);
40
41 self.data_source.update_table(&self.table_name, table);
43
44 Ok(id)
45 }
46}
47
48