| 176 | } |
| 177 | |
| 178 | fn get_kg_edges_from(&self, node_id: &str) -> PristineResult<Vec<KgEdge>> { |
| 179 | let from_table = match self.txn.open_multimap_table(KG_EDGES_FROM) { |
| 180 | Ok(t) => t, |
| 181 | Err(redb::TableError::TableDoesNotExist(_)) => return Ok(Vec::new()), |
| 182 | Err(e) => return Err(PristineError::from(e)), |
| 183 | }; |
| 184 | let edges_table = match self.txn.open_table(KG_EDGES) { |
| 185 | Ok(t) => t, |
| 186 | Err(redb::TableError::TableDoesNotExist(_)) => return Ok(Vec::new()), |
| 187 | Err(e) => return Err(PristineError::from(e)), |
| 188 | }; |
| 189 | |
| 190 | let mut edges = Vec::new(); |
| 191 | let iter = from_table.get(node_id)?; |
| 192 | for result in iter { |
| 193 | let edge_key_guard: redb::AccessGuard<'_, &str> = result?; |
| 194 | let edge_key: &str = edge_key_guard.value(); |
| 195 | if let Some(edge_data) = edges_table.get(edge_key)? { |
| 196 | let bytes: &[u8] = edge_data.value(); |
| 197 | let edge: KgEdge = |
| 198 | serde_json::from_slice(bytes).map_err(|e| PristineError::Serialization { |
| 199 | message: e.to_string(), |
| 200 | })?; |
| 201 | edges.push(edge); |
| 202 | } |
| 203 | } |
| 204 | Ok(edges) |
| 205 | } |
| 206 | |
| 207 | fn get_kg_edges_to(&self, node_id: &str) -> PristineResult<Vec<KgEdge>> { |
| 208 | let to_table = match self.txn.open_multimap_table(KG_EDGES_TO) { |