Struct Storage

Source
pub struct Storage { /* private fields */ }
Expand description

File memory map backed storage.

Attempting to resize storage results in error.

Implementations§

Source§

impl Storage

Source

pub fn open<P: AsRef<Path>>(path: P) -> Result<Self>

Creates storage by opening or creating file at the specified location.

If file is newly created it is appended dummy byte.

Source

pub fn open_exising<P: AsRef<Path>>(path: P) -> Result<Self>

Opens storage, if it doesn’t exist return error.

Source

pub fn as_slice(&self) -> &[u8]

Returns slice with view on written data.

Source

pub fn as_mut_slice(&mut self) -> &mut [u8]

Returns slice with view on written data.

Source

pub fn capacity(&self) -> usize

Returns overall size of storage(including extra space).

Source

pub fn flush_async(&self) -> Result<()>

Asynchronously flushes outstanding memory map modifications to disk.

This method initiates flushing modified pages to durable storage, but it will not wait for the operation to complete before returning.

Source

pub fn flush_sync(&self) -> Result<()>

Synchronously flushes outstanding memory map modifications to disk.

Source

pub fn resize(&mut self, new_size: usize) -> Result<()>

Resizes storage by appending or truncating.

It modifies file size and re-mmaps file. When Attempting to set size to 0, the actual size will become 1.

If current cursor of data becomes out of actual file storage, it is shifted to actual file storage size

Source

pub fn put_data(&mut self, data: &[u8]) -> Result<()>

Resizes map accordingly to data and copies it.

Convenience method to map buffer to file.

Source

pub fn extend_from_slice(&mut self, data: &[u8]) -> Result<()>

Appends data to storage

Note that it resizes storage if needed. Therefore error can happen.

Source

pub fn copy_from_slice(&mut self, data: &[u8])

Copies data from slice into storage.

Function panics if data has greater len.

Note: It copies data up to storage capacity.

Source

pub fn to_vec(&self) -> Vec<u8>

Creates Vec from content of storage.

Trait Implementations§

Source§

impl Write for Storage

Source§

fn write(&mut self, buf: &[u8]) -> Result<usize>

Writes a buffer into this writer, returning how many bytes were written. Read more
Source§

fn write_all(&mut self, buf: &[u8]) -> Result<()>

Attempts to write an entire buffer into this writer. Read more
Source§

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

Flushes this output stream, ensuring that all intermediately buffered contents reach their destination. Read more
1.36.0 · Source§

fn write_vectored(&mut self, bufs: &[IoSlice<'_>]) -> Result<usize, Error>

Like write, except that it writes from a slice of buffers. Read more
Source§

fn is_write_vectored(&self) -> bool

🔬This is a nightly-only experimental API. (can_vector)
Determines if this Writer has an efficient write_vectored implementation. Read more
Source§

fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>

🔬This is a nightly-only experimental API. (write_all_vectored)
Attempts to write multiple buffers into this writer. Read more
1.0.0 · Source§

fn write_fmt(&mut self, args: Arguments<'_>) -> Result<(), Error>

Writes a formatted string into this writer, returning any error encountered. Read more
1.0.0 · Source§

fn by_ref(&mut self) -> &mut Self
where Self: Sized,

Creates a “by reference” adapter for this instance of Write. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.