Skip to content

Commit

Permalink
refactor(lib): merge parsing into the same files as structs
Browse files Browse the repository at this point in the history
I originally decided to separate them since they are technically
separate things. There could be multiple parsers for the same struct. In
practice, though, that hasn't happened, and it's just an annoyance to
have them in separate files.

There was some dead code that didn't previously produce a warning since
it was pub rather than pub(crate). For now, it's marked with
  • Loading branch information
Oppzippy committed Sep 29, 2024
1 parent 49eb258 commit b1b5935
Show file tree
Hide file tree
Showing 87 changed files with 1,542 additions and 1,679 deletions.
80 changes: 39 additions & 41 deletions lib/src/devices/a3027/packets/state_update_packet.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,7 @@ use crate::devices::{
standard::{
packets::{
inbound::state_update_packet::StateUpdatePacket,
parsing::{
take_age_range, take_basic_hear_id, take_bool, take_equalizer_configuration,
take_firmware_version, take_gender, take_serial_number, take_single_battery,
take_sound_modes, ParseResult,
},
parsing::{take_bool, ParseResult},
},
structures::{
AgeRange, BasicHearId, EqualizerConfiguration, FirmwareVersion, Gender, SerialNumber,
Expand Down Expand Up @@ -57,37 +53,26 @@ impl From<A3027StateUpdatePacket> for StateUpdatePacket {
}
}

pub fn take_a3027_state_update_packet<'a, E: ParseError<&'a [u8]> + ContextError<&'a [u8]>>(
input: &'a [u8],
) -> ParseResult<A3027StateUpdatePacket, E> {
context(
"a3027 state update packet",
all_consuming(map(
tuple((
take_single_battery,
take_equalizer_configuration(8),
take_gender,
take_age_range,
take_basic_hear_id,
take_sound_modes,
take_firmware_version,
take_serial_number,
take_bool,
opt(take_bool),
)),
|(
battery,
equalizer_configuration,
gender,
age_range,
hear_id,
sound_modes,
firmware_version,
serial_number,
wear_detection,
touch_func,
)| {
A3027StateUpdatePacket {
impl A3027StateUpdatePacket {
pub(crate) fn take<'a, E: ParseError<&'a [u8]> + ContextError<&'a [u8]>>(
input: &'a [u8],
) -> ParseResult<A3027StateUpdatePacket, E> {
context(
"a3027 state update packet",
all_consuming(map(
tuple((
SingleBattery::take,
EqualizerConfiguration::take(8),
Gender::take,
AgeRange::take,
BasicHearId::take,
SoundModes::take,
FirmwareVersion::take,
SerialNumber::take,
take_bool,
opt(take_bool),
)),
|(
battery,
equalizer_configuration,
gender,
Expand All @@ -97,9 +82,22 @@ pub fn take_a3027_state_update_packet<'a, E: ParseError<&'a [u8]> + ContextError
firmware_version,
serial_number,
wear_detection,
touch_func: touch_func.unwrap_or_default(),
}
},
)),
)(input)
touch_func,
)| {
A3027StateUpdatePacket {
battery,
equalizer_configuration,
gender,
age_range,
hear_id,
sound_modes,
firmware_version,
serial_number,
wear_detection,
touch_func: touch_func.unwrap_or_default(),
}
},
)),
)(input)
}
}
91 changes: 42 additions & 49 deletions lib/src/devices/a3028/packets/state_update_packet.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,7 @@ use nom::{
use crate::devices::{
a3028::device_profile::A3028_DEVICE_PROFILE,
standard::{
packets::{
inbound::state_update_packet::StateUpdatePacket,
parsing::{
take_age_range, take_basic_hear_id, take_equalizer_configuration,
take_firmware_version, take_gender, take_serial_number, take_single_battery,
take_sound_modes, ParseResult,
},
},
packets::{inbound::state_update_packet::StateUpdatePacket, parsing::ParseResult},
structures::{
AgeRange, BasicHearId, EqualizerConfiguration, FirmwareVersion, Gender, SerialNumber,
SingleBattery, SoundModes,
Expand Down Expand Up @@ -54,33 +47,24 @@ impl From<A3028StateUpdatePacket> for StateUpdatePacket {
}
}

pub fn take_a3028_state_update_packet<'a, E: ParseError<&'a [u8]> + ContextError<&'a [u8]>>(
input: &'a [u8],
) -> ParseResult<A3028StateUpdatePacket, E> {
context(
"a3028 state update packet",
all_consuming(map(
tuple((
take_single_battery,
take_equalizer_configuration(8),
take_gender,
take_age_range,
take_basic_hear_id,
take_sound_modes,
take_firmware_version,
take_serial_number,
)),
|(
battery,
equalizer_configuration,
gender,
age_range,
hear_id,
sound_modes,
firmware_version,
serial_number,
)| {
A3028StateUpdatePacket {
impl A3028StateUpdatePacket {
pub(crate) fn take<'a, E: ParseError<&'a [u8]> + ContextError<&'a [u8]>>(
input: &'a [u8],
) -> ParseResult<A3028StateUpdatePacket, E> {
context(
"a3028 state update packet",
all_consuming(map(
tuple((
SingleBattery::take,
EqualizerConfiguration::take(8),
Gender::take,
AgeRange::take,
BasicHearId::take,
SoundModes::take,
FirmwareVersion::take,
SerialNumber::take,
)),
|(
battery,
equalizer_configuration,
gender,
Expand All @@ -89,20 +73,29 @@ pub fn take_a3028_state_update_packet<'a, E: ParseError<&'a [u8]> + ContextError
sound_modes,
firmware_version,
serial_number,
}
},
)),
)(input)
)| {
A3028StateUpdatePacket {
battery,
equalizer_configuration,
gender,
age_range,
hear_id,
sound_modes,
firmware_version,
serial_number,
}
},
)),
)(input)
}
}

#[cfg(test)]
mod tests {
use nom::error::VerboseError;

use crate::devices::standard::{
packets::inbound::{
state_update_packet::take_state_update_packet, take_inbound_packet_body,
},
packets::inbound::{state_update_packet::StateUpdatePacket, take_inbound_packet_body},
structures::{
AmbientSoundMode, CustomNoiseCanceling, EqualizerConfiguration, NoiseCancelingMode,
PresetEqualizerProfile, SoundModes, VolumeAdjustments,
Expand All @@ -120,7 +113,7 @@ mod tests {
0x39, 0x30, 0x38, 0x36, 0x45, 0x43, 0x38, 0x32, 0x46, 0x31, 0x32, 0x41, 0x43, 0x35,
];
let (_, body) = take_inbound_packet_body(input).unwrap();
let packet = take_state_update_packet::<VerboseError<_>>(body).unwrap().1;
let packet = StateUpdatePacket::take::<VerboseError<_>>(body).unwrap().1;
assert_eq!(
Some(SoundModes {
ambient_sound_mode: AmbientSoundMode::Normal,
Expand Down Expand Up @@ -148,7 +141,7 @@ mod tests {
0x39, 0x30, 0x38, 0x36, 0x45, 0x43, 0x38, 0x32, 0x46, 0x31, 0x32, 0x41, 0x43, 0x84,
];
let (_, body) = take_inbound_packet_body(input).unwrap();
let packet = take_state_update_packet::<VerboseError<_>>(body).unwrap().1;
let packet = StateUpdatePacket::take::<VerboseError<_>>(body).unwrap().1;
assert_eq!(
AmbientSoundMode::Normal,
packet.sound_modes.unwrap().ambient_sound_mode
Expand All @@ -175,7 +168,7 @@ mod tests {
0x39, 0x30, 0x38, 0x36, 0x45, 0x43, 0x38, 0x32, 0x46, 0x31, 0x32, 0x41, 0x43, 0x30,
];
let (_, body) = take_inbound_packet_body(input).unwrap();
let packet = take_state_update_packet::<VerboseError<_>>(body).unwrap().1;
let packet = StateUpdatePacket::take::<VerboseError<_>>(body).unwrap().1;
assert_eq!(
AmbientSoundMode::Normal,
packet.sound_modes.unwrap().ambient_sound_mode
Expand Down Expand Up @@ -203,7 +196,7 @@ mod tests {
0x39, 0x30, 0x38, 0x36, 0x45, 0x43, 0x38, 0x32, 0x46, 0x31, 0x32, 0x41, 0x43, 0x2f,
];
let (_, body) = take_inbound_packet_body(input).unwrap();
let packet = take_state_update_packet::<VerboseError<_>>(body).unwrap().1;
let packet = StateUpdatePacket::take::<VerboseError<_>>(body).unwrap().1;
assert_eq!(
AmbientSoundMode::Normal,
packet.sound_modes.unwrap().ambient_sound_mode
Expand All @@ -230,7 +223,7 @@ mod tests {
0x39, 0x30, 0x38, 0x36, 0x45, 0x43, 0x38, 0x32, 0x46, 0x31, 0x32, 0x41, 0x43, 0x31,
];
let (_, body) = take_inbound_packet_body(input).unwrap();
let (_, packet) = take_state_update_packet::<VerboseError<_>>(body).unwrap();
let (_, packet) = StateUpdatePacket::take::<VerboseError<_>>(body).unwrap();
assert_eq!(
AmbientSoundMode::default(),
packet.sound_modes.unwrap().ambient_sound_mode
Expand All @@ -248,7 +241,7 @@ mod tests {
0x39, 0x30, 0x38, 0x36, 0x45, 0x43, 0x38, 0x32, 0x46, 0x31, 0x32, 0x41, 0x43, 0x33,
];
let (_, body) = take_inbound_packet_body(input).unwrap();
let (_, packet) = take_state_update_packet::<VerboseError<_>>(body).unwrap();
let (_, packet) = StateUpdatePacket::take::<VerboseError<_>>(body).unwrap();
assert_eq!(
NoiseCancelingMode::default(),
packet.sound_modes.unwrap().noise_canceling_mode
Expand All @@ -268,7 +261,7 @@ mod tests {
0x00, 0x00, 0x38,
];
let (_, body) = take_inbound_packet_body(input).unwrap();
let result = take_state_update_packet::<VerboseError<_>>(body);
let result = StateUpdatePacket::take::<VerboseError<_>>(body);
assert!(result.is_err())
}
}
59 changes: 28 additions & 31 deletions lib/src/devices/a3033/packets/state_update_packet.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,7 @@ use crate::devices::{
standard::{
packets::{
inbound::state_update_packet::StateUpdatePacket,
parsing::{
take_bool, take_equalizer_configuration, take_firmware_version, take_serial_number,
take_single_battery, ParseResult,
},
parsing::{take_bool, ParseResult},
},
structures::{EqualizerConfiguration, FirmwareVersion, SerialNumber, SingleBattery},
},
Expand Down Expand Up @@ -47,36 +44,36 @@ impl From<A3033StateUpdatePacket> for StateUpdatePacket {
}
}

pub fn take_a3033_state_update_packet<'a, E: ParseError<&'a [u8]> + ContextError<&'a [u8]>>(
input: &'a [u8],
) -> ParseResult<A3033StateUpdatePacket, E> {
context(
"a3033 state update packet",
all_consuming(map(
tuple((
take_single_battery,
take_equalizer_configuration(8),
take_firmware_version,
take_serial_number,
take_bool,
)),
|(
battery,
equalizer_configuration,
firmware_version,
serial_number,
wear_detection,
)| {
A3033StateUpdatePacket {
impl A3033StateUpdatePacket {
pub(crate) fn take<'a, E: ParseError<&'a [u8]> + ContextError<&'a [u8]>>(
input: &'a [u8],
) -> ParseResult<A3033StateUpdatePacket, E> {
context(
"a3033 state update packet",
all_consuming(map(
tuple((
SingleBattery::take,
EqualizerConfiguration::take(8),
FirmwareVersion::take,
SerialNumber::take,
take_bool,
)),
|(
battery,
equalizer_configuration,
firmware_version,
serial_number,
wear_detection,
}
},
)),
)(input)
)| {
A3033StateUpdatePacket {
battery,
equalizer_configuration,
firmware_version,
serial_number,
wear_detection,
}
},
)),
)(input)
}
}

impl A3033StateUpdatePacket {}
Loading

0 comments on commit b1b5935

Please sign in to comment.