use crate::reader::{Reader};
use crate::workers::{u64_from_bytes,p_error};
const ERROR:bool = false;
pub fn init(reader:&mut Reader)->Result<(),()>{
if reader.value.1 == 0{
if
reader.buffer.len() - reader.flag.1 <
17 + reader.key.1 as usize + reader.key.2 as usize
{
return Err(());
}
if
reader.buffer[reader.buffer_cursor+1] != 0 ||
reader.buffer[reader.buffer_cursor+2] != 5 ||
reader.buffer[reader.buffer_cursor+3] != 0
{
p_error("failed-parse-buffer_len-value_buffer-value",ERROR);
reader.flush();
return Err(());
}
reader.value.1 = reader.buffer[reader.buffer_cursor];
reader.buffer_cursor += 4;
}
if reader.value.2 == 0{
if
reader.buffer.len() - reader.flag.1 <
21 + reader.key.1 as usize + reader.key.2 as usize + reader.value.1 as usize
{
return Err(());
}
let mut collect_value_len_buffer = vec![];
for n in reader.buffer_cursor..reader.buffer_cursor+reader.value.1 as usize{
collect_value_len_buffer.push(reader.buffer[n]);
}
match u64_from_bytes(collect_value_len_buffer){
Ok(v)=>{
reader.value.2 = v;
reader.buffer_cursor += reader.value.1 as usize;
},
Err(_)=>{
p_error("failed-parse-buffer_len-value_buffer-value",ERROR);
reader.flush();
return Err(());
}
}
}
if reader.value.0 == false{
if
reader.buffer.len() - reader.flag.1 <
24+
reader.key.1 as usize+
reader.key.2 as usize +
reader.value.1 as usize +
reader.value.2 as usize - 1
{
return Err(());
}
if
reader.buffer[reader.buffer_cursor+0] != 0 ||
reader.buffer[reader.buffer_cursor+1] != 6 ||
reader.buffer[reader.buffer_cursor+2] != 0
{
p_error("invalid-flag-value_buffer-start-value",ERROR);
reader.flush();
return Err(());
}
reader.buffer_cursor += 3;
if
reader.buffer[reader.buffer_cursor+0+reader.value.2 as usize] != 0 ||
reader.buffer[reader.buffer_cursor+1+reader.value.2 as usize] != 7 ||
reader.buffer[reader.buffer_cursor+2+reader.value.2 as usize] != 0
{
p_error("invalid-flag-value_buffer-end-value",ERROR);
reader.flush();
return Err(());
}
reader.value.0 = true;
reader.value.3.0 = reader.buffer_cursor;
reader.value.3.1 = reader.buffer_cursor + reader.value.2 as usize - 1;
reader.end.0 = true;
reader.end.1 = reader.buffer_cursor+0+reader.value.2 as usize;
reader.end.2 = reader.buffer_cursor+2+reader.value.2 as usize;
reader.buffer_cursor += 2 + reader.value.2 as usize;
}
return Ok(());
}