| 32 | } |
| 33 | |
| 34 | fn get_kg_edges_from(&self, node_id: &str) -> PristineResult<Vec<KgEdge>> { |
| 35 | let from_table = match self.txn.open_multimap_table(KG_EDGES_FROM) { |
| 36 | Ok(t) => t, |
| 37 | Err(redb::TableError::TableDoesNotExist(_)) => return Ok(Vec::new()), |
| 38 | Err(e) => return Err(PristineError::from(e)), |
| 39 | }; |
| 40 | let edges_table = match self.txn.open_table(KG_EDGES) { |
| 41 | Ok(t) => t, |
| 42 | Err(redb::TableError::TableDoesNotExist(_)) => return Ok(Vec::new()), |
| 43 | Err(e) => return Err(PristineError::from(e)), |
| 44 | }; |
| 45 | |
| 46 | let mut edges = Vec::new(); |
| 47 | let iter = from_table.get(node_id)?; |
| 48 | for result in iter { |
| 49 | let edge_key_guard: redb::AccessGuard<'_, &str> = result?; |
| 50 | let edge_key: &str = edge_key_guard.value(); |
| 51 | if let Some(edge_data) = edges_table.get(edge_key)? { |
| 52 | let bytes: &[u8] = edge_data.value(); |
| 53 | let edge: KgEdge = |
| 54 | serde_json::from_slice(bytes).map_err(|e| PristineError::Serialization { |
| 55 | message: e.to_string(), |
| 56 | })?; |
| 57 | edges.push(edge); |
| 58 | } |
| 59 | } |
| 60 | Ok(edges) |
| 61 | } |
| 62 | |
| 63 | fn get_kg_edges_to(&self, node_id: &str) -> PristineResult<Vec<KgEdge>> { |
| 64 | let to_table = match self.txn.open_multimap_table(KG_EDGES_TO) { |