implement arrays

This commit is contained in:
Jean-Marie Mineau 2023-08-25 11:11:13 +02:00
parent 6020b173a0
commit 1b503549b3
Signed by: histausse
GPG key ID: B66AEEDA9B645AD2

View file

@ -1,18 +1,43 @@
use crate::{EncodedValue, Uleb128};
use crate::{ReadSeek, Result, Serializable};
use std::io::Write;
/// Encoded Array: https://source.android.com/docs/core/runtime/dex-format#encoded-array
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct EncodedArray;
pub struct EncodedArray {
// pub size: Uleb128,
pub values: Vec<EncodedValue>,
}
impl EncodedArray {
/// Return the size field
pub fn size(&self) -> Uleb128 {
Uleb128(self.values.len() as u32)
}
}
impl Serializable for EncodedArray {
fn serialize(&self, _output: &mut dyn Write) -> Result<()> {
todo!()
fn serialize(&self, output: &mut dyn Write) -> Result<()> {
self.size().serialize(output)?;
for value in self.values {
value.serialize(output)?;
}
Ok(())
}
fn deserialize(_input: &mut dyn ReadSeek) -> Result<Self> {
todo!()
fn deserialize(input: &mut dyn ReadSeek) -> Result<Self> {
let Uleb128(size) = Uleb128::deserialize(input)?;
let mut values = vec![];
for _ in 0..size {
values.push(EncodedValue::deserialize(input)?);
}
Ok(Self {
// size: Uleb128(size),
values,
})
}
fn size(&self) -> usize {
todo!()
self.size().size() + self.values.iter().map(|val| val.size()).sum::<usize>()
}
}