hipstr 0.8.0

Yet another string for Rust: zero-cost borrow and slicing, inline representation for small strings, (atomic) reference counting
Documentation
use alloc::vec::Vec;

use super::*;
use crate::HipByt as H;

#[test]
fn test_borsh() {
    let s = H::from(b"123");
    let mut buf = Vec::new();
    s.serialize(&mut buf).unwrap();
    let s = H::deserialize(&mut buf.as_slice()).unwrap();
    assert_eq!(s, b"123");

    let a = b"a".repeat(42);
    let s = H::from(a.as_slice());
    let mut buf = Vec::new();
    s.serialize(&mut buf).unwrap();
    let s = H::deserialize(&mut buf.as_slice()).unwrap();
    assert_eq!(s, a);

    let s = H::new();
    let mut buf = Vec::new();
    s.serialize(&mut buf).unwrap();
    let s = H::deserialize(&mut buf.as_slice()).unwrap();
    assert_eq!(s, b"");
}

#[test]
fn test_compat_borsh() {
    let s = "123";
    let mut buf = Vec::new();
    s.serialize(&mut buf).unwrap();
    let s = H::deserialize(&mut buf.as_slice()).unwrap();
    assert_eq!(s, b"123");

    let s = H::from(b"123");
    let mut buf = Vec::new();
    s.serialize(&mut buf).unwrap();
    let s = Vec::<u8>::deserialize(&mut buf.as_slice()).unwrap();
    assert_eq!(s, b"123");
}

#[test]
fn test_bad_borsh() {
    let s = H::from(b"123");
    let mut buf = Vec::new();
    s.serialize(&mut buf).unwrap();

    let payload_short = H::deserialize(&mut &buf[..buf.len() - 1]);
    assert!(payload_short.is_err());

    let size_short = H::deserialize(&mut &buf[..2]);
    assert!(size_short.is_err());
}