| 11 | |
| 12 | impl<'a> KgTxnT for WriteTxn<'a> { |
| 13 | fn get_kg_node(&self, id: &str) -> PristineResult<Option<KgNode>> { |
| 14 | let table = match self.txn.open_table(KG_NODES) { |
| 15 | Ok(t) => t, |
| 16 | Err(redb::TableError::TableDoesNotExist(_)) => return Ok(None), |
| 17 | Err(e) => return Err(PristineError::from(e)), |
| 18 | }; |
| 19 | let result = match table.get(id)? { |
| 20 | Some(value) => { |
| 21 | let bytes: &[u8] = value.value(); |
| 22 | let node: KgNode = |
| 23 | serde_json::from_slice(bytes).map_err(|e| PristineError::Serialization { |
| 24 | message: e.to_string(), |
| 25 | })?; |
| 26 | Some(node) |
| 27 | } |
| 28 | None => None, |
| 29 | }; |
| 30 | drop(table); |
| 31 | Ok(result) |
| 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) { |