1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use std::{io, io::Cursor};

use crate::{
    apikey::ApiMessageType,
    codec::{Decoder, Int16},
    request_header::RequestHeader,
    Decodable,
};

pub fn read_request_header<T: AsRef<[u8]>>(cursor: &mut Cursor<T>) -> io::Result<RequestHeader> {
    let pos = cursor.position();
    let api_key = Int16.decode(cursor)?;
    let api_version = Int16.decode(cursor)?;
    let header_version = ApiMessageType::try_from(api_key)?.request_header_version(api_version);

    cursor.set_position(pos);
    RequestHeader::decode(cursor, header_version)
}