mirror of
https://github.com/tokio-rs/tokio.git
synced 2026-08-24 00:00:11 +02:00
io: add little endian variants for AsyncRead/WriteExt (#1915)
This commit is contained in:
@@ -2,8 +2,12 @@ use crate::io::util::chain::{chain, Chain};
|
||||
use crate::io::util::read::{read, Read};
|
||||
use crate::io::util::read_buf::{read_buf, ReadBuf};
|
||||
use crate::io::util::read_exact::{read_exact, ReadExact};
|
||||
use crate::io::util::read_int::{ReadI128, ReadI16, ReadI32, ReadI64, ReadI8};
|
||||
use crate::io::util::read_int::{ReadU128, ReadU16, ReadU32, ReadU64, ReadU8};
|
||||
use crate::io::util::read_int::{
|
||||
ReadI128, ReadI128Le, ReadI16, ReadI16Le, ReadI32, ReadI32Le, ReadI64, ReadI64Le, ReadI8,
|
||||
};
|
||||
use crate::io::util::read_int::{
|
||||
ReadU128, ReadU128Le, ReadU16, ReadU16Le, ReadU32, ReadU32Le, ReadU64, ReadU64Le, ReadU8,
|
||||
};
|
||||
use crate::io::util::read_to_end::{read_to_end, ReadToEnd};
|
||||
use crate::io::util::read_to_string::{read_to_string, ReadToString};
|
||||
use crate::io::util::take::{take, Take};
|
||||
@@ -663,6 +667,313 @@ cfg_io_util! {
|
||||
/// }
|
||||
/// ```
|
||||
fn read_i128(&mut self) -> ReadI128;
|
||||
|
||||
/// Reads an unsigned 16-bit integer in little-endian order from the
|
||||
/// underlying reader.
|
||||
///
|
||||
/// Equivalent to:
|
||||
///
|
||||
/// ```ignore
|
||||
/// async fn read_u16_le(&mut self) -> io::Result<u16>;
|
||||
/// ```
|
||||
///
|
||||
/// It is recommended to use a buffered reader to avoid excessive
|
||||
/// syscalls.
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// This method returns the same errors as [`AsyncReadExt::read_exact`].
|
||||
///
|
||||
/// [`AsyncReadExt::read_exact`]: AsyncReadExt::read_exact
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Read unsigned 16 bit little-endian integers from a `AsyncRead`:
|
||||
///
|
||||
/// ```rust
|
||||
/// use tokio::io::{self, AsyncReadExt};
|
||||
///
|
||||
/// use std::io::Cursor;
|
||||
///
|
||||
/// #[tokio::main]
|
||||
/// async fn main() -> io::Result<()> {
|
||||
/// let mut reader = Cursor::new(vec![2, 5, 3, 0]);
|
||||
///
|
||||
/// assert_eq!(1282, reader.read_u16_le().await?);
|
||||
/// assert_eq!(3, reader.read_u16_le().await?);
|
||||
/// Ok(())
|
||||
/// }
|
||||
/// ```
|
||||
fn read_u16_le(&mut self) -> ReadU16Le;
|
||||
|
||||
/// Reads a signed 16-bit integer in little-endian order from the
|
||||
/// underlying reader.
|
||||
///
|
||||
/// Equivalent to:
|
||||
///
|
||||
/// ```ignore
|
||||
/// async fn read_i16_le(&mut self) -> io::Result<i16>;
|
||||
/// ```
|
||||
///
|
||||
/// It is recommended to use a buffered reader to avoid excessive
|
||||
/// syscalls.
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// This method returns the same errors as [`AsyncReadExt::read_exact`].
|
||||
///
|
||||
/// [`AsyncReadExt::read_exact`]: AsyncReadExt::read_exact
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Read signed 16 bit little-endian integers from a `AsyncRead`:
|
||||
///
|
||||
/// ```rust
|
||||
/// use tokio::io::{self, AsyncReadExt};
|
||||
///
|
||||
/// use std::io::Cursor;
|
||||
///
|
||||
/// #[tokio::main]
|
||||
/// async fn main() -> io::Result<()> {
|
||||
/// let mut reader = Cursor::new(vec![0x00, 0xc1, 0xff, 0x7c]);
|
||||
///
|
||||
/// assert_eq!(-16128, reader.read_i16_le().await?);
|
||||
/// assert_eq!(31999, reader.read_i16_le().await?);
|
||||
/// Ok(())
|
||||
/// }
|
||||
/// ```
|
||||
fn read_i16_le(&mut self) -> ReadI16Le;
|
||||
|
||||
/// Reads an unsigned 32-bit integer in little-endian order from the
|
||||
/// underlying reader.
|
||||
///
|
||||
/// Equivalent to:
|
||||
///
|
||||
/// ```ignore
|
||||
/// async fn read_u32_le(&mut self) -> io::Result<u32>;
|
||||
/// ```
|
||||
///
|
||||
/// It is recommended to use a buffered reader to avoid excessive
|
||||
/// syscalls.
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// This method returns the same errors as [`AsyncReadExt::read_exact`].
|
||||
///
|
||||
/// [`AsyncReadExt::read_exact`]: AsyncReadExt::read_exact
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Read unsigned 32-bit little-endian integers from a `AsyncRead`:
|
||||
///
|
||||
/// ```rust
|
||||
/// use tokio::io::{self, AsyncReadExt};
|
||||
///
|
||||
/// use std::io::Cursor;
|
||||
///
|
||||
/// #[tokio::main]
|
||||
/// async fn main() -> io::Result<()> {
|
||||
/// let mut reader = Cursor::new(vec![0x00, 0x00, 0x01, 0x0b]);
|
||||
///
|
||||
/// assert_eq!(184614912, reader.read_u32_le().await?);
|
||||
/// Ok(())
|
||||
/// }
|
||||
/// ```
|
||||
fn read_u32_le(&mut self) -> ReadU32Le;
|
||||
|
||||
/// Reads a signed 32-bit integer in little-endian order from the
|
||||
/// underlying reader.
|
||||
///
|
||||
///
|
||||
/// Equivalent to:
|
||||
///
|
||||
/// ```ignore
|
||||
/// async fn read_i32_le(&mut self) -> io::Result<i32>;
|
||||
/// ```
|
||||
///
|
||||
/// It is recommended to use a buffered reader to avoid excessive
|
||||
/// syscalls.
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// This method returns the same errors as [`AsyncReadExt::read_exact`].
|
||||
///
|
||||
/// [`AsyncReadExt::read_exact`]: AsyncReadExt::read_exact
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Read signed 32-bit little-endian integers from a `AsyncRead`:
|
||||
///
|
||||
/// ```rust
|
||||
/// use tokio::io::{self, AsyncReadExt};
|
||||
///
|
||||
/// use std::io::Cursor;
|
||||
///
|
||||
/// #[tokio::main]
|
||||
/// async fn main() -> io::Result<()> {
|
||||
/// let mut reader = Cursor::new(vec![0xff, 0xff, 0x7a, 0x33]);
|
||||
///
|
||||
/// assert_eq!(863698943, reader.read_i32_le().await?);
|
||||
/// Ok(())
|
||||
/// }
|
||||
/// ```
|
||||
fn read_i32_le(&mut self) -> ReadI32Le;
|
||||
|
||||
/// Reads an unsigned 64-bit integer in little-endian order from the
|
||||
/// underlying reader.
|
||||
///
|
||||
/// Equivalent to:
|
||||
///
|
||||
/// ```ignore
|
||||
/// async fn read_u64_le(&mut self) -> io::Result<u64>;
|
||||
/// ```
|
||||
///
|
||||
/// It is recommended to use a buffered reader to avoid excessive
|
||||
/// syscalls.
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// This method returns the same errors as [`AsyncReadExt::read_exact`].
|
||||
///
|
||||
/// [`AsyncReadExt::read_exact`]: AsyncReadExt::read_exact
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Read unsigned 64-bit little-endian integers from a `AsyncRead`:
|
||||
///
|
||||
/// ```rust
|
||||
/// use tokio::io::{self, AsyncReadExt};
|
||||
///
|
||||
/// use std::io::Cursor;
|
||||
///
|
||||
/// #[tokio::main]
|
||||
/// async fn main() -> io::Result<()> {
|
||||
/// let mut reader = Cursor::new(vec![
|
||||
/// 0x00, 0x03, 0x43, 0x95, 0x4d, 0x60, 0x86, 0x83
|
||||
/// ]);
|
||||
///
|
||||
/// assert_eq!(9477368352180732672, reader.read_u64_le().await?);
|
||||
/// Ok(())
|
||||
/// }
|
||||
/// ```
|
||||
fn read_u64_le(&mut self) -> ReadU64Le;
|
||||
|
||||
/// Reads an signed 64-bit integer in little-endian order from the
|
||||
/// underlying reader.
|
||||
///
|
||||
/// Equivalent to:
|
||||
///
|
||||
/// ```ignore
|
||||
/// async fn read_i64_le(&mut self) -> io::Result<i64>;
|
||||
/// ```
|
||||
///
|
||||
/// It is recommended to use a buffered reader to avoid excessive
|
||||
/// syscalls.
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// This method returns the same errors as [`AsyncReadExt::read_exact`].
|
||||
///
|
||||
/// [`AsyncReadExt::read_exact`]: AsyncReadExt::read_exact
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Read signed 64-bit little-endian integers from a `AsyncRead`:
|
||||
///
|
||||
/// ```rust
|
||||
/// use tokio::io::{self, AsyncReadExt};
|
||||
///
|
||||
/// use std::io::Cursor;
|
||||
///
|
||||
/// #[tokio::main]
|
||||
/// async fn main() -> io::Result<()> {
|
||||
/// let mut reader = Cursor::new(vec![0x80, 0, 0, 0, 0, 0, 0, 0]);
|
||||
///
|
||||
/// assert_eq!(128, reader.read_i64_le().await?);
|
||||
/// Ok(())
|
||||
/// }
|
||||
/// ```
|
||||
fn read_i64_le(&mut self) -> ReadI64Le;
|
||||
|
||||
/// Reads an unsigned 128-bit integer in little-endian order from the
|
||||
/// underlying reader.
|
||||
///
|
||||
/// Equivalent to:
|
||||
///
|
||||
/// ```ignore
|
||||
/// async fn read_u128_le(&mut self) -> io::Result<u128>;
|
||||
/// ```
|
||||
///
|
||||
/// It is recommended to use a buffered reader to avoid excessive
|
||||
/// syscalls.
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// This method returns the same errors as [`AsyncReadExt::read_exact`].
|
||||
///
|
||||
/// [`AsyncReadExt::read_exact`]: AsyncReadExt::read_exact
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Read unsigned 128-bit little-endian integers from a `AsyncRead`:
|
||||
///
|
||||
/// ```rust
|
||||
/// use tokio::io::{self, AsyncReadExt};
|
||||
///
|
||||
/// use std::io::Cursor;
|
||||
///
|
||||
/// #[tokio::main]
|
||||
/// async fn main() -> io::Result<()> {
|
||||
/// let mut reader = Cursor::new(vec![
|
||||
/// 0x00, 0x03, 0x43, 0x95, 0x4d, 0x60, 0x86, 0x83,
|
||||
/// 0x00, 0x03, 0x43, 0x95, 0x4d, 0x60, 0x86, 0x83
|
||||
/// ]);
|
||||
///
|
||||
/// assert_eq!(174826588484952389081207917399662330624, reader.read_u128_le().await?);
|
||||
/// Ok(())
|
||||
/// }
|
||||
/// ```
|
||||
fn read_u128_le(&mut self) -> ReadU128Le;
|
||||
|
||||
/// Reads an signed 128-bit integer in little-endian order from the
|
||||
/// underlying reader.
|
||||
///
|
||||
/// Equivalent to:
|
||||
///
|
||||
/// ```ignore
|
||||
/// async fn read_i128_le(&mut self) -> io::Result<i128>;
|
||||
/// ```
|
||||
///
|
||||
/// It is recommended to use a buffered reader to avoid excessive
|
||||
/// syscalls.
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// This method returns the same errors as [`AsyncReadExt::read_exact`].
|
||||
///
|
||||
/// [`AsyncReadExt::read_exact`]: AsyncReadExt::read_exact
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Read signed 128-bit little-endian integers from a `AsyncRead`:
|
||||
///
|
||||
/// ```rust
|
||||
/// use tokio::io::{self, AsyncReadExt};
|
||||
///
|
||||
/// use std::io::Cursor;
|
||||
///
|
||||
/// #[tokio::main]
|
||||
/// async fn main() -> io::Result<()> {
|
||||
/// let mut reader = Cursor::new(vec![
|
||||
/// 0x80, 0, 0, 0, 0, 0, 0, 0,
|
||||
/// 0, 0, 0, 0, 0, 0, 0, 0
|
||||
/// ]);
|
||||
///
|
||||
/// assert_eq!(128, reader.read_i128_le().await?);
|
||||
/// Ok(())
|
||||
/// }
|
||||
/// ```
|
||||
fn read_i128_le(&mut self) -> ReadI128Le;
|
||||
}
|
||||
|
||||
/// Reads all bytes until EOF in this source, placing them into `buf`.
|
||||
|
||||
@@ -3,8 +3,14 @@ use crate::io::util::shutdown::{shutdown, Shutdown};
|
||||
use crate::io::util::write::{write, Write};
|
||||
use crate::io::util::write_all::{write_all, WriteAll};
|
||||
use crate::io::util::write_buf::{write_buf, WriteBuf};
|
||||
use crate::io::util::write_int::{WriteI128, WriteI16, WriteI32, WriteI64, WriteI8};
|
||||
use crate::io::util::write_int::{WriteU128, WriteU16, WriteU32, WriteU64, WriteU8};
|
||||
use crate::io::util::write_int::{
|
||||
WriteI128, WriteI128Le, WriteI16, WriteI16Le, WriteI32, WriteI32Le, WriteI64, WriteI64Le,
|
||||
WriteI8,
|
||||
};
|
||||
use crate::io::util::write_int::{
|
||||
WriteU128, WriteU128Le, WriteU16, WriteU16Le, WriteU32, WriteU32Le, WriteU64, WriteU64Le,
|
||||
WriteU8,
|
||||
};
|
||||
use crate::io::AsyncWrite;
|
||||
|
||||
use bytes::Buf;
|
||||
@@ -608,6 +614,315 @@ cfg_io_util! {
|
||||
/// }
|
||||
/// ```
|
||||
fn write_i128(&mut self, n: i128) -> WriteI128;
|
||||
|
||||
|
||||
/// Writes an unsigned 16-bit integer in little-endian order to the
|
||||
/// underlying writer.
|
||||
///
|
||||
/// Equivalent to:
|
||||
///
|
||||
/// ```ignore
|
||||
/// async fn write_u16_le(&mut self, n: u16) -> io::Result<()>;
|
||||
/// ```
|
||||
///
|
||||
/// It is recommended to use a buffered writer to avoid excessive
|
||||
/// syscalls.
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// This method returns the same errors as [`AsyncWriteExt::write_all`].
|
||||
///
|
||||
/// [`AsyncWriteExt::write_all`]: AsyncWriteExt::write_all
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Write unsigned 16-bit integers to a `AsyncWrite`:
|
||||
///
|
||||
/// ```rust
|
||||
/// use tokio::io::{self, AsyncWriteExt};
|
||||
///
|
||||
/// #[tokio::main]
|
||||
/// async fn main() -> io::Result<()> {
|
||||
/// let mut writer = Vec::new();
|
||||
///
|
||||
/// writer.write_u16_le(517).await?;
|
||||
/// writer.write_u16_le(768).await?;
|
||||
///
|
||||
/// assert_eq!(writer, b"\x05\x02\x00\x03");
|
||||
/// Ok(())
|
||||
/// }
|
||||
/// ```
|
||||
fn write_u16_le(&mut self, n: u16) -> WriteU16Le;
|
||||
|
||||
/// Writes a signed 16-bit integer in little-endian order to the
|
||||
/// underlying writer.
|
||||
///
|
||||
/// Equivalent to:
|
||||
///
|
||||
/// ```ignore
|
||||
/// async fn write_i16_le(&mut self, n: i16) -> io::Result<()>;
|
||||
/// ```
|
||||
///
|
||||
/// It is recommended to use a buffered writer to avoid excessive
|
||||
/// syscalls.
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// This method returns the same errors as [`AsyncWriteExt::write_all`].
|
||||
///
|
||||
/// [`AsyncWriteExt::write_all`]: AsyncWriteExt::write_all
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Write signed 16-bit integers to a `AsyncWrite`:
|
||||
///
|
||||
/// ```rust
|
||||
/// use tokio::io::{self, AsyncWriteExt};
|
||||
///
|
||||
/// #[tokio::main]
|
||||
/// async fn main() -> io::Result<()> {
|
||||
/// let mut writer = Vec::new();
|
||||
///
|
||||
/// writer.write_i16_le(193).await?;
|
||||
/// writer.write_i16_le(-132).await?;
|
||||
///
|
||||
/// assert_eq!(writer, b"\xc1\x00\x7c\xff");
|
||||
/// Ok(())
|
||||
/// }
|
||||
/// ```
|
||||
fn write_i16_le(&mut self, n: i16) -> WriteI16Le;
|
||||
|
||||
/// Writes an unsigned 32-bit integer in little-endian order to the
|
||||
/// underlying writer.
|
||||
///
|
||||
/// Equivalent to:
|
||||
///
|
||||
/// ```ignore
|
||||
/// async fn write_u32_le(&mut self, n: u32) -> io::Result<()>;
|
||||
/// ```
|
||||
///
|
||||
/// It is recommended to use a buffered writer to avoid excessive
|
||||
/// syscalls.
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// This method returns the same errors as [`AsyncWriteExt::write_all`].
|
||||
///
|
||||
/// [`AsyncWriteExt::write_all`]: AsyncWriteExt::write_all
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Write unsigned 32-bit integers to a `AsyncWrite`:
|
||||
///
|
||||
/// ```rust
|
||||
/// use tokio::io::{self, AsyncWriteExt};
|
||||
///
|
||||
/// #[tokio::main]
|
||||
/// async fn main() -> io::Result<()> {
|
||||
/// let mut writer = Vec::new();
|
||||
///
|
||||
/// writer.write_u32_le(267).await?;
|
||||
/// writer.write_u32_le(1205419366).await?;
|
||||
///
|
||||
/// assert_eq!(writer, b"\x0b\x01\x00\x00\x66\x3d\xd9\x47");
|
||||
/// Ok(())
|
||||
/// }
|
||||
/// ```
|
||||
fn write_u32_le(&mut self, n: u32) -> WriteU32Le;
|
||||
|
||||
/// Writes a signed 32-bit integer in little-endian order to the
|
||||
/// underlying writer.
|
||||
///
|
||||
/// Equivalent to:
|
||||
///
|
||||
/// ```ignore
|
||||
/// async fn write_i32_le(&mut self, n: i32) -> io::Result<()>;
|
||||
/// ```
|
||||
///
|
||||
/// It is recommended to use a buffered writer to avoid excessive
|
||||
/// syscalls.
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// This method returns the same errors as [`AsyncWriteExt::write_all`].
|
||||
///
|
||||
/// [`AsyncWriteExt::write_all`]: AsyncWriteExt::write_all
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Write signed 32-bit integers to a `AsyncWrite`:
|
||||
///
|
||||
/// ```rust
|
||||
/// use tokio::io::{self, AsyncWriteExt};
|
||||
///
|
||||
/// #[tokio::main]
|
||||
/// async fn main() -> io::Result<()> {
|
||||
/// let mut writer = Vec::new();
|
||||
///
|
||||
/// writer.write_i32_le(267).await?;
|
||||
/// writer.write_i32_le(1205419366).await?;
|
||||
///
|
||||
/// assert_eq!(writer, b"\x0b\x01\x00\x00\x66\x3d\xd9\x47");
|
||||
/// Ok(())
|
||||
/// }
|
||||
/// ```
|
||||
fn write_i32_le(&mut self, n: i32) -> WriteI32Le;
|
||||
|
||||
/// Writes an unsigned 64-bit integer in little-endian order to the
|
||||
/// underlying writer.
|
||||
///
|
||||
/// Equivalent to:
|
||||
///
|
||||
/// ```ignore
|
||||
/// async fn write_u64_le(&mut self, n: u64) -> io::Result<()>;
|
||||
/// ```
|
||||
///
|
||||
/// It is recommended to use a buffered writer to avoid excessive
|
||||
/// syscalls.
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// This method returns the same errors as [`AsyncWriteExt::write_all`].
|
||||
///
|
||||
/// [`AsyncWriteExt::write_all`]: AsyncWriteExt::write_all
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Write unsigned 64-bit integers to a `AsyncWrite`:
|
||||
///
|
||||
/// ```rust
|
||||
/// use tokio::io::{self, AsyncWriteExt};
|
||||
///
|
||||
/// #[tokio::main]
|
||||
/// async fn main() -> io::Result<()> {
|
||||
/// let mut writer = Vec::new();
|
||||
///
|
||||
/// writer.write_u64_le(918733457491587).await?;
|
||||
/// writer.write_u64_le(143).await?;
|
||||
///
|
||||
/// assert_eq!(writer, b"\x83\x86\x60\x4d\x95\x43\x03\x00\x8f\x00\x00\x00\x00\x00\x00\x00");
|
||||
/// Ok(())
|
||||
/// }
|
||||
/// ```
|
||||
fn write_u64_le(&mut self, n: u64) -> WriteU64Le;
|
||||
|
||||
/// Writes an signed 64-bit integer in little-endian order to the
|
||||
/// underlying writer.
|
||||
///
|
||||
/// Equivalent to:
|
||||
///
|
||||
/// ```ignore
|
||||
/// async fn write_i64_le(&mut self, n: i64) -> io::Result<()>;
|
||||
/// ```
|
||||
///
|
||||
/// It is recommended to use a buffered writer to avoid excessive
|
||||
/// syscalls.
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// This method returns the same errors as [`AsyncWriteExt::write_all`].
|
||||
///
|
||||
/// [`AsyncWriteExt::write_all`]: AsyncWriteExt::write_all
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Write signed 64-bit integers to a `AsyncWrite`:
|
||||
///
|
||||
/// ```rust
|
||||
/// use tokio::io::{self, AsyncWriteExt};
|
||||
///
|
||||
/// #[tokio::main]
|
||||
/// async fn main() -> io::Result<()> {
|
||||
/// let mut writer = Vec::new();
|
||||
///
|
||||
/// writer.write_i64_le(i64::min_value()).await?;
|
||||
/// writer.write_i64_le(i64::max_value()).await?;
|
||||
///
|
||||
/// assert_eq!(writer, b"\x00\x00\x00\x00\x00\x00\x00\x80\xff\xff\xff\xff\xff\xff\xff\x7f");
|
||||
/// Ok(())
|
||||
/// }
|
||||
/// ```
|
||||
fn write_i64_le(&mut self, n: i64) -> WriteI64Le;
|
||||
|
||||
/// Writes an unsigned 128-bit integer in little-endian order to the
|
||||
/// underlying writer.
|
||||
///
|
||||
/// Equivalent to:
|
||||
///
|
||||
/// ```ignore
|
||||
/// async fn write_u128_le(&mut self, n: u128) -> io::Result<()>;
|
||||
/// ```
|
||||
///
|
||||
/// It is recommended to use a buffered writer to avoid excessive
|
||||
/// syscalls.
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// This method returns the same errors as [`AsyncWriteExt::write_all`].
|
||||
///
|
||||
/// [`AsyncWriteExt::write_all`]: AsyncWriteExt::write_all
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Write unsigned 128-bit integers to a `AsyncWrite`:
|
||||
///
|
||||
/// ```rust
|
||||
/// use tokio::io::{self, AsyncWriteExt};
|
||||
///
|
||||
/// #[tokio::main]
|
||||
/// async fn main() -> io::Result<()> {
|
||||
/// let mut writer = Vec::new();
|
||||
///
|
||||
/// writer.write_u128_le(16947640962301618749969007319746179).await?;
|
||||
///
|
||||
/// assert_eq!(writer, vec![
|
||||
/// 0x83, 0x86, 0x60, 0x4d, 0x95, 0x43, 0x03, 0x00,
|
||||
/// 0x83, 0x86, 0x60, 0x4d, 0x95, 0x43, 0x03, 0x00,
|
||||
/// ]);
|
||||
/// Ok(())
|
||||
/// }
|
||||
/// ```
|
||||
fn write_u128_le(&mut self, n: u128) -> WriteU128Le;
|
||||
|
||||
/// Writes an signed 128-bit integer in little-endian order to the
|
||||
/// underlying writer.
|
||||
///
|
||||
/// Equivalent to:
|
||||
///
|
||||
/// ```ignore
|
||||
/// async fn write_i128_le(&mut self, n: i128) -> io::Result<()>;
|
||||
/// ```
|
||||
///
|
||||
/// It is recommended to use a buffered writer to avoid excessive
|
||||
/// syscalls.
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// This method returns the same errors as [`AsyncWriteExt::write_all`].
|
||||
///
|
||||
/// [`AsyncWriteExt::write_all`]: AsyncWriteExt::write_all
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Write signed 128-bit integers to a `AsyncWrite`:
|
||||
///
|
||||
/// ```rust
|
||||
/// use tokio::io::{self, AsyncWriteExt};
|
||||
///
|
||||
/// #[tokio::main]
|
||||
/// async fn main() -> io::Result<()> {
|
||||
/// let mut writer = Vec::new();
|
||||
///
|
||||
/// writer.write_i128_le(i128::min_value()).await?;
|
||||
///
|
||||
/// assert_eq!(writer, vec![
|
||||
/// 0, 0, 0, 0, 0, 0, 0,
|
||||
/// 0, 0, 0, 0, 0, 0, 0, 0, 0x80
|
||||
/// ]);
|
||||
/// Ok(())
|
||||
/// }
|
||||
/// ```
|
||||
fn write_i128_le(&mut self, n: i128) -> WriteI128Le;
|
||||
}
|
||||
|
||||
/// Flushes this output stream, ensuring that all intermediately buffered
|
||||
|
||||
@@ -121,3 +121,13 @@ reader!(ReadI16, i16, get_i16);
|
||||
reader!(ReadI32, i32, get_i32);
|
||||
reader!(ReadI64, i64, get_i64);
|
||||
reader!(ReadI128, i128, get_i128);
|
||||
|
||||
reader!(ReadU16Le, u16, get_u16_le);
|
||||
reader!(ReadU32Le, u32, get_u32_le);
|
||||
reader!(ReadU64Le, u64, get_u64_le);
|
||||
reader!(ReadU128Le, u128, get_u128_le);
|
||||
|
||||
reader!(ReadI16Le, i16, get_i16_le);
|
||||
reader!(ReadI32Le, i32, get_i32_le);
|
||||
reader!(ReadI64Le, i64, get_i64_le);
|
||||
reader!(ReadI128Le, i128, get_i128_le);
|
||||
|
||||
@@ -120,3 +120,13 @@ writer!(WriteI16, i16, put_i16);
|
||||
writer!(WriteI32, i32, put_i32);
|
||||
writer!(WriteI64, i64, put_i64);
|
||||
writer!(WriteI128, i128, put_i128);
|
||||
|
||||
writer!(WriteU16Le, u16, put_u16_le);
|
||||
writer!(WriteU32Le, u32, put_u32_le);
|
||||
writer!(WriteU64Le, u64, put_u64_le);
|
||||
writer!(WriteU128Le, u128, put_u128_le);
|
||||
|
||||
writer!(WriteI16Le, i16, put_i16_le);
|
||||
writer!(WriteI32Le, i32, put_i32_le);
|
||||
writer!(WriteI64Le, i64, put_i64_le);
|
||||
writer!(WriteI128Le, i128, put_i128_le);
|
||||
|
||||
Reference in New Issue
Block a user