use bytes::{Buf, BufMut};
use super::{VarInt, VarIntUnexpectedEnd};
use crate::grease::is_grease_value;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct UniStream(pub VarInt);
impl UniStream {
pub fn decode<B: Buf>(buf: &mut B) -> Result<Self, VarIntUnexpectedEnd> {
Ok(UniStream(VarInt::decode(buf)?))
}
pub fn encode<B: BufMut>(&self, buf: &mut B) {
self.0.encode(buf)
}
pub fn is_grease(&self) -> bool {
is_grease_value(self.0.into_inner())
}
pub const fn from_u32(value: u32) -> Self {
Self(VarInt::from_u32(value))
}
pub const CONTROL: UniStream = UniStream::from_u32(0x00);
pub const PUSH: UniStream = UniStream::from_u32(0x01);
pub const QPACK_ENCODER: UniStream = UniStream::from_u32(0x02);
pub const QPACK_DECODER: UniStream = UniStream::from_u32(0x03);
pub const WEBTRANSPORT: UniStream = UniStream::from_u32(0x54);
}