mirror of
https://github.com/mbilker/kbinxml-rs.git
synced 2026-09-09 02:55:30 -05:00
de: cleanup and use Result instead of expect
This commit is contained in:
@@ -45,8 +45,8 @@ impl<'de> Deserializer<'de> {
|
||||
|
||||
Ok(Self {
|
||||
read_mode: ReadMode::Single,
|
||||
first_struct: true,
|
||||
node_stack: Vec::new(),
|
||||
first_struct: true,
|
||||
reader,
|
||||
})
|
||||
}
|
||||
@@ -217,12 +217,12 @@ impl<'de, 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> {
|
||||
{
|
||||
trace!("Deserializer::deserialize_seq()");
|
||||
|
||||
let node_type = *self.node_stack.last().ok_or(KbinErrorKind::InvalidState)?;
|
||||
let (node_type, _) = self.reader.last_node_type().ok_or(KbinErrorKind::InvalidState)?;
|
||||
|
||||
// If the last node type on the stack is a `NodeStart` then we are likely
|
||||
// collecting a list of structs
|
||||
let value = if node_type == StandardType::NodeStart {
|
||||
visitor.visit_seq(Seq::new(self, None))?
|
||||
visitor.visit_seq(Seq::new(self, None)?)?
|
||||
} else {
|
||||
// TODO: add size check against len
|
||||
let size = self.reader.read_u32().context(KbinErrorKind::ArrayLengthRead)?;
|
||||
@@ -231,7 +231,7 @@ impl<'de, 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> {
|
||||
// Changes to `self.read_mode` must stay here as `next_element_seed` is not
|
||||
// called past the length of the array to reset the read mode
|
||||
self.read_mode = ReadMode::Array;
|
||||
let value = visitor.visit_seq(Seq::new(self, Some(size as usize)))?;
|
||||
let value = visitor.visit_seq(Seq::new(self, Some(size as usize))?)?;
|
||||
self.read_mode = ReadMode::Single;
|
||||
self.reader.data_buf.realign_reads(None)?;
|
||||
|
||||
@@ -255,7 +255,7 @@ impl<'de, 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> {
|
||||
trace!("Deserializer::deserialize_tuple_struct(name: {:?}, len: {})", name, len);
|
||||
|
||||
self.read_mode = ReadMode::Array;
|
||||
let value = visitor.visit_seq(Seq::new(self, Some(len)))?;
|
||||
let value = visitor.visit_seq(Seq::new(self, Some(len))?)?;
|
||||
self.read_mode = ReadMode::Single;
|
||||
self.reader.data_buf.realign_reads(None)?;
|
||||
|
||||
|
||||
@@ -12,11 +12,11 @@ pub struct Seq<'a, 'de: 'a> {
|
||||
}
|
||||
|
||||
impl<'de, 'a> Seq<'a, 'de> {
|
||||
pub fn new(de: &'a mut Deserializer<'de>, len: Option<usize>) -> Self {
|
||||
pub fn new(de: &'a mut Deserializer<'de>, len: Option<usize>) -> Result<Self> {
|
||||
trace!("Seq::new(len: {:?})", len);
|
||||
|
||||
let known_identifier = if len.is_none() {
|
||||
let value = de.reader.last_identifier().expect("known identifier null").into();
|
||||
let value = de.reader.last_identifier().ok_or(KbinErrorKind::InvalidState)?.into();
|
||||
debug!("Seq::new(len: {:?}) => known identifier: {:?}", len, value);
|
||||
|
||||
Some(value)
|
||||
@@ -24,12 +24,12 @@ impl<'de, 'a> Seq<'a, 'de> {
|
||||
None
|
||||
};
|
||||
|
||||
Self {
|
||||
Ok(Self {
|
||||
de,
|
||||
index: 0,
|
||||
len,
|
||||
known_identifier,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
fn is_end(&mut self) -> Result<bool> {
|
||||
|
||||
@@ -34,7 +34,7 @@ impl<'de, 'a> MapAccess<'de> for Struct<'a, 'de> {
|
||||
return Ok(None);
|
||||
}
|
||||
|
||||
let value = seed.deserialize(&mut *self.de).map(Some)?;
|
||||
let key = seed.deserialize(&mut *self.de).map(Some)?;
|
||||
|
||||
match node_type {
|
||||
StandardType::NodeStart => {
|
||||
@@ -56,7 +56,7 @@ impl<'de, 'a> MapAccess<'de> for Struct<'a, 'de> {
|
||||
// the current node type
|
||||
self.de.node_stack.push(node_type);
|
||||
|
||||
Ok(value)
|
||||
Ok(key)
|
||||
}
|
||||
|
||||
fn next_value_seed<V>(&mut self, seed: V) -> Result<V::Value>
|
||||
|
||||
Reference in New Issue
Block a user