use crate::mysql::StatusFlags;
use crate::mysql::protocol::new_reader::{NewReader, ReaderContext};
use crate::shared::Data;
pub struct OKPacket {
pub header: u8,
pub affected_rows: u64,
pub last_insert_id: u64,
pub status_flags: StatusFlags,
pub warnings: u16,
pub info: Data,
pub session_state_changes: Data,
pub packet_size: u32,
}
impl OKPacket {
pub fn decode_internal<Context: ReaderContext>(
&mut self,
reader: NewReader<Context>,
) -> Result<(), bun_core::Error> {
let mut read_size: usize = 5; self.header = reader.int::<u8>()?;
if self.header != 0x00 && self.header != 0xfe {
return Err(bun_core::err!("InvalidOKPacket"));
}
self.affected_rows = reader.encoded_len_int_with_size(&mut read_size)?;
self.last_insert_id = reader.encoded_len_int_with_size(&mut read_size)?;
self.status_flags = StatusFlags::from_int(reader.int::<u16>()?);
self.warnings = reader.int::<u16>()?;
if !reader.peek().is_empty() && (self.packet_size as usize) > read_size {
let remaining = (self.packet_size as usize) - read_size;
self.info = reader.read(remaining as _)?;
}
Ok(())
}
}
pub use self::OKPacket as _DecoderWrapTarget;