[][src]Struct kekbit::core::Header

pub struct Header { /* fields omitted */ }

Defines and validates the metadata associated with a channel.

Methods

impl Header[src]

pub fn new(
    writer_id: u64,
    channel_id: u64,
    capacity_hint: u32,
    max_msg_len_hint: u32,
    timeout: u64,
    tick_unit: TickUnit
) -> Header
[src]

Defines a new channel header.

Return a struct that contains all the metadata required to be associated with a new channel.

Arguments

  • writer_id - Channel's writer identifier
  • channel_id - Channel's identifier
  • capacity_hint - Hint for the size of the channel - the maximum amount of data that can be wrote into the channel. Usually a successfully created channel will have a size very close to this hint, probably a little larger.
  • max_msg_len_hint - Hint for the maximum size of a message wrote into the channel. This cannot be larger than a certain fraction. of the channel's capacity(1/128th), so the new created channel may have max message length value smaller than this hint.
  • timeout - Specifies the write inactivity time interval after each the reader will consider the channel abandoned by the writer.
  • tick_unit - Time unit used by the timeout and creation time attributes.

Example

use kekbit_core::tick::TickUnit::Nanos;
use kekbit_core::header::*;
     
let producer_id: u64 = 111;
let channel_id: u64 = 101;
let capacity: u32 = 10_001;
let max_msg_len: u32 = 100;
let timeout: u64 = 10_000;
let tick_unit = Nanos;
let header = Header::new(channel_id, producer_id, capacity, max_msg_len, timeout, tick_unit);
println!("{:?}", &header);

pub fn read(header: &[u8]) -> Result<Header, ChannelError>[src]

Reads and validates the metadata from an existing memory mapped channel.

Returns the metadata associated with the channel.

Arguments

  • header - Reference to a byte array which should contain metadata associated with a given channel. Usually points at the beginning of a memory mapped file used as storage for a kekbit channel.

Errors

An error will occur if data is corrupted or points to an incompatible version of kekbit channel.

Example

 use memmap::MmapOptions;
 use std::fs::OpenOptions;

 use kekbit_core::shm::*;
 let writer_id = 1850;
 let channel_id = 4242;
 let test_tmp_dir = tempdir::TempDir::new("kektest").unwrap();
 let dir_path = test_tmp_dir.path();

 let kek_file_name = storage_path(dir_path, channel_id);
 let kek_file = OpenOptions::new()
  .write(true)
  .read(true)
  .open(&kek_file_name).unwrap();
  let mut mmap = unsafe { MmapOptions::new().map_mut(&kek_file) }.unwrap();
  let buf = &mut mmap[..];
  let header = Header::read(buf).unwrap();
  println!("{:?}", &header);

pub fn write_to(&self, header: &mut [u8]) -> usize[src]

Writes kekbit metadata to a memory mapepd file.

Returns the lenght of the metadata

Arguments

  • header - Reference to a byte slice where metadata must be written. Usually points at the beginning of a memory mapped file used as storage for a kekbit channel.

Example

 use memmap::MmapOptions;
 use std::fs::OpenOptions;

 use kekbit_core::tick::TickUnit::Nanos;
 use kekbit_core::header::Header;
 use kekbit_core::shm::*;
 use std::fs::DirBuilder;

 const FOREVER: u64 = 99_999_999_999;
 let writer_id = 1850;
 let channel_id = 42;
 let test_tmp_dir = tempdir::TempDir::new("keksample").unwrap();
 let dir_path = test_tmp_dir.path().join(writer_id.to_string());
 let mut builder = DirBuilder::new();
 builder.recursive(true);
 builder.create(&dir_path).or_else(|err| Err(err.to_string())).unwrap();

 let kek_file_name = dir_path.join(format!("{}.kekbit", channel_id));
 let kek_file = OpenOptions::new()
 .write(true)
 .read(true)
 .create(true)
 .open(&kek_file_name)
 .or_else(|err| Err(err.to_string())).unwrap();

 let header = Header::new(writer_id, channel_id, 300_000, 1000, FOREVER, Nanos);
 let total_len = (header.capacity() + header.len() as u32) as u64;
 kek_file.set_len(total_len).or_else(|err| Err(err.to_string())).unwrap();
 let mut mmap = unsafe { MmapOptions::new().map_mut(&kek_file) }.unwrap();
 let buf = &mut mmap[..];
 header.write_to(buf);
 mmap.flush().unwrap();

pub fn version(&self) -> String[src]

Returns the metadata version

pub fn channel_id(&self) -> u64[src]

Returns the channel identifier

pub fn writer_id(&self) -> u64[src]

Returns the channel writer identifier

pub fn capacity(&self) -> u32[src]

Returns the capacity of the channel

pub fn max_msg_len(&self) -> u32[src]

Returns the maximum message size allowed

pub fn timeout(&self) -> u64[src]

Returns the inactivity time interval after each the reader will consider the channel abandoned by the writer.

pub fn creation_time(&self) -> u64[src]

Returns the channel creation time

pub fn tick_unit(&self) -> TickUnit[src]

Returns the time unit used by the channel creation time and the timeout attributes.

pub const fn len(&self) -> usize[src]

Returns the length of the metadata. For any given version the length is the same. In the current version it is 128 bytes.

Trait Implementations

impl Debug for Header[src]

impl Eq for Header[src]

impl PartialEq<Header> for Header[src]

impl StructuralEq for Header[src]

impl StructuralPartialEq for Header[src]

Auto Trait Implementations

impl RefUnwindSafe for Header

impl Send for Header

impl Sync for Header

impl Unpin for Header

impl UnwindSafe for Header

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.