1use super::enums::PinSide;
5
6pub fn format_loc(side: PinSide, offset: u32) -> String {
7 let prefix = match side {
8 PinSide::West => 'w',
9 PinSide::East => 'e',
10 };
11 format!("{prefix}{offset}")
12}
13
14pub fn parse_loc(s: &str) -> Result<(PinSide, u32), String> {
15 let mut chars = s.chars();
16 let side = match chars.next() {
17 Some('w') => PinSide::West,
18 Some('e') => PinSide::East,
19 _ => return Err(format!("{s:?} must start with `w` (west) or `e` (east)")),
20 };
21 let rest = chars.as_str();
22 let offset = if rest.is_empty() {
23 0
24 } else {
25 rest.parse()
26 .map_err(|_| format!("{s:?} has a non-numeric offset {rest:?}"))?
27 };
28 Ok((side, offset))
29}