Skip to content

Commit a05e572

Browse files
TroyKomodophilipch07
authored andcommitted
fix object impl
1 parent 3bcbdd2 commit a05e572

File tree

8 files changed

+299
-282
lines changed

8 files changed

+299
-282
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/amf0/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ bytestring = "1.4.0"
1919
document-features = { optional = true, version = "0.2" }
2020
num-derive = "0.4"
2121
num-traits = "0.2"
22+
indexmap = { version = "2.4.0", optional = true }
2223
scuffle-bytes-util = { path = "../bytes-util", version = ">=0.1.4" }
2324
scuffle-changelog = { optional = true, path = "../changelog", version = "0.1.0" }
2425
scuffle-workspace-hack.workspace = true
@@ -33,6 +34,8 @@ serde_derive = "1"
3334
serde = ["dep:serde", "scuffle-bytes-util/serde"]
3435
## Enables changelog and documentation of feature flags
3536
docs = ["dep:scuffle-changelog", "dep:document-features"]
37+
## Use an index map instead of a btree-map for Amf0Objects
38+
preserve_order = ["dep:indexmap"]
3639

3740
[package.metadata.docs.rs]
3841
all-features = true

crates/amf0/src/decoder.rs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use num_traits::FromPrimitive;
77
use scuffle_bytes_util::StringCow;
88
use scuffle_bytes_util::zero_copy::ZeroCopyReader;
99

10-
use crate::{Amf0Array, Amf0Error, Amf0Marker, Amf0Object, Amf0Value};
10+
use crate::{Amf0Error, Amf0Marker, Amf0Object, Amf0Value};
1111

1212
/// AMF0 decoder.
1313
///
@@ -294,7 +294,7 @@ where
294294
}
295295

296296
/// Decode a strict array from the buffer.
297-
pub fn decode_strict_array(&mut self) -> Result<Amf0Array<'a>, Amf0Error> {
297+
pub fn decode_strict_array(&mut self) -> Result<Vec<Amf0Value<'a>>, Amf0Error> {
298298
let size = self.decode_strict_array_header()? as usize;
299299

300300
let mut array = Vec::with_capacity(size);
@@ -304,7 +304,7 @@ where
304304
array.push(value);
305305
}
306306

307-
Ok(Amf0Array::from(array))
307+
Ok(array)
308308
}
309309
}
310310

@@ -334,6 +334,8 @@ impl<'de, R> std::iter::FusedIterator for Amf0DecoderStream<'_, 'de, R> where R:
334334
#[cfg(test)]
335335
#[cfg_attr(all(test, coverage_nightly), coverage(off))]
336336
mod tests {
337+
use scuffle_bytes_util::StringCow;
338+
337339
use super::Amf0Decoder;
338340
use crate::{Amf0Marker, Amf0Value};
339341

@@ -373,8 +375,11 @@ mod tests {
373375
let mut decoder = Amf0Decoder::from_slice(&bytes);
374376
let object = decoder.decode_object().unwrap();
375377
assert_eq!(object.len(), 2);
376-
assert_eq!(*object.get(&"abc".into()).unwrap(), Amf0Value::String("val".into()));
377-
assert_eq!(*object.get(&"defg".into()).unwrap(), Amf0Value::Boolean(true));
378+
assert_eq!(
379+
*object.get(&StringCow::from_static("abc")).unwrap(),
380+
Amf0Value::String("val".into())
381+
);
382+
assert_eq!(*object.get("defg").unwrap(), Amf0Value::Boolean(true));
378383
}
379384

380385
#[test]

crates/amf0/src/encoder.rs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
//! AMF0 encoder
22
3+
use std::borrow::Borrow;
34
use std::io;
45

56
use byteorder::{BigEndian, WriteBytesExt};
67

7-
use crate::{Amf0Array, Amf0Error, Amf0Marker, Amf0Object};
8+
use crate::{Amf0Error, Amf0Marker, Amf0Object, Amf0Value};
89

910
/// AMF0 encoder.
1011
///
@@ -83,11 +84,17 @@ where
8384
}
8485

8586
/// Encode an [`Amf0Array`] as an AMF0 StrictArray value.
86-
pub fn encode_array(&mut self, values: &Amf0Array) -> Result<(), Amf0Error> {
87-
self.encode_array_header(values.len().try_into()?)?;
87+
pub fn encode_array<'a, I, B>(&mut self, values: I) -> Result<(), Amf0Error>
88+
where
89+
B: Borrow<Amf0Value<'a>>,
90+
I: IntoIterator<Item = B>,
91+
I::IntoIter: ExactSizeIterator,
92+
{
93+
let iter = values.into_iter();
94+
self.encode_array_header(iter.len().try_into()?)?;
8895

89-
for value in values.iter() {
90-
value.encode(self)?;
96+
for value in iter {
97+
value.borrow().encode(self)?;
9198
}
9299

93100
Ok(())

crates/amf0/src/lib.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,21 +51,20 @@ pub mod de;
5151
pub mod decoder;
5252
pub mod encoder;
5353
pub mod error;
54+
pub mod object;
5455
#[cfg(feature = "serde")]
5556
pub mod ser;
5657
pub mod value;
57-
pub mod map;
5858

5959
#[cfg(feature = "serde")]
6060
pub use de::{from_buf, from_reader, from_slice};
6161
pub use decoder::Amf0Decoder;
6262
pub use encoder::Amf0Encoder;
6363
pub use error::{Amf0Error, Result};
64+
pub use object::Amf0Object;
6465
#[cfg(feature = "serde")]
6566
pub use ser::{to_bytes, to_writer};
66-
pub use value::{Amf0Array, Amf0Object, Amf0Value};
67-
68-
extern crate alloc;
67+
pub use value::Amf0Value;
6968

7069
/// AMF0 marker types.
7170
///

0 commit comments

Comments
 (0)