use crate::workers::{u64_from_bytes,p_error};
use crate::reader::{Reader};
const ERROR:bool = true;
pub fn init(reader:&mut Reader)->Result<(),()>{
if reader.key.1 == 0{
if reader.buffer.len() < 3+1{
return Err(());
}
reader.key.1 = reader.buffer[reader.buffer_cursor];
reader.buffer_cursor += 1;
}
if reader.key.2 ==0{
if reader.buffer.len() < 3+1+3+reader.key.1 as usize{
return Err(());
}
if
reader.buffer[reader.buffer_cursor+0] != 0 ||
reader.buffer[reader.buffer_cursor+1] != 2 ||
reader.buffer[reader.buffer_cursor+2] != 0
{
p_error("invalid-flag-key_len-buff_size-key",ERROR);
reader.flush();
return Err(());
}
reader.buffer_cursor += 3;
let mut collect_len_bytes:Vec<u8> = vec![];
for n in reader.buffer_cursor..reader.buffer_cursor+reader.key.1 as usize{
collect_len_bytes.push(reader.buffer[n]);
}
match u64_from_bytes(collect_len_bytes){
Ok(v)=>{
reader.key.2 = v;
reader.buffer_cursor = reader.buffer_cursor+reader.key.1 as usize;
},
Err(_)=>{
p_error("invalid-buff-key_len-key",ERROR);
reader.flush();
return Err(());
}
}
}
if reader.key.0 == false{
if reader.buffer.len() < 13+reader.key.1 as usize+reader.key.2 as usize{
return Err(());
}
if
reader.buffer[reader.buffer_cursor+0] != 0 ||
reader.buffer[reader.buffer_cursor+1] != 3 ||
reader.buffer[reader.buffer_cursor+2] != 0
{
p_error("invalid-flag-key_buff-start-key",ERROR);
reader.flush();
return Err(());
}
reader.buffer_cursor += 3;
reader.buffer_cursor += reader.key.2 as usize;
if
reader.buffer[reader.buffer_cursor+0] != 0 ||
reader.buffer[reader.buffer_cursor+1] != 4 ||
reader.buffer[reader.buffer_cursor+2] != 0
{
p_error("invalid-flag-key_buff-end-key",ERROR);
reader.flush();
return Err(());
}
reader.key.3.0 = 10 + reader.key.1 as usize;
reader.key.3.1 = 10 + reader.key.1 as usize + reader.key.2 as usize - 1;
reader.key.0 = true;
reader.buffer_cursor += 3;
let mut collect_key = vec![];
for i in reader.key.3.0..=reader.key.3.1{
collect_key.push(reader.buffer[i]);
}
reader.key.4 = collect_key;
}
return Ok(());
}