Simplify try_read_version implementation.

Because we no longer need to construct fake timestamps for the
`MetaAddr` fields, we don't need to use any of the parsed fields while
parsing later fields, and we can neatly wrap up the entire parsing logic
into a single expression.
This commit is contained in:
Henry de Valence 2019-09-19 07:08:47 -07:00 committed by Deirdre Connolly
parent 5efdec1f03
commit ff6891b1c1
1 changed files with 19 additions and 31 deletions

View File

@ -457,38 +457,26 @@ fn try_read_version<R: io::Read>(
mut reader: R,
_parsing_version: Version,
) -> Result<Message, SerializationError> {
let version = Version(reader.read_u32::<LittleEndian>()?);
let services = Services(reader.read_u64::<LittleEndian>()?);
let timestamp = Utc.timestamp(reader.read_i64::<LittleEndian>()?, 0);
let address_recv = (
Services(reader.read_u64::<LittleEndian>()?),
reader.read_socket_addr()?,
);
let address_from = (
Services(reader.read_u64::<LittleEndian>()?),
reader.read_socket_addr()?,
);
let nonce = Nonce(reader.read_u64::<LittleEndian>()?);
let user_agent = reader.read_string()?;
let start_height = BlockHeight(reader.read_u32::<LittleEndian>()?);
let relay = match reader.read_u8()? {
0 => false,
1 => true,
_ => return Err(SerializationError::ParseError("non-bool value")),
};
Ok(Message::Version {
version,
services,
timestamp,
address_recv,
address_from,
nonce,
user_agent,
start_height,
relay,
version: Version(reader.read_u32::<LittleEndian>()?),
services: Services(reader.read_u64::<LittleEndian>()?),
timestamp: Utc.timestamp(reader.read_i64::<LittleEndian>()?, 0),
address_recv: (
Services(reader.read_u64::<LittleEndian>()?),
reader.read_socket_addr()?,
),
address_from: (
Services(reader.read_u64::<LittleEndian>()?),
reader.read_socket_addr()?,
),
nonce: Nonce(reader.read_u64::<LittleEndian>()?),
user_agent: reader.read_string()?,
start_height: BlockHeight(reader.read_u32::<LittleEndian>()?),
relay: match reader.read_u8()? {
0 => false,
1 => true,
_ => return Err(SerializationError::ParseError("non-bool value")),
},
})
}