Skip to content

Commit

Permalink
use safe accessor for LineAttribute value
Browse files Browse the repository at this point in the history
  • Loading branch information
warthog618 committed Apr 2, 2024
1 parent 669ca22 commit 823efaa
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 29 deletions.
22 changes: 9 additions & 13 deletions lib/src/request/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1178,23 +1178,19 @@ mod tests {
let lca = lr.config.attrs.0[0];
assert_eq!(lca.mask, 0b000111);
assert_eq!(lca.attr.kind, v2::LineAttributeKind::Flags);
// SAFETY: already checked kind before accessing value
unsafe {
assert!(lca
.attr
.value
.flags
.contains(v2::LineFlags::INPUT | v2::LineFlags::ACTIVE_LOW));
}
assert_eq!(
lca.attr.to_value().unwrap(),
v2::LineAttributeValue::Flags(v2::LineFlags::INPUT | v2::LineFlags::ACTIVE_LOW)
);
// second is values for outputs
let lca = lr.config.attrs.0[1];
assert_eq!(lca.mask, 0b1111000);
assert_eq!(lca.attr.kind, v2::LineAttributeKind::Values);
// SAFETY: already checked kind before accessing value
unsafe {
// inputs should be inactive, outputs as per config
assert_eq!(lca.attr.value.values, 0b0011000);
}
// inputs should be inactive, outputs as per config
assert_eq!(
lca.attr.to_value().unwrap(),
v2::LineAttributeValue::Values(0b0011000)
);
} else {
panic!("not a line request");
}
Expand Down
28 changes: 12 additions & 16 deletions lib/src/request/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1238,32 +1238,28 @@ mod tests {
let lca = lc.attrs.0[0];
assert_eq!(lca.mask, 0b0100);
assert_eq!(lca.attr.kind, v2::LineAttributeKind::Flags);
// SAFETY: already checked kind before accessing value
unsafe {
assert!(lca
.attr
.value
.flags
.contains(v2::LineFlags::INPUT | v2::LineFlags::ACTIVE_LOW));
}
assert_eq!(
lca.attr.to_value().unwrap(),
v2::LineAttributeValue::Flags(v2::LineFlags::INPUT | v2::LineFlags::ACTIVE_LOW)
);

// second is values for outputs
let lca = lc.attrs.0[1];
assert_eq!(lca.mask, 0b1011);
assert_eq!(lca.attr.kind, v2::LineAttributeKind::Values);
// SAFETY: already checked kind before accessing value
unsafe {
assert_eq!(lca.attr.value.values, 0b1001);
}
assert_eq!(
lca.attr.to_value().unwrap(),
v2::LineAttributeValue::Values(0b1001)
);

// third is debounce for line 4
let lca = lc.attrs.0[2];
assert_eq!(lca.mask, 0b0100);
assert_eq!(lca.attr.kind, v2::LineAttributeKind::Debounce);
// SAFETY: already checked kind before accessing value
unsafe {
assert_eq!(lca.attr.value.debounce_period_us, 10000);
}
assert_eq!(
lca.attr.to_value().unwrap(),
v2::LineAttributeValue::DebouncePeriod(Duration::from_micros(10000))
);

// too many attrs required
for offset in 10..20 {
Expand Down

0 comments on commit 823efaa

Please sign in to comment.