Sha256: 60ba28f67a9acaecf8964b611efba416b13f9f2bae4befc329fdf0e037293802

Contents?: true

Size: 1.7 KB

Versions: 30

Compression:

Stored size: 1.7 KB

Contents

//! Reimplements core logic and types from `std::io` in an `alloc`-friendly
//! fashion.

use alloc::vec::Vec;
use core::fmt::{self, Display};
use core::result;

pub enum ErrorKind {
    Other,
}

// I/O errors can never occur in no-std mode. All our no-std I/O implementations
// are infallible.
pub struct Error;

impl Display for Error {
    fn fmt(&self, _formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
        unreachable!()
    }
}

impl Error {
    pub(crate) fn new(_kind: ErrorKind, _error: &'static str) -> Error {
        Error
    }
}

pub type Result<T> = result::Result<T, Error>;

pub trait Write {
    fn write(&mut self, buf: &[u8]) -> Result<usize>;

    fn write_all(&mut self, buf: &[u8]) -> Result<()> {
        // All our Write impls in no_std mode always write the whole buffer in
        // one call infallibly.
        let result = self.write(buf);
        debug_assert!(result.is_ok());
        debug_assert_eq!(result.unwrap_or(0), buf.len());
        Ok(())
    }

    fn flush(&mut self) -> Result<()>;
}

impl<W: Write> Write for &mut W {
    #[inline]
    fn write(&mut self, buf: &[u8]) -> Result<usize> {
        (*self).write(buf)
    }

    #[inline]
    fn write_all(&mut self, buf: &[u8]) -> Result<()> {
        (*self).write_all(buf)
    }

    #[inline]
    fn flush(&mut self) -> Result<()> {
        (*self).flush()
    }
}

impl Write for Vec<u8> {
    #[inline]
    fn write(&mut self, buf: &[u8]) -> Result<usize> {
        self.extend_from_slice(buf);
        Ok(buf.len())
    }

    #[inline]
    fn write_all(&mut self, buf: &[u8]) -> Result<()> {
        self.extend_from_slice(buf);
        Ok(())
    }

    #[inline]
    fn flush(&mut self) -> Result<()> {
        Ok(())
    }
}

Version data entries

30 entries across 30 versions & 1 rubygems

Version Path
wasmtime-29.0.0 ./ext/cargo-vendor/serde_json-1.0.137/src/io/core.rs
wasmtime-28.0.0 ./ext/cargo-vendor/serde_json-1.0.135/src/io/core.rs
wasmtime-27.0.0 ./ext/cargo-vendor/serde_json-1.0.133/src/io/core.rs
wasmtime-26.0.0 ./ext/cargo-vendor/serde_json-1.0.132/src/io/core.rs
wasmtime-25.0.2 ./ext/cargo-vendor/serde_json-1.0.125/src/io/core.rs
wasmtime-25.0.1 ./ext/cargo-vendor/serde_json-1.0.125/src/io/core.rs
wasmtime-25.0.0 ./ext/cargo-vendor/serde_json-1.0.125/src/io/core.rs
wasmtime-24.0.0 ./ext/cargo-vendor/serde_json-1.0.125/src/io/core.rs
wasmtime-23.0.2 ./ext/cargo-vendor/serde_json-1.0.111/src/io/core.rs
wasmtime-22.0.0 ./ext/cargo-vendor/serde_json-1.0.111/src/io/core.rs
wasmtime-21.0.1 ./ext/cargo-vendor/serde_json-1.0.111/src/io/core.rs
wasmtime-20.0.2 ./ext/cargo-vendor/serde_json-1.0.111/src/io/core.rs
wasmtime-20.0.0 ./ext/cargo-vendor/serde_json-1.0.111/src/io/core.rs
wasmtime-18.0.3 ./ext/cargo-vendor/serde_json-1.0.111/src/io/core.rs
wasmtime-17.0.1 ./ext/cargo-vendor/serde_json-1.0.111/src/io/core.rs
wasmtime-17.0.0 ./ext/cargo-vendor/serde_json-1.0.111/src/io/core.rs
wasmtime-16.0.0 ./ext/cargo-vendor/serde_json-1.0.111/src/io/core.rs
wasmtime-15.0.1 ./ext/cargo-vendor/serde_json-1.0.111/src/io/core.rs
wasmtime-15.0.0 ./ext/cargo-vendor/serde_json-1.0.111/src/io/core.rs
wasmtime-14.0.4 ./ext/cargo-vendor/serde_json-1.0.107/src/io/core.rs