pub struct EcmaArray(/* private fields */);
Expand description
The sized object type of AMF. This consists of:
- Count
The unsigned 32 bits integer.
This consists of pairs of string keys and any AMF data types.
- Key
The string which doesn’t have its marker.
This type is named as UnmarkedString
in this crate.
Also this occurs the panic if its length exceeds the range of 16 bits.
- Value
The pointer for AMF data types, which is wrapped into Arc
.
This is because of avoiding to be deallocated its value unexpectedly.
This is expected its size is same as the above count.
You can access to properties which this contains, as the HashMap
.
§Examples
use sheave_core::{
ecma_array,
messages::amf::v0::{
EcmaArray,
Number
},
};
let ecma_array = ecma_array!(
"videocodecid" => Number::from(0)
);
ecma_array.get_properties().get("videocodecid");
&ecma_array.get_properties()["videocodecid"];
Implementations§
Source§impl EcmaArray
impl EcmaArray
Sourcepub fn get_properties(&self) -> &Properties
pub fn get_properties(&self) -> &Properties
Gets immutable properties from this array.
Sourcepub fn get_properties_mut(&mut self) -> &mut Properties
pub fn get_properties_mut(&mut self) -> &mut Properties
Gets mutable properties from this array.
Trait Implementations§
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.