Skip to content

Commit

Permalink
prevent misuse of pepsi playernumber
Browse files Browse the repository at this point in the history
  • Loading branch information
MaikRe committed Jun 18, 2024
1 parent 391ec29 commit ee04f51
Showing 1 changed file with 25 additions and 11 deletions.
36 changes: 25 additions & 11 deletions crates/argument_parsers/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -197,14 +197,22 @@ impl Display for NaoNumberPlayerAssignment {
pub fn parse_assignment(input: &str) -> Result<(&str, PlayerNumber, RoleNumber)> {
let result = input.splitn(3, ':').collect::<Vec<_>>();
let arguments_length = result.len();
if !(2..=3).contains(&arguments_length) {
bail!("Too many or too few arguements {input}")
if arguments_length < 2 {
bail!("too few arguments in {input}")
} else if arguments_length >= 3 {
bail!("this version of pepsi does not yet implement manual role assignments: {input} ")
}
let prefix = result[0];
let player_number = result[1];
let role_number = result.get(2).unwrap_or(&player_number);
let player_number = player_number.parse()?;
let role_number = match *role_number {
let player_string = result[1];
// For when role numbers can be manually set
// let role_number = result.get(2).unwrap_or(&player_number);
let player_number: PlayerNumber = player_string.parse()?;
if !(1..8).contains(&player_number.number) {
bail!(
"this version of the codebase does not yet support the jersey number {player_string} "
)
}
let role_number = match player_string {
"1" => RoleNumber::One,
"2" => RoleNumber::Two,
"3" => RoleNumber::Three,
Expand All @@ -216,7 +224,7 @@ pub fn parse_assignment(input: &str) -> Result<(&str, PlayerNumber, RoleNumber)>
if arguments_length == 2 {
bail!("no role number provided for player number higher than 7")
} else {
bail!("unexpected role number {role_number}")
bail!("unexpected role number") //{role_number}
}
}
};
Expand Down Expand Up @@ -244,10 +252,10 @@ fn test_player_assignment() {
("37", PlayerNumber { number: 1 }, RoleNumber::One),
parse_assignment("37:1").expect("failed to parse assignments")
);
assert_eq!(
("37", PlayerNumber { number: 9 }, RoleNumber::One),
parse_assignment("37:9:1").expect("failed to parse assignments")
);
// assert_eq!(
// ("37", PlayerNumber { number: 9 }, RoleNumber::One),
// parse_assignment("37:9:1").expect("failed to parse assignments")
// );
}

#[test]
Expand All @@ -261,3 +269,9 @@ fn wrong_role_assignment() {
fn no_role_assignment_with_player_over_7() {
let _ = parse_assignment("37:9").expect("failed to parse assignments");
}

#[test]
#[should_panic]
fn manual_role_numbers_not_yet_implemented() {
let _ = parse_assignment("37:1:1").expect("failed to parse assignments");
}

0 comments on commit ee04f51

Please sign in to comment.