main.rs (2501B)
1 #![forbid(unsafe_code)] 2 3 mod rshr_202_step_302_gate; 4 mod rshr_202_step_302_platform; 5 mod source_lock; 6 7 fn main() { 8 if run().is_err() { 9 if std::env::args().nth(1).as_deref() == Some("source-lock-check") { 10 eprintln!("source_lock_check_failed"); 11 } else { 12 eprintln!("step_302_gate_failed"); 13 } 14 std::process::exit(1); 15 } 16 } 17 18 fn run() -> Result<(), ()> { 19 let mut arguments = std::env::args().skip(1); 20 match arguments.next().as_deref() { 21 Some("source-lock-check") if arguments.next().is_none() => source_lock::run(), 22 Some("rshr-step-302-gate") => { 23 let args = parse_gate_args(arguments.collect())?; 24 rshr_202_step_302_gate::run(args).map_err(|_| ()) 25 } 26 Some("rshr-step-302-platform-probe") if arguments.next().is_none() => { 27 rshr_202_step_302_platform::run().map_err(|_| ()) 28 } 29 _ => Err(()), 30 } 31 } 32 33 fn parse_gate_args(values: Vec<String>) -> Result<rshr_202_step_302_gate::Arguments, ()> { 34 let mut step = None; 35 let mut check_id = None; 36 let mut source_revision = None; 37 let mut source_tree = None; 38 let mut candidate_digest = None; 39 let mut platform = None; 40 let mut execution_request_sha256 = None; 41 for value in values { 42 let (name, value) = value.split_once('=').ok_or(())?; 43 let slot = match name { 44 "--check-id" => &mut check_id, 45 "--source-revision" => &mut source_revision, 46 "--source-tree" => &mut source_tree, 47 "--candidate-digest" => &mut candidate_digest, 48 "--platform" => &mut platform, 49 "--execution-request-sha256" => &mut execution_request_sha256, 50 "--step" => { 51 let parsed = value.parse::<u16>().map_err(|_| ())?; 52 if step.replace(parsed).is_some() { 53 return Err(()); 54 } 55 continue; 56 } 57 _ => return Err(()), 58 }; 59 if value.is_empty() || slot.replace(value.to_owned()).is_some() { 60 return Err(()); 61 } 62 } 63 Ok(rshr_202_step_302_gate::Arguments { 64 step: step.ok_or(())?, 65 check_id: check_id.ok_or(())?, 66 source_revision: source_revision.ok_or(())?, 67 source_tree: source_tree.ok_or(())?, 68 candidate_digest: candidate_digest.ok_or(())?, 69 platform: platform.ok_or(())?, 70 execution_request_sha256: execution_request_sha256.ok_or(())?, 71 }) 72 }