Skip to content

Commit

Permalink
Remove byteorder
Browse files Browse the repository at this point in the history
  • Loading branch information
Dinnerbone committed Jul 5, 2024
1 parent 99b16db commit 7959516
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 23 deletions.
1 change: 0 additions & 1 deletion flash-lso/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ nom = "7.1.3"
enumset = "1.1.3"
thiserror = "1.0.61"
serde = { version = "1.0.203", optional = true, features = ["derive", "rc"] }
byteorder = "1.5.0"

[dev-dependencies]
pretty_assertions = "1.4.0"
Expand Down
24 changes: 12 additions & 12 deletions flash-lso/src/amf0/write.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use std::io::Write;

use crate::amf0::type_marker::TypeMarker;
use crate::nom_utils::write_string;
use byteorder::{BigEndian, WriteBytesExt};
use crate::write::WriteExt;
use std::io::Result;
use std::ops::Deref;
use std::rc::Rc;
Expand All @@ -19,13 +19,13 @@ fn write_type_marker<'a, 'b: 'a, W: Write + 'a>(writer: &mut W, type_: TypeMarke

fn write_reference_element<'a, 'b: 'a, W: Write + 'a>(writer: &mut W, r: &Reference) -> Result<()> {
write_type_marker(writer, TypeMarker::Reference)?;
writer.write_u16::<BigEndian>(r.0)?;
writer.write_u16(r.0)?;
Ok(())
}

fn write_number_element<'a, 'b: 'a, W: Write + 'a>(writer: &mut W, s: f64) -> Result<()> {
write_type_marker(writer, TypeMarker::Number)?;
writer.write_f64::<BigEndian>(s)?;
writer.write_f64(s)?;
Ok(())
}

Expand All @@ -36,7 +36,7 @@ fn write_bool_element<'a, 'b: 'a, W: Write + 'a>(writer: &mut W, s: bool) -> Res
}

fn write_long_string_content<'a, 'b: 'a, W: Write + 'a>(writer: &mut W, s: &'b str) -> Result<()> {
writer.write_u32::<BigEndian>(s.len() as u32)?;
writer.write_u32(s.len() as u32)?;
writer.write_all(s.as_bytes())?;
Ok(())
}
Expand All @@ -58,7 +58,7 @@ fn write_object_element<'a, 'b: 'a, W: Write + 'a>(writer: &mut W, o: &'b [Eleme
for element in o {
write_element(writer, element)?;
}
writer.write_u16::<BigEndian>(0)?;
writer.write_u16(0)?;
write_type_marker(writer, TypeMarker::ObjectEnd)?;
Ok(())
}
Expand All @@ -76,7 +76,7 @@ fn write_strict_array_element<'a, 'b: 'a, W: Write + 'a>(
elements: &'b [Rc<Value>],
) -> Result<()> {
write_type_marker(writer, TypeMarker::Array)?;
writer.write_u32::<BigEndian>(elements.len() as u32)?;
writer.write_u32(elements.len() as u32)?;
for element in elements {
write_value(writer, element)?;
}
Expand All @@ -89,8 +89,8 @@ fn write_date_element<'a, 'b: 'a, W: Write + 'a>(
tz: Option<u16>,
) -> Result<()> {
write_type_marker(writer, TypeMarker::Date)?;
writer.write_f64::<BigEndian>(date)?;
writer.write_u16::<BigEndian>(tz.unwrap_or(0))?;
writer.write_f64(date)?;
writer.write_u16(tz.unwrap_or(0))?;
Ok(())
}

Expand All @@ -114,7 +114,7 @@ fn write_typed_object_element<'a, 'b: 'a, W: Write + 'a>(
for element in elements {
write_element(writer, element)?;
}
writer.write_u16::<BigEndian>(0)?;
writer.write_u16(0)?;
write_type_marker(writer, TypeMarker::ObjectEnd)?;
Ok(())
}
Expand All @@ -126,7 +126,7 @@ fn write_dense_element<'a, 'b: 'a, W: Write + 'a>(
) -> Result<()> {
let index_str = index.to_string();

writer.write_u16::<BigEndian>(index_str.len() as u16)?;
writer.write_u16(index_str.len() as u16)?;
writer.write_all(index_str.as_bytes())?;
write_value(writer, element)?;

Expand All @@ -143,14 +143,14 @@ fn write_mixed_array<'a, 'b: 'a, W: Write + 'a>(
//TODO: sometimes array length is ignored (u32) sometimes its: elements.len() as u32

write_type_marker(writer, TypeMarker::MixedArrayStart)?;
writer.write_u32::<BigEndian>(length)?;
writer.write_u32(length)?;
for (idx, value) in dense.iter().enumerate() {
write_dense_element(writer, idx, value)?
}
for element in elements {
write_element(writer, element)?
}
writer.write_u16::<BigEndian>(0)?;
writer.write_u16(0)?;
write_type_marker(writer, TypeMarker::ObjectEnd)?;
Ok(())
}
Expand Down
12 changes: 6 additions & 6 deletions flash-lso/src/amf3/write.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ use crate::amf3::element_cache::ElementCache;
use crate::amf3::length::Length;
use crate::amf3::type_marker::TypeMarker;
use crate::types::{Attribute, ClassDefinition, Element, Value};
use crate::write::WriteExt;
use crate::PADDING;
use byteorder::{BigEndian, WriteBytesExt};
use std::cell::RefCell;
use std::collections::HashMap;
use std::io::Result;
Expand Down Expand Up @@ -106,7 +106,7 @@ impl AMF3Encoder {
i: f64,
) -> Result<()> {
self.write_type_marker(writer, TypeMarker::Number)?;
writer.write_f64::<BigEndian>(i)?;
writer.write_f64(i)?;
Ok(())
}

Expand Down Expand Up @@ -158,7 +158,7 @@ impl AMF3Encoder {
Length::Size(items.len() as u32).write(writer, self)?;
writer.write_u8(fixed_length as u8)?;
for item in items {
writer.write_i32::<BigEndian>(*item)?;
writer.write_i32(*item)?;
}
}
Ok(())
Expand All @@ -182,7 +182,7 @@ impl AMF3Encoder {
Length::Size(items.len() as u32).write(writer, self)?;
writer.write_u8(fixed_length as u8)?;
for item in items {
writer.write_u32::<BigEndian>(*item)?;
writer.write_u32(*item)?;
}
}
Ok(())
Expand All @@ -206,7 +206,7 @@ impl AMF3Encoder {
Length::Size(items.len() as u32).write(writer, self)?;
writer.write_u8(fixed_length as u8)?;
for item in items {
writer.write_f64::<BigEndian>(*item)?;
writer.write_f64(*item)?;
}
}
Ok(())
Expand All @@ -224,7 +224,7 @@ impl AMF3Encoder {
self.write_type_marker(writer, TypeMarker::Date)?;
len.write(writer, self)?;
if len.is_size() {
writer.write_f64::<BigEndian>(time)?;
writer.write_f64(time)?;
}
Ok(())
}
Expand Down
4 changes: 2 additions & 2 deletions flash-lso/src/nom_utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use crate::errors::Error;
use nom::bytes::complete::take;
use nom::combinator::map_res;

use byteorder::{BigEndian, WriteBytesExt};
use crate::write::WriteExt;
use nom::IResult;
use std::io::Write;

Expand All @@ -12,7 +12,7 @@ pub(crate) fn write_string<'a, 'b: 'a, W: Write + 'a>(
writer: &mut W,
s: &'b str,
) -> std::io::Result<()> {
writer.write_u16::<BigEndian>(s.len() as u16)?;
writer.write_u16(s.len() as u16)?;
writer.write_all(s.as_bytes())?;
Ok(())
}
Expand Down
36 changes: 34 additions & 2 deletions flash-lso/src/write.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
//! Handles writing of LSO files
use byteorder::{BigEndian, WriteBytesExt};
use std::io::Write;

#[cfg(feature = "amf3")]
Expand Down Expand Up @@ -47,7 +46,7 @@ fn write_header<'a, 'b: 'a, W: Write + 'a>(
header: &'b Header,
) -> std::io::Result<()> {
writer.write_all(&HEADER_VERSION)?;
writer.write_u32::<BigEndian>(header.length)?;
writer.write_u32(header.length)?;
writer.write_all(&HEADER_SIGNATURE)?;
write_string(writer, &header.name)?;
writer.write_all(&PADDING)?;
Expand Down Expand Up @@ -76,3 +75,36 @@ pub fn write_to_bytes<'a>(lso: &mut Lso) -> Result<Vec<u8>, Error<'a>> {
.map_err(|e| Error::IoError(e.to_string(), e.kind()))?;
Ok(v)
}

pub(crate) trait WriteExt {
fn write_u8(&mut self, value: u8) -> std::io::Result<()>;
fn write_u16(&mut self, value: u16) -> std::io::Result<()>;
fn write_u32(&mut self, value: u32) -> std::io::Result<()>;
fn write_i32(&mut self, value: i32) -> std::io::Result<()>;
fn write_f64(&mut self, value: f64) -> std::io::Result<()>;
}

impl<T> WriteExt for T
where
T: Write,
{
fn write_u8(&mut self, value: u8) -> std::io::Result<()> {
self.write_all(&[value])
}

fn write_u16(&mut self, value: u16) -> std::io::Result<()> {
self.write_all(&value.to_be_bytes())
}

fn write_u32(&mut self, value: u32) -> std::io::Result<()> {
self.write_all(&value.to_be_bytes())
}

fn write_i32(&mut self, value: i32) -> std::io::Result<()> {
self.write_all(&value.to_be_bytes())
}

fn write_f64(&mut self, value: f64) -> std::io::Result<()> {
self.write_all(&value.to_be_bytes())
}
}

0 comments on commit 7959516

Please sign in to comment.