use bitcode::encoding::Encoding;
use bitcode::Encode;
use serde::Serialize;
pub trait WriteBuffer: BitWrite {
fn serialize<T: Serialize + ?Sized>(&mut self, t: &T) -> anyhow::Result<()>;
fn encode<T: Encode + ?Sized>(&mut self, t: &T, encoding: impl Encoding) -> anyhow::Result<()>;
fn capacity(&self) -> usize;
fn with_capacity(capacity: usize) -> Self;
fn start_write(&mut self);
fn finish_write(&mut self) -> &[u8];
fn num_bits_written(&self) -> usize;
fn overflowed(&self) -> bool;
fn reserve_bits(&mut self, num_bits: usize);
fn release_bits(&mut self, num_bits: usize);
fn set_reserved_bits(&mut self, num_bits: usize);
}
pub trait BitWrite {
fn write_bit(&mut self, bit: bool);
fn write_bits(&mut self, bits: u32);
fn write_bytes(&mut self, bytes: &[u8]);
}