pub struct ByteBuffer { /* private fields */ }
Expand description
The stream buffer for encoding/decoding chunk data.
Implementations§
Source§impl ByteBuffer
impl ByteBuffer
Sourcepub fn peek_u8(&self) -> IOResult<u8>
pub fn peek_u8(&self) -> IOResult<u8>
Peeks 1 byte from buffer. This keeps buffer’s current offset.
§Errors
When buffer isn’t remained at least 1 byte.
§Examples
use rand::random;
use sheave_core::ByteBuffer;
let n = random::<u8>();
let mut buffer: ByteBuffer = n.to_be_bytes().to_vec().into();
assert!(buffer.peek_u8().is_ok());
let bytes: Vec<u8> = buffer.into();
// Buffer isn't consumed.
assert_eq!(n.to_be_bytes().as_slice(), &bytes);
let mut buffer: ByteBuffer = Vec::new().into();
assert!(buffer.peek_u8().is_err());
Sourcepub fn get_u8(&mut self) -> IOResult<u8>
pub fn get_u8(&mut self) -> IOResult<u8>
Tries getting 1 byte from buffer.
§Errors
When buffer isn’t remained at least 1 byte.
§Examples
use rand::random;
use sheave_core::ByteBuffer;
let mut buffer: ByteBuffer = random::<u8>().to_be_bytes().to_vec().into();
assert!(buffer.get_u8().is_ok());
let mut buffer: ByteBuffer = Vec::new().into();
assert!(buffer.get_u8().is_err());
Sourcepub fn get_u16_be(&mut self) -> IOResult<u16>
pub fn get_u16_be(&mut self) -> IOResult<u16>
Tries getting 2 bytes from buffer, as the big endian.
§Errors
When buffer isn’t remained at least 2 bytes.
§Examples
use rand::random;
use sheave_core::ByteBuffer;
let mut buffer: ByteBuffer = random::<u16>().to_be_bytes().to_vec().into();
assert!(buffer.get_u16_be().is_ok());
let mut buffer: ByteBuffer = Vec::new().into();
assert!(buffer.get_u16_be().is_err());
Sourcepub fn get_i24_be(&mut self) -> IOResult<i32>
pub fn get_i24_be(&mut self) -> IOResult<i32>
Tries getting signed 3 bytes from buffer, as the big endian.
§Errors
When buffer isn’t remained at least 2 bytes.
§Examples
use rand::{
Fill,
thread_rng
};
use sheave_core::ByteBuffer;
let mut bytes: [u8; 3] = [0; 3];
bytes.try_fill(&mut thread_rng()).unwrap();
let mut buffer: ByteBuffer = bytes.to_vec().into();
assert!(buffer.get_i24_be().is_ok());
let mut buffer: ByteBuffer = Vec::new().into();
assert!(buffer.get_i24_be().is_err());
Sourcepub fn get_u24_be(&mut self) -> IOResult<u32>
pub fn get_u24_be(&mut self) -> IOResult<u32>
Tries getting 3 bytes from buffer, as the big endian.
§Errors
When buffer isn’t remained at least 2 bytes.
§Examples
use rand::{
Fill,
thread_rng
};
use sheave_core::ByteBuffer;
let mut bytes: [u8; 3] = [0; 3];
bytes.try_fill(&mut thread_rng()).unwrap();
let mut buffer: ByteBuffer = bytes.to_vec().into();
assert!(buffer.get_u24_be().is_ok());
let mut buffer: ByteBuffer = Vec::new().into();
assert!(buffer.get_u24_be().is_err());
Sourcepub fn get_u32_be(&mut self) -> IOResult<u32>
pub fn get_u32_be(&mut self) -> IOResult<u32>
Tries getting 4 bytes from buffer, as the big endian.
§Errors
When buffer isn’t remained at least 4 bytes.
§Examples
use rand::random;
use sheave_core::ByteBuffer;
let mut buffer: ByteBuffer = random::<u32>().to_be_bytes().to_vec().into();
assert!(buffer.get_u32_be().is_ok());
let mut buffer: ByteBuffer = Vec::new().into();
assert!(buffer.get_u32_be().is_err());
Sourcepub fn get_f64(&mut self) -> IOResult<f64>
pub fn get_f64(&mut self) -> IOResult<f64>
Tries getting 8 bytes from buffer, as a 64 bits floating point number.
§Errors
When buffer isn’t remained at least 8 bytes.
§Examples
use rand::random;
use sheave_core::ByteBuffer;
let mut buffer: ByteBuffer = random::<u64>().to_be_bytes().to_vec().into();
assert!(buffer.get_f64().is_ok());
let mut buffer: ByteBuffer = Vec::new().into();
assert!(buffer.get_f64().is_err());
Sourcepub fn get_bytes(&mut self, len: usize) -> IOResult<&[u8]>
pub fn get_bytes(&mut self, len: usize) -> IOResult<&[u8]>
Tries getting arbitrary bytes from buffer.
§Erorrs
InsufficientBufferLength
When buffer isn’t remained at least specified length.
§Examples
use sheave_core::ByteBuffer;
let bytes = "hello world!".as_bytes();
let mut buffer: ByteBuffer = bytes.to_vec().into();
assert!(buffer.get_bytes(bytes.len()).is_ok());
let mut buffer: ByteBuffer = Vec::new().into();
assert!(buffer.get_bytes(bytes.len()).is_err())
Sourcepub fn put_u16_be(&mut self, n: u16)
pub fn put_u16_be(&mut self, n: u16)
Puts 2 bytes into buffer, as the big endian.
Sourcepub fn put_i24_be(&mut self, n: i32)
pub fn put_i24_be(&mut self, n: i32)
Puts signed 3 bytes into buffer, as the big endian.
§Panics
Its value must be the range of 24 bits. If it exceeds, a panic is occured.
§Examples
use std::panic::catch_unwind;
let result = catch_unwind(
|| {
use sheave_core::ByteBuffer;
let mut buffer = ByteBuffer::default();
buffer.put_i24_be((0x00ffffff + 1) as i32);
}
);
assert!(result.is_err())
Sourcepub fn put_u24_be(&mut self, n: u32)
pub fn put_u24_be(&mut self, n: u32)
Puts 3 bytes into buffer, as the big endian.
§Panics
Its value must be the range of 24 bits. If it exceeds, a panic is occured.
§Examples
use std::panic::catch_unwind;
let result = catch_unwind(
|| {
use sheave_core::ByteBuffer;
let mut buffer = ByteBuffer::default();
buffer.put_u24_be((0x00ffffff + 1) as u32);
}
);
assert!(result.is_err())
Sourcepub fn put_u32_be(&mut self, n: u32)
pub fn put_u32_be(&mut self, n: u32)
Puts 4 bytes into buffer, as the big endian.
Trait Implementations§
Source§impl Clone for ByteBuffer
impl Clone for ByteBuffer
Source§fn clone(&self) -> ByteBuffer
fn clone(&self) -> ByteBuffer
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for ByteBuffer
impl Debug for ByteBuffer
Source§impl Decoder<Acknowledgement> for ByteBuffer
impl Decoder<Acknowledgement> for ByteBuffer
Source§fn decode(&mut self) -> IOResult<Acknowledgement>
fn decode(&mut self) -> IOResult<Acknowledgement>
Decodes bytes into a Acknowledgement message.
§Errors
When this buffer didn’t remain at least 4 bytes.
§Examples
use sheave_core::{
ByteBuffer,
Decoder,
messages::{
Acknowledgement
}
};
let mut buffer = ByteBuffer::default();
buffer.put_u32_be(u32::default());
assert!(Decoder::<Acknowledgement>::decode(&mut buffer).is_ok())
Source§impl Decoder<AmfString> for ByteBuffer
impl Decoder<AmfString> for ByteBuffer
Source§fn decode(&mut self) -> IOResult<AmfString>
fn decode(&mut self) -> IOResult<AmfString>
Decodes bytes into an AMF’s String.
§Errors
When buffer isn’t remained at least 3 bytes.
When a marker byte doesn’t indicate the AMF String.
When bytes are invalid for a UTF-8 string.
§Examples
use sheave_core::{
ByteBuffer,
Decoder,
messages::amf::v0::{
Marker,
AmfString
}
};
let s = "hello world!".as_bytes();
let mut buffer = ByteBuffer::default();
buffer.put_u8(Marker::AmfString as u8);
buffer.put_u16_be(s.len() as u16);
buffer.put_bytes(s);
assert!(Decoder::<AmfString>::decode(&mut buffer).is_ok());
let mut buffer = ByteBuffer::default();
buffer.put_u8(Marker::Number as u8);
buffer.put_u16_be(s.len() as u16);
buffer.put_bytes(s);
assert!(Decoder::<AmfString>::decode(&mut buffer).is_err());
// This is a missing sequence of the "sparkle heart(💖)".
let bytes = vec![0, 159, 146, 150];
let mut buffer = ByteBuffer::default();
buffer.put_u8(Marker::AmfString as u8);
buffer.put_u16_be(bytes.len() as u16);
buffer.put_bytes(&bytes);
assert!(Decoder::<AmfString>::decode(&mut buffer).is_err());
let mut buffer = ByteBuffer::default();
assert!(Decoder::<AmfString>::decode(&mut buffer).is_err())
Source§impl Decoder<AudioTag> for ByteBuffer
impl Decoder<AudioTag> for ByteBuffer
Source§fn decode(&mut self) -> IOResult<AudioTag>
fn decode(&mut self) -> IOResult<AudioTag>
Decodes bytes into a AudioTag.
§Errors
When some field misses.
§Examples
use rand::{
Fill,
thread_rng
};
use sheave_core::{
ByteBuffer,
Decoder,
Encoder,
flv::tags::{
AudioTag,
AudioTagHeader,
SoundFormat,
SoundRate
}
};
let mut buffer = ByteBuffer::default();
buffer.encode(&AudioTagHeader::new(SoundFormat::LinearPcmNe, SoundRate::FivePointFive, false, false, None));
let mut bytes: [u8; 127] = [0; 127];
bytes.try_fill(&mut thread_rng()).unwrap();
buffer.put_bytes(&bytes);
assert!(Decoder::<AudioTag>::decode(&mut buffer).is_ok());
let mut buffer = ByteBuffer::default();
assert!(Decoder::<AudioTag>::decode(&mut buffer).is_err())
Source§impl Decoder<AudioTagHeader> for ByteBuffer
impl Decoder<AudioTagHeader> for ByteBuffer
Source§fn decode(&mut self) -> IOResult<AudioTagHeader>
fn decode(&mut self) -> IOResult<AudioTagHeader>
Decodes bytes into a AudioTagHeader.
§Errors
When some field misses.
§Examples
use sheave_core::{
ByteBuffer,
Decoder,
flv::tags::AudioTagHeader
};
let mut buffer = ByteBuffer::default();
buffer.put_u8(0);
assert!(Decoder::<AudioTagHeader>::decode(&mut buffer).is_ok());
let mut buffer = ByteBuffer::default();
assert!(Decoder::<AudioTagHeader>::decode(&mut buffer).is_err())
Source§impl Decoder<Boolean> for ByteBuffer
impl Decoder<Boolean> for ByteBuffer
Source§fn decode(&mut self) -> IOResult<Boolean>
fn decode(&mut self) -> IOResult<Boolean>
Decodes bytes into an AMF’s Boolean.
§Errors
When buffer isn’t remained at least 2 bytes.
When a marker byte doesn’t indicate the AMF Boolean.
§Examples
use sheave_core::{
ByteBuffer,
Decoder,
messages::amf::v0::{
Marker,
Boolean
}
};
let mut buffer = ByteBuffer::default();
buffer.put_u8(Marker::Boolean as u8);
buffer.put_u8(0);
assert!(Decoder::<Boolean>::decode(&mut buffer).is_ok());
let mut buffer = ByteBuffer::default();
buffer.put_u8(Marker::Number as u8);
buffer.put_u8(0);
assert!(Decoder::<Boolean>::decode(&mut buffer).is_err());
let mut buffer = ByteBuffer::default();
assert!(Decoder::<Boolean>::decode(&mut buffer).is_err())
Source§impl Decoder<ChunkSize> for ByteBuffer
impl Decoder<ChunkSize> for ByteBuffer
Source§fn decode(&mut self) -> IOResult<ChunkSize>
fn decode(&mut self) -> IOResult<ChunkSize>
Decodes bytes into a ChunkSize.
§Errors
When chunk data didn’t remain at least 4 bytes.
When its received chunk size’s most significant bit is 1. Chunking size is required that its bit is 0 in the specification. This is probably considered of programs which has no unsigned type.
§Examples
use sheave_core::{
ByteBuffer,
Decoder,
messages::ChunkSize
};
let mut buffer = ByteBuffer::default();
buffer.put_u32_be(128);
assert!(Decoder::<ChunkSize>::decode(&mut buffer).is_ok());
let mut buffer = ByteBuffer::default();
buffer.put_u32_be(0x80000000);
assert!(Decoder::<ChunkSize>::decode(&mut buffer).is_err());
let mut buffer = ByteBuffer::default();
assert!(Decoder::<ChunkSize>::decode(&mut buffer).is_err());
Source§impl Decoder<Connect> for ByteBuffer
impl Decoder<Connect> for ByteBuffer
Source§fn decode(&mut self) -> IOResult<Connect>
fn decode(&mut self) -> IOResult<Connect>
Decodes bytes into a Connect command.
§Errors
When some field misses.
When some value is inconsistent with its marker.
§Examples
use sheave_core::{
ByteBuffer,
Decoder,
Encoder,
messages::{
Connect,
amf::v0::Object,
}
};
let mut buffer = ByteBuffer::default();
buffer.encode(&Object::default());
assert!(Decoder::<Connect>::decode(&mut buffer).is_ok());
let mut buffer = ByteBuffer::default();
assert!(Decoder::<Connect>::decode(&mut buffer).is_err())
Source§impl Decoder<ConnectResult> for ByteBuffer
impl Decoder<ConnectResult> for ByteBuffer
Source§fn decode(&mut self) -> IOResult<ConnectResult>
fn decode(&mut self) -> IOResult<ConnectResult>
Decodes bytes into a ConnectResult command.
§Errors
When some field misses.
When some value is inconsistent with its marker.
§Examples
use sheave_core::{
ByteBuffer,
Decoder,
Encoder,
messages::{
ConnectResult,
amf::v0::Object,
}
};
let mut buffer = ByteBuffer::default();
buffer.encode(&Object::default());
buffer.encode(&Object::default());
assert!(Decoder::<ConnectResult>::decode(&mut buffer).is_ok());
let mut buffer = ByteBuffer::default();
assert!(Decoder::<ConnectResult>::decode(&mut buffer).is_err())
Source§impl Decoder<CreateStream> for ByteBuffer
impl Decoder<CreateStream> for ByteBuffer
Source§fn decode(&mut self) -> IOResult<CreateStream>
fn decode(&mut self) -> IOResult<CreateStream>
Decodes bytes into a CreateStream command.
§Errors
When some field misses.
When some value is inconsistent with its marker.
§Examples
use sheave_core::{
ByteBuffer,
Decoder,
Encoder,
messages::{
CreateStream,
amf::v0::Null,
}
};
let mut buffer = ByteBuffer::default();
buffer.encode(&Null);
assert!(Decoder::<CreateStream>::decode(&mut buffer).is_ok());
let mut buffer = ByteBuffer::default();
assert!(Decoder::<CreateStream>::decode(&mut buffer).is_err())
Source§impl Decoder<CreateStreamResult> for ByteBuffer
impl Decoder<CreateStreamResult> for ByteBuffer
Source§fn decode(&mut self) -> IOResult<CreateStreamResult>
fn decode(&mut self) -> IOResult<CreateStreamResult>
Decodes bytes into a CreateStreamResult command.
§Errors
When some field misses.
When some value is inconsistent with its marker.
§Examples
use sheave_core::{
ByteBuffer,
Decoder,
Encoder,
messages::{
CreateStreamResult,
amf::v0::{
Number,
Null
}
}
};
let mut buffer = ByteBuffer::default();
buffer.encode(&Null);
buffer.encode(&Number::default());
assert!(Decoder::<CreateStreamResult>::decode(&mut buffer).is_ok());
let mut buffer = ByteBuffer::default();
assert!(Decoder::<CreateStreamResult>::decode(&mut buffer).is_err())
Source§impl Decoder<DeleteStream> for ByteBuffer
impl Decoder<DeleteStream> for ByteBuffer
Source§fn decode(&mut self) -> IOResult<DeleteStream>
fn decode(&mut self) -> IOResult<DeleteStream>
Decodes bytes into a DeleteStream command.
§Errors
When some field misses.
When some value is inconsistent with its marker.
§Examples
use sheave_core::{
ByteBuffer,
Decoder,
Encoder,
messages::{
DeleteStream,
amf::v0::{
Number,
Null
}
}
};
let mut buffer = ByteBuffer::default();
buffer.encode(&Null);
buffer.encode(&Number::default());
assert!(Decoder::<DeleteStream>::decode(&mut buffer).is_ok());
let mut buffer = ByteBuffer::default();
assert!(Decoder::<DeleteStream>::decode(&mut buffer).is_err())
Source§impl Decoder<EcmaArray> for ByteBuffer
impl Decoder<EcmaArray> for ByteBuffer
Source§fn decode(&mut self) -> IOResult<EcmaArray>
fn decode(&mut self) -> IOResult<EcmaArray>
Decodes bytes into an ECMA array.
§Errors
When buffer isn’t remained at least 2 bytes. (non-empty ECMA array contains at least one pair of key and value)
When a marker byte doesn’t indicate the ECMA array.
When key bytes are invalid for a UTF-8 string.
§Examples
use sheave_core::{
ByteBuffer,
Decoder,
messages::amf::v0::{
Marker,
EcmaArray
}
};
let mut buffer = ByteBuffer::default();
buffer.put_u8(Marker::EcmaArray as u8);
buffer.put_u32_be(0);
// Also ECMA array type is required a marker of object end (0x09) which is associated with an empty key.
buffer.put_u16_be(0);
buffer.put_u8(Marker::ObjectEnd as u8);
assert!(Decoder::<EcmaArray>::decode(&mut buffer).is_ok());
let mut buffer = ByteBuffer::default();
buffer.put_u8(Marker::Number as u8);
buffer.put_u32_be(0);
buffer.put_u16_be(0);
buffer.put_u8(Marker::ObjectEnd as u8);
assert!(Decoder::<EcmaArray>::decode(&mut buffer).is_err());
// This is a missing sequence of the "sparkle heart(💖)".
let mut bytes = vec![0, 159, 146, 150];
let mut buffer = ByteBuffer::default();
buffer.put_u8(Marker::EcmaArray as u8);
buffer.put_u32_be(0);
buffer.put_u16_be(4);
buffer.put_bytes(&bytes);
buffer.put_u8(Marker::Number as u8);
buffer.put_f64(0.0);
buffer.put_u16_be(0);
buffer.put_u8(Marker::ObjectEnd as u8);
assert!(Decoder::<EcmaArray>::decode(&mut buffer).is_err());
let mut buffer = ByteBuffer::default();
assert!(Decoder::<EcmaArray>::decode(&mut buffer).is_err())
Note the length field will not be so cared because to decodde is enough to check the object end marker (0x09). However warning will emit if lengths is inconsistent.
Source§impl Decoder<FcPublish> for ByteBuffer
impl Decoder<FcPublish> for ByteBuffer
Source§fn decode(&mut self) -> IOResult<FcPublish>
fn decode(&mut self) -> IOResult<FcPublish>
Decodes bytes into a FcPublish command.
§Errors
When some field misses.
When some value is inconsistent with its marker.
When some value is invalid for UTF-8 string.
§Examples
use sheave_core::{
ByteBuffer,
Decoder,
Encoder,
messages::{
FcPublish,
amf::v0::{
AmfString,
Null
}
}
};
let mut buffer = ByteBuffer::default();
buffer.encode(&Null);
buffer.encode(&AmfString::default());
assert!(Decoder::<FcPublish>::decode(&mut buffer).is_ok());
let mut buffer = ByteBuffer::default();
assert!(Decoder::<FcPublish>::decode(&mut buffer).is_err())
Source§impl Decoder<FcUnpublish> for ByteBuffer
impl Decoder<FcUnpublish> for ByteBuffer
Source§fn decode(&mut self) -> IOResult<FcUnpublish>
fn decode(&mut self) -> IOResult<FcUnpublish>
Decodes bytes into a FcUnpublish command.
§Errors
When some field misses.
When some value is inconsistent with its marker.
When some value is invalid for UTF-8 string.
§Examples
use sheave_core::{
ByteBuffer,
Decoder,
Encoder,
messages::{
FcUnpublish,
amf::v0::{
AmfString,
Null
}
}
};
let mut buffer = ByteBuffer::default();
buffer.encode(&Null);
buffer.encode(&AmfString::default());
assert!(Decoder::<FcUnpublish>::decode(&mut buffer).is_ok());
let mut buffer = ByteBuffer::default();
assert!(Decoder::<FcUnpublish>::decode(&mut buffer).is_err())
Source§impl Decoder<Null> for ByteBuffer
impl Decoder<Null> for ByteBuffer
Source§fn decode(&mut self) -> IOResult<Null>
fn decode(&mut self) -> IOResult<Null>
Decodes bytes into an AMF’s Null.
§Errors
When buffer isn’t remained at least 1 byte.
When a marker byte doesn’t indicate the AMF Null.
§Examples
use sheave_core::{
ByteBuffer,
Decoder,
messages::amf::v0::{
Marker,
Null
}
};
let mut buffer = ByteBuffer::default();
buffer.put_u8(Marker::Null as u8);
assert!(Decoder::<Null>::decode(&mut buffer).is_ok());
let mut buffer = ByteBuffer::default();
buffer.put_u8(Marker::Boolean as u8);
assert!(Decoder::<Null>::decode(&mut buffer).is_err());
let mut buffer = ByteBuffer::default();
assert!(Decoder::<Null>::decode(&mut buffer).is_err())
Source§impl Decoder<Number> for ByteBuffer
impl Decoder<Number> for ByteBuffer
Source§fn decode(&mut self) -> IOResult<Number>
fn decode(&mut self) -> IOResult<Number>
Decodes bytes into an AMF’s Number.
§Errors
When buffer isn’t remained at least 9 bytes.
When a marker byte doesn’t indicate the AMF Number.
§Examples
use rand::random;
use sheave_core::{
ByteBuffer,
Decoder,
messages::amf::v0::{
Marker,
Number
}
};
let mut buffer = ByteBuffer::default();
buffer.put_u8(Marker::Number as u8);
buffer.put_f64(f64::from_bits(random::<u64>()));
assert!(Decoder::<Number>::decode(&mut buffer).is_ok());
let mut buffer = ByteBuffer::default();
buffer.put_u8(Marker::Boolean as u8);
buffer.put_f64(f64::from_bits(random::<u64>()));
assert!(Decoder::<Number>::decode(&mut buffer).is_err());
let mut buffer = ByteBuffer::default();
assert!(Decoder::<Number>::decode(&mut buffer).is_err())
Source§impl Decoder<Object> for ByteBuffer
impl Decoder<Object> for ByteBuffer
Source§fn decode(&mut self) -> IOResult<Object>
fn decode(&mut self) -> IOResult<Object>
Decodes bytes into an AMF’s Object type.
§Errors
When buffer isn’t remained at least 2 bytes. (non-empty object contains at least one pair of key and value)
When a marker byte doesn’t indicate the AMF Object.
When key bytes are invalid for a UTF-8 string.
§Examples
use sheave_core::{
ByteBuffer,
Decoder,
messages::amf::v0::{
Marker,
Object
}
};
let mut buffer = ByteBuffer::default();
buffer.put_u8(Marker::Object as u8);
// AMF's Object type is required a marker of object end (0x09) which is associated with an empty key.
buffer.put_u16_be(0);
buffer.put_u8(Marker::ObjectEnd as u8);
assert!(Decoder::<Object>::decode(&mut buffer).is_ok());
let mut buffer = ByteBuffer::default();
buffer.put_u8(Marker::Number as u8);
buffer.put_u16_be(0);
buffer.put_u8(Marker::ObjectEnd as u8);
assert!(Decoder::<Object>::decode(&mut buffer).is_err());
// This is a missing sequence of the "sparkle heart(💖)".
let mut bytes = vec![0, 159, 146, 150];
let mut buffer = ByteBuffer::default();
buffer.put_u8(Marker::Object as u8);
buffer.put_u16_be(4);
buffer.put_bytes(&bytes);
buffer.put_u8(Marker::Number as u8);
buffer.put_f64(0.0);
buffer.put_u16_be(0);
buffer.put_u8(Marker::ObjectEnd as u8);
assert!(Decoder::<Object>::decode(&mut buffer).is_err());
let mut buffer = ByteBuffer::default();
assert!(Decoder::<Object>::decode(&mut buffer).is_err())
Source§impl Decoder<OnFcPublish> for ByteBuffer
impl Decoder<OnFcPublish> for ByteBuffer
Source§fn decode(&mut self) -> IOResult<OnFcPublish>
fn decode(&mut self) -> IOResult<OnFcPublish>
Decodes bytes into an OnFcPublish command.
Source§impl Decoder<OnStatus> for ByteBuffer
impl Decoder<OnStatus> for ByteBuffer
Source§fn decode(&mut self) -> IOResult<OnStatus>
fn decode(&mut self) -> IOResult<OnStatus>
Decodes bytes into an OnStatus command.
§Errors
When some field misses.
When some value is inconsistent with its marker.
§Examples
use sheave_core::{
ByteBuffer,
Decoder,
Encoder,
messages::{
OnStatus,
amf::v0::{
Object,
Null
}
}
};
let mut buffer = ByteBuffer::default();
buffer.encode(&Null);
buffer.encode(&Object::default());
assert!(Decoder::<OnStatus>::decode(&mut buffer).is_ok());
let mut buffer = ByteBuffer::default();
assert!(Decoder::<OnStatus>::decode(&mut buffer).is_err())
Source§impl Decoder<PeerBandwidth> for ByteBuffer
impl Decoder<PeerBandwidth> for ByteBuffer
Source§fn decode(&mut self) -> IOResult<PeerBandwidth>
fn decode(&mut self) -> IOResult<PeerBandwidth>
Decodes bytes into a PeerBandwidth message.
§Errors
When this buffer didn’t remain at least 5 bytes.
§Examples
use sheave_core::{
ByteBuffer,
Decoder,
messages::PeerBandwidth
};
let mut buffer = ByteBuffer::default();
buffer.put_u32_be(u32::default());
buffer.put_u8(u8::default());
assert!(Decoder::<PeerBandwidth>::decode(&mut buffer).is_ok())
Source§impl Decoder<Publish> for ByteBuffer
impl Decoder<Publish> for ByteBuffer
Source§fn decode(&mut self) -> IOResult<Publish>
fn decode(&mut self) -> IOResult<Publish>
Decodes bytes into a Publish command.
§Errors
When some field misses.
When some value is inconsistent with its marker.
When some value is invalid for UTF-8 string.
When the publishing type is neither "live"
, "record"
nor "append"
.
§Examples
use sheave_core::{
ByteBuffer,
Decoder,
Encoder,
messages::{
Publish,
amf::v0::{
AmfString,
Null
}
}
};
let mut buffer = ByteBuffer::default();
buffer.encode(&Null);
buffer.encode(&AmfString::default());
buffer.encode(&AmfString::from("live"));
assert!(Decoder::<Publish>::decode(&mut buffer).is_ok());
let mut buffer = ByteBuffer::default();
buffer.encode(&Null);
buffer.encode(&AmfString::default());
buffer.encode(&AmfString::from("record"));
assert!(Decoder::<Publish>::decode(&mut buffer).is_ok());
let mut buffer = ByteBuffer::default();
buffer.encode(&Null);
buffer.encode(&AmfString::default());
buffer.encode(&AmfString::from("append"));
assert!(Decoder::<Publish>::decode(&mut buffer).is_ok());
let mut buffer = ByteBuffer::default();
buffer.encode(&Null);
buffer.encode(&AmfString::default());
buffer.encode(&AmfString::from("something else"));
assert!(Decoder::<Publish>::decode(&mut buffer).is_err())
Source§impl Decoder<ReleaseStream> for ByteBuffer
impl Decoder<ReleaseStream> for ByteBuffer
Source§fn decode(&mut self) -> IOResult<ReleaseStream>
fn decode(&mut self) -> IOResult<ReleaseStream>
Decodes bytes into a ReleaseStream command.
§Errors
When some field misses.
When some value is inconsistent with its marker.
When some value is invalid for UTF-8 string.
§Examples
use sheave_core::{
ByteBuffer,
Decoder,
Encoder,
messages::{
ReleaseStream,
amf::v0::{
AmfString,
Null
}
}
};
let mut buffer = ByteBuffer::default();
buffer.encode(&Null);
buffer.encode(&AmfString::default());
assert!(Decoder::<ReleaseStream>::decode(&mut buffer).is_ok());
let mut buffer = ByteBuffer::default();
assert!(Decoder::<ReleaseStream>::decode(&mut buffer).is_err())
Source§impl Decoder<ReleaseStreamResult> for ByteBuffer
impl Decoder<ReleaseStreamResult> for ByteBuffer
Source§fn decode(&mut self) -> IOResult<ReleaseStreamResult>
fn decode(&mut self) -> IOResult<ReleaseStreamResult>
Decodes bytes into a ReleaseStreamResult command.
§Errors
When some field misses.
When some value is inconsistent with its marker.
§Examples
use sheave_core::{
ByteBuffer,
Decoder,
Encoder,
messages::{
ReleaseStreamResult,
amf::v0::Null,
}
};
let mut buffer = ByteBuffer::default();
buffer.encode(&Null);
assert!(Decoder::<ReleaseStreamResult>::decode(&mut buffer).is_ok());
let mut buffer = ByteBuffer::default();
assert!(Decoder::<ReleaseStreamResult>::decode(&mut buffer).is_err())
Source§impl Decoder<ScriptDataTag> for ByteBuffer
impl Decoder<ScriptDataTag> for ByteBuffer
Source§fn decode(&mut self) -> IOResult<ScriptDataTag>
fn decode(&mut self) -> IOResult<ScriptDataTag>
Decodes bytes into a ScriptDataTag.
§Errors
When some field misses.
When some value is inconsistent with its marker.
When some value is invalid for UTF-8 string.
§Examples
use sheave_core::{
ByteBuffer,
Decoder,
Encoder,
flv::tags::ScriptDataTag,
messages::amf::v0::{
AmfString,
EcmaArray
}
};
let mut buffer = ByteBuffer::default();
buffer.encode(&AmfString::from("onMetaData"));
buffer.encode(&EcmaArray::default());
assert!(Decoder::<ScriptDataTag>::decode(&mut buffer).is_ok());
let mut buffer = ByteBuffer::default();
assert!(Decoder::<ScriptDataTag>::decode(&mut buffer).is_err())
Source§impl Decoder<SetDataFrame> for ByteBuffer
impl Decoder<SetDataFrame> for ByteBuffer
Source§fn decode(&mut self) -> IOResult<SetDataFrame>
fn decode(&mut self) -> IOResult<SetDataFrame>
Decodes bytes into a SetDataFrame message.
§Errors
When some field misses.
When some value is inconsistent with its marker.
When some value is invalid for UTF-8 string.
When the command name isn’t "@setDataFrame"
.
§Examples
use rand::{
Fill,
thread_rng
};
use sheave_core::{
ByteBuffer,
Decoder,
Encoder,
messages::SetDataFrame
};
let mut buffer = ByteBuffer::default();
let mut bytes: [u8; 128] = [0; 128];
bytes.try_fill(&mut thread_rng()).unwrap();
buffer.put_bytes(&bytes);
assert!(Decoder::<SetDataFrame>::decode(&mut buffer).is_ok());
Source§impl Decoder<StreamBegin> for ByteBuffer
impl Decoder<StreamBegin> for ByteBuffer
Source§fn decode(&mut self) -> IOResult<StreamBegin>
fn decode(&mut self) -> IOResult<StreamBegin>
Decodes bytes into a StreamBegin event.
§Errors
When some field misses.
§Examples
use sheave_core::{
ByteBuffer,
Decoder,
Encoder,
messages::{
EventType,
StreamBegin
}
};
let mut buffer = ByteBuffer::default();
buffer.put_u32_be(u32::default());
assert!(Decoder::<StreamBegin>::decode(&mut buffer).is_ok());
let mut buffer = ByteBuffer::default();
assert!(Decoder::<StreamBegin>::decode(&mut buffer).is_err())
Source§impl Decoder<VideoTag> for ByteBuffer
impl Decoder<VideoTag> for ByteBuffer
Source§fn decode(&mut self) -> IOResult<VideoTag>
fn decode(&mut self) -> IOResult<VideoTag>
Decodes bytes into a VideoTag.
§Errors
When some field misses.
§Examples
use rand::{
Fill,
thread_rng
};
use sheave_core::{
ByteBuffer,
Decoder,
Encoder,
flv::tags::{
VideoTag,
VideoTagHeader,
FrameType,
Codec,
AvcPacketType
}
};
let mut buffer = ByteBuffer::default();
buffer.encode(&VideoTagHeader::new(FrameType::Disposable, Codec::H263, None, None));
let mut bytes: [u8; 127] = [0; 127];
bytes.try_fill(&mut thread_rng()).unwrap();
buffer.put_bytes(&bytes);
assert!(Decoder::<VideoTag>::decode(&mut buffer).is_ok());
let mut buffer = ByteBuffer::default();
assert!(Decoder::<VideoTag>::decode(&mut buffer).is_err())
Source§impl Decoder<VideoTagHeader> for ByteBuffer
impl Decoder<VideoTagHeader> for ByteBuffer
Source§fn decode(&mut self) -> IOResult<VideoTagHeader>
fn decode(&mut self) -> IOResult<VideoTagHeader>
Decodes bytes into a VideoTagHeader.
§Errors
When some field misses.
§Examples
use sheave_core::{
ByteBuffer,
Decoder,
flv::tags::VideoTagHeader
};
let mut buffer = ByteBuffer::default();
buffer.put_u8(0x32);
assert!(Decoder::<VideoTagHeader>::decode(&mut buffer).is_ok());
let mut buffer = ByteBuffer::default();
assert!(Decoder::<VideoTagHeader>::decode(&mut buffer).is_err())
Source§impl Decoder<WindowAcknowledgementSize> for ByteBuffer
impl Decoder<WindowAcknowledgementSize> for ByteBuffer
Source§fn decode(&mut self) -> IOResult<WindowAcknowledgementSize>
fn decode(&mut self) -> IOResult<WindowAcknowledgementSize>
Decodes bytes into an WindowAcknowledgementSize message.
§Errors
When this buffer didn’t remain at least 4 bytes.
§Examples
use sheave_core::{
ByteBuffer,
Decoder,
messages::WindowAcknowledgementSize
};
let mut buffer = ByteBuffer::default();
buffer.put_u32_be(u32::default());
assert!(Decoder::<WindowAcknowledgementSize>::decode(&mut buffer).is_ok())
Source§impl Default for ByteBuffer
impl Default for ByteBuffer
Source§fn default() -> ByteBuffer
fn default() -> ByteBuffer
Source§impl Encoder<Acknowledgement> for ByteBuffer
impl Encoder<Acknowledgement> for ByteBuffer
Source§fn encode(&mut self, acknowledgement: &Acknowledgement)
fn encode(&mut self, acknowledgement: &Acknowledgement)
Encodes a Acknowledgement message into bytes.
Source§impl Encoder<AmfString> for ByteBuffer
impl Encoder<AmfString> for ByteBuffer
Source§fn encode(&mut self, string: &AmfString)
fn encode(&mut self, string: &AmfString)
Encodes an AMF String into bytes.
§Panics
Its length must be the range of 16 bits. If it exceeds, a panic is occured.
§Examples
use std::panic::catch_unwind;
use sheave_core::{
ByteBuffer,
Encoder,
messages::amf::v0::{
Marker,
AmfString
}
};
let s = "hello world!";
let mut buffer = ByteBuffer::default();
buffer.encode(&AmfString::from(s));
let bytes: Vec<u8> = buffer.into();
assert_eq!(Marker::AmfString as u8, bytes[0]);
assert_eq!((s.len() as u16).to_be_bytes().as_slice(), &bytes[1..3]);
assert_eq!(s.as_bytes(), &bytes[3..]);
let result = catch_unwind(
|| {
let mut buffer = ByteBuffer::default();
buffer.encode(&AmfString::new("a".repeat(1 + u16::MAX as usize)))
}
);
assert!(result.is_err())
Source§impl Encoder<AudioTag> for ByteBuffer
impl Encoder<AudioTag> for ByteBuffer
Source§impl Encoder<AudioTagHeader> for ByteBuffer
impl Encoder<AudioTagHeader> for ByteBuffer
Source§fn encode(&mut self, audio_tag_header: &AudioTagHeader)
fn encode(&mut self, audio_tag_header: &AudioTagHeader)
Encodes a AudioTagHeader into bytes.
Source§impl Encoder<Boolean> for ByteBuffer
impl Encoder<Boolean> for ByteBuffer
Source§impl Encoder<ChunkSize> for ByteBuffer
impl Encoder<ChunkSize> for ByteBuffer
Source§impl Encoder<Connect> for ByteBuffer
impl Encoder<Connect> for ByteBuffer
Source§impl Encoder<ConnectResult> for ByteBuffer
impl Encoder<ConnectResult> for ByteBuffer
Source§fn encode(&mut self, connect_result: &ConnectResult)
fn encode(&mut self, connect_result: &ConnectResult)
Encodes a ConnectResult command into bytes.
Source§impl Encoder<CreateStream> for ByteBuffer
impl Encoder<CreateStream> for ByteBuffer
Source§fn encode(&mut self, _: &CreateStream)
fn encode(&mut self, _: &CreateStream)
Encodes a CreateSteam command into bytes.
Source§impl Encoder<CreateStreamResult> for ByteBuffer
impl Encoder<CreateStreamResult> for ByteBuffer
Source§fn encode(&mut self, create_stream_result: &CreateStreamResult)
fn encode(&mut self, create_stream_result: &CreateStreamResult)
Encodes a CreateStreamResult command into bytes.
Source§impl Encoder<DeleteStream> for ByteBuffer
impl Encoder<DeleteStream> for ByteBuffer
Source§fn encode(&mut self, delete_stream: &DeleteStream)
fn encode(&mut self, delete_stream: &DeleteStream)
Encodes a DeleteStream command into bytes.
Source§impl Encoder<EcmaArray> for ByteBuffer
impl Encoder<EcmaArray> for ByteBuffer
Source§impl Encoder<FcPublish> for ByteBuffer
impl Encoder<FcPublish> for ByteBuffer
Source§impl Encoder<FcUnpublish> for ByteBuffer
impl Encoder<FcUnpublish> for ByteBuffer
Source§fn encode(&mut self, fc_unpublish: &FcUnpublish)
fn encode(&mut self, fc_unpublish: &FcUnpublish)
Encodes a FcUnpublish command into bytes.
Source§impl Encoder<Null> for ByteBuffer
impl Encoder<Null> for ByteBuffer
Source§impl Encoder<Number> for ByteBuffer
impl Encoder<Number> for ByteBuffer
Source§impl Encoder<Object> for ByteBuffer
impl Encoder<Object> for ByteBuffer
Source§impl Encoder<OnFcPublish> for ByteBuffer
impl Encoder<OnFcPublish> for ByteBuffer
Source§fn encode(&mut self, _: &OnFcPublish)
fn encode(&mut self, _: &OnFcPublish)
Encodes an OnFcPublish command into bytes. However this encodes nothing because has no field.
Source§impl Encoder<OnStatus> for ByteBuffer
impl Encoder<OnStatus> for ByteBuffer
Source§impl Encoder<PeerBandwidth> for ByteBuffer
impl Encoder<PeerBandwidth> for ByteBuffer
Source§fn encode(&mut self, peer_bandwidth: &PeerBandwidth)
fn encode(&mut self, peer_bandwidth: &PeerBandwidth)
Encodes a PeerBandwidth message into bytes.
Source§impl Encoder<Publish> for ByteBuffer
impl Encoder<Publish> for ByteBuffer
Source§impl Encoder<ReleaseStream> for ByteBuffer
impl Encoder<ReleaseStream> for ByteBuffer
Source§fn encode(&mut self, release_stream: &ReleaseStream)
fn encode(&mut self, release_stream: &ReleaseStream)
Encodes a ReleaseStream command into bytes.
Source§impl Encoder<ReleaseStreamResult> for ByteBuffer
impl Encoder<ReleaseStreamResult> for ByteBuffer
Source§fn encode(&mut self, _: &ReleaseStreamResult)
fn encode(&mut self, _: &ReleaseStreamResult)
Encodes a ReleaseStreamResult command into bytes.
Source§impl Encoder<ScriptDataTag> for ByteBuffer
impl Encoder<ScriptDataTag> for ByteBuffer
Source§fn encode(&mut self, script_data: &ScriptDataTag)
fn encode(&mut self, script_data: &ScriptDataTag)
Encodes a ScriptDataTag into bytes.
Source§impl Encoder<SetDataFrame> for ByteBuffer
impl Encoder<SetDataFrame> for ByteBuffer
Source§fn encode(&mut self, set_data_frame: &SetDataFrame)
fn encode(&mut self, set_data_frame: &SetDataFrame)
Encodes a SetDataFrame message into bytes.
Source§impl Encoder<StreamBegin> for ByteBuffer
impl Encoder<StreamBegin> for ByteBuffer
Source§fn encode(&mut self, stream_begin: &StreamBegin)
fn encode(&mut self, stream_begin: &StreamBegin)
Encodes a StreamBegin event into bytes.
Source§impl Encoder<VideoTag> for ByteBuffer
impl Encoder<VideoTag> for ByteBuffer
Source§impl Encoder<VideoTagHeader> for ByteBuffer
impl Encoder<VideoTagHeader> for ByteBuffer
Source§fn encode(&mut self, video_tag_header: &VideoTagHeader)
fn encode(&mut self, video_tag_header: &VideoTagHeader)
Encodes a VideoTagHeader into bytes.
Source§impl Encoder<WindowAcknowledgementSize> for ByteBuffer
impl Encoder<WindowAcknowledgementSize> for ByteBuffer
Source§fn encode(&mut self, window_acknowledgement_size: &WindowAcknowledgementSize)
fn encode(&mut self, window_acknowledgement_size: &WindowAcknowledgementSize)
Encodes an WindowAcknowledgementSize message into bytes.
Source§impl From<ByteBuffer> for Vec<u8>
impl From<ByteBuffer> for Vec<u8>
Source§fn from(buffer: ByteBuffer) -> Self
fn from(buffer: ByteBuffer) -> Self
Converts remained bytes into Vec.
§Examples
use rand::{
Fill,
thread_rng
};
use sheave_core::ByteBuffer;
// When all byte is remained.
let mut array: [u8; 128] = [0; 128];
array.try_fill(&mut thread_rng()).unwrap();
let mut buffer = ByteBuffer::default();
buffer.put_bytes(&array);
let bytes: Vec<u8> = buffer.into();
assert_eq!(array.as_slice(), &bytes);
// When some bytes are consumed.
let mut array: [u8; 128] = [0; 128];
array.try_fill(&mut thread_rng()).unwrap();
let mut buffer = ByteBuffer::default();
buffer.put_bytes(&array);
buffer.get_u8().unwrap();
let bytes: Vec<u8> = buffer.into();
assert_eq!(&array[1..], &bytes)