mysql_binlog_connector_rust/event/
xa_prepare_event.rs

1use 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    // refer: https://github.com/mysql/mysql-server/blob/5.7/libbinlogevents/src/control_events.cpp#L590
18    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}