mysql_binlog_connector_rust/event/
xa_prepare_event.rs1use std::io::Cursor;
2
3use byteorder::{LittleEndian, ReadBytesExt};
4use serde::{Deserialize, Serialize};
5
6use crate::{binlog_error::BinlogError, ext::cursor_ext::CursorExt};
7
8#[derive(Debug, Deserialize, Serialize, Clone)]
9pub struct XaPrepareEvent {
10 pub one_phase: bool,
11 pub format_id: u32,
12 pub gtrid: String,
13 pub bqual: String,
14}
15
16impl XaPrepareEvent {
17 pub fn parse(cursor: &mut Cursor<&Vec<u8>>) -> Result<Self, BinlogError> {
19 let one_phase = cursor.read_u8()? == 0;
20 let format_id = cursor.read_u32::<LittleEndian>()?;
21 let gtrid_length = cursor.read_u32::<LittleEndian>()?;
22 let bqual_length = cursor.read_u32::<LittleEndian>()?;
23 let gtrid = cursor.read_string(gtrid_length as usize)?;
24 let bqual = cursor.read_string(bqual_length as usize)?;
25
26 Ok(Self {
27 one_phase,
28 format_id,
29 gtrid,
30 bqual,
31 })
32 }
33}