cli

Command-line interface for Radroots
git clone https://radroots.dev/git/cli.git
Log | Files | Refs | README | LICENSE

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 }