use crate::sql::types::Value;
pub fn serialize_value(val: &Value) -> Vec<u8> {
match val {
Value::Integer(v) => {
let mut buf = vec![0x01]; buf.extend_from_slice(&v.to_be_bytes()); buf
}
Value::Text(v) => {
let mut buf = vec![0x02];
buf.extend_from_slice(v.as_bytes());
buf
}
Value::Null => vec![0x00],
_ => {
let mut buf = vec![0x02];
buf.extend_from_slice(format!("{:?}", val).as_bytes());
buf
}
}
}
#[allow(dead_code)]
pub fn deserialize_value(bytes: &[u8]) -> Value {
if bytes.is_empty() {
return Value::Null;
}
match bytes[0] {
0x00 => Value::Null,
0x01 => {
if bytes.len() < 9 {
return Value::Null;
}
let arr: [u8; 8] = bytes[1..9].try_into().unwrap_or([0u8; 8]);
Value::Integer(i64::from_be_bytes(arr))
}
0x02 => Value::Text(String::from_utf8_lossy(&bytes[1..]).to_string()),
_ => Value::Null,
}
}