mysql_cdc/events/
event_header.rs

1use byteorder::{LittleEndian, ReadBytesExt};
2use std::io::Cursor;
3
4use crate::errors::Error;
5
6/// Binlog event header version 4. Header size is 19 bytes.
7/// See <a href="https://mariadb.com/kb/en/library/2-binlog-event-header/">MariaDB docs</a>
8/// See <a href="https://dev.mysql.com/doc/internals/en/binlog-version.html">MySQL docs</a>
9#[derive(Debug)]
10pub struct EventHeader {
11    /// Provides creation time in seconds from Unix.
12    pub timestamp: u32,
13
14    /// Gets type of the binlog event.
15    pub event_type: u8,
16
17    /// Gets id of the server that created the event.
18    pub server_id: u32,
19
20    /// Gets event length (header + event + checksum).
21    pub event_length: u32,
22
23    /// Gets file position of next event.
24    pub next_event_position: u32,
25
26    /// Gets event flags.
27    /// See <a href="https://mariadb.com/kb/en/2-binlog-event-header/#event-flag">documentation</a>.
28    pub event_flags: u16,
29}
30
31impl EventHeader {
32    pub fn parse(slice: &[u8]) -> Result<Self, Error> {
33        let mut cursor = Cursor::new(slice);
34        Ok(Self {
35            timestamp: cursor.read_u32::<LittleEndian>()?,
36            event_type: cursor.read_u8()?,
37            server_id: cursor.read_u32::<LittleEndian>()?,
38            event_length: cursor.read_u32::<LittleEndian>()?,
39            next_event_position: cursor.read_u32::<LittleEndian>()?,
40            event_flags: cursor.read_u16::<LittleEndian>()?,
41        })
42    }
43}