abin 0.1.6

A library for working with binaries and strings. The library tries to avoid heap-allocations / memory-copy whenever possible by automatically choosing a reasonable strategy: stack for small binaries; static-lifetime-binary or reference-counting.
Documentation
use crate::spi::UnsafeBin;
use crate::AnyRc;
use crate::{AnyRcConfigForSync, AnyRcImpl, SBin};

/// A reference-counted binary. Note: The reference counter is synchronized, so this
/// is `Send + Sync`. Cloning is cheap. See `AnyRc`.
pub struct ArcBin;

impl AnyRc for ArcBin {
    type T = SBin;

    #[inline]
    fn copy_from_slice(slice: &[u8]) -> Self::T {
        unsafe { AnyRcImpl::<AnyRcConfigForSync>::copy_from_slice(slice)._into_sync() }
    }

    #[inline]
    fn from_iter(iter: impl IntoIterator<Item = u8>) -> Self::T {
        unsafe { AnyRcImpl::<AnyRcConfigForSync>::from_iter(iter)._into_sync() }
    }

    #[inline]
    fn from_vec(vec: Vec<u8>) -> Self::T {
        unsafe { AnyRcImpl::<AnyRcConfigForSync>::from_vec(vec)._into_sync() }
    }

    #[inline]
    fn overhead_bytes() -> usize {
        AnyRcImpl::<AnyRcConfigForSync>::overhead_bytes()
    }
}