tycho/read/async_/
number.rs

1use byteorder::BE;
2use tokio::io::AsyncRead;
3use tokio_byteorder::AsyncReadBytesExt;
4
5use crate::error::{parse_io, TychoResult};
6use crate::Number;
7use crate::read::async_::func::read_byte_async;
8use crate::read::number::parse_number_ident;
9use crate::types::ident::NumberIdent;
10
11pub(crate) async fn read_number_ident_async<R: AsyncRead + Unpin>(reader: &mut R) -> TychoResult<NumberIdent> {
12    parse_number_ident(read_byte_async(reader).await?)
13}
14
15pub(crate) async fn read_number_async<R: AsyncRead + Unpin>(reader: &mut R, ident: &NumberIdent) -> TychoResult<Number> {
16    match ident {
17        NumberIdent::Bit => Ok(Number::Bit(read_byte_async(reader).await? == 0x00)),
18        NumberIdent::Unsigned8 => Ok(Number::Unsigned8(parse_io(reader.read_u8().await)?)),
19        NumberIdent::Signed8 => Ok(Number::Signed8(parse_io(reader.read_i8().await)?)),
20        NumberIdent::Unsigned16 => Ok(Number::Unsigned16(parse_io(reader.read_u16::<BE>().await)?)),
21        NumberIdent::Signed16 => Ok(Number::Signed16(parse_io(reader.read_i16::<BE>().await)?)),
22        NumberIdent::Unsigned32 => Ok(Number::Unsigned32(parse_io(reader.read_u32::<BE>().await)?)),
23        NumberIdent::Signed32 => Ok(Number::Signed32(parse_io(reader.read_i32::<BE>().await)?)),
24        NumberIdent::Unsigned64 => Ok(Number::Unsigned64(parse_io(reader.read_u64::<BE>().await)?)),
25        NumberIdent::Signed64 => Ok(Number::Signed64(parse_io(reader.read_i64::<BE>().await)?)),
26        NumberIdent::Unsigned128 => Ok(Number::Unsigned128(parse_io(reader.read_u128::<BE>().await)?)),
27        NumberIdent::Signed128 => Ok(Number::Signed128(parse_io(reader.read_i128::<BE>().await)?)),
28        NumberIdent::Float32 => Ok(Number::Float32(parse_io(reader.read_f32::<BE>().await)?)),
29        NumberIdent::Float64 => Ok(Number::Float64(parse_io(reader.read_f64::<BE>().await)?)),
30    }
31}