| 951 | } |
| 952 | |
| 953 | fn get_kg_edges_from(&self, node_id: &str) -> PristineResult<Vec<KgEdge>> { |
| 954 | let from_table = match self.txn.open_multimap_table(KG_EDGES_FROM) { |
| 955 | Ok(t) => t, |
| 956 | Err(redb::TableError::TableDoesNotExist(_)) => return Ok(Vec::new()), |
| 957 | Err(e) => return Err(PristineError::from(e)), |
| 958 | }; |
| 959 | let edges_table = match self.txn.open_table(KG_EDGES) { |
| 960 | Ok(t) => t, |
| 961 | Err(redb::TableError::TableDoesNotExist(_)) => return Ok(Vec::new()), |
| 962 | Err(e) => return Err(PristineError::from(e)), |
| 963 | }; |
| 964 | |
| 965 | let mut edges = Vec::new(); |
| 966 | let iter = from_table.get(node_id)?; |
| 967 | for result in iter { |
| 968 | let edge_key_guard = result?; |
| 969 | let edge_key = edge_key_guard.value(); |
| 970 | if let Some(edge_data) = edges_table.get(edge_key)? { |
| 971 | let edge: KgEdge = serde_json::from_slice(edge_data.value()).map_err(|e| { |
| 972 | PristineError::Serialization { |
| 973 | message: e.to_string(), |
| 974 | } |
| 975 | })?; |
| 976 | edges.push(edge); |
| 977 | } |
| 978 | } |
| 979 | Ok(edges) |
| 980 | } |
| 981 | |
| 982 | fn get_kg_edges_to(&self, node_id: &str) -> PristineResult<Vec<KgEdge>> { |
| 983 | let to_table = match self.txn.open_multimap_table(KG_EDGES_TO) { |