(
&self,
session_id: &str,
)
| 308 | } |
| 309 | |
| 310 | fn load_session_turns_for_write( |
| 311 | &self, |
| 312 | session_id: &str, |
| 313 | ) -> PristineResult<Vec<crate::change::session::SessionTurn>> { |
| 314 | use crate::change::session::{ |
| 315 | encode_session_turn_key, session_turn_namespace, SessionTurn, |
| 316 | }; |
| 317 | |
| 318 | let turns = self.txn.open_table(SESSION_TURNS)?; |
| 319 | let namespace = session_turn_namespace(session_id); |
| 320 | let scan_start = encode_session_turn_key(namespace, 0); |
| 321 | let scan_end = encode_session_turn_key(namespace, u32::MAX); |
| 322 | let mut result = Vec::new(); |
| 323 | |
| 324 | for row in turns.range::<&[u8; 40]>(&scan_start..=&scan_end)? { |
| 325 | let (_key, value) = row?; |
| 326 | let turn = SessionTurn::from_bytes(value.value()).map_err(|e| { |
| 327 | PristineError::Serialization { |
| 328 | message: format!("session turn decode: {}", e), |
| 329 | } |
| 330 | })?; |
| 331 | if turn.session_id == session_id { |
| 332 | result.push(turn); |
| 333 | } |
| 334 | } |
| 335 | result.sort_by_key(|turn| turn.turn_number); |
| 336 | Ok(result) |
| 337 | } |
| 338 | |
| 339 | fn session_ledger_schema_key(session_id: &str) -> String { |
| 340 | format!( |
no test coverage detected