varing 0.14.0

Protobuf's varint encoding/decoding for LEB128 friendly types with full const context operations supports.
Documentation
use super::*;

use quickcheck_macros::quickcheck;

#[quickcheck]
fn encode_decode_char(value: char) -> bool {
  let encoded = encode_char(&value);
  if encoded.len() != encoded_char_len(&value).get()
    || (encoded.len() > <char>::MAX_ENCODED_LEN.get())
  {
    return false;
  }

  if let Ok((bytes_read, decoded)) = decode_char(&encoded) {
    value == decoded && encoded.len() == bytes_read.get()
  } else {
    false
  }
}

#[quickcheck]
fn encode_decode_char_varint(value: char) -> bool {
  let mut buf = [0; <char>::MAX_ENCODED_LEN.get()];
  let Ok(encoded_len) = value.encode(&mut buf) else {
    return false;
  };
  if encoded_len != value.encoded_len() || (value.encoded_len() > <char>::MAX_ENCODED_LEN) {
    return false;
  }

  if let Ok((bytes_read, decoded)) = <char>::decode(&buf) {
    value == decoded && encoded_len == bytes_read
  } else {
    false
  }
}