diff --git a/src/main.rs b/src/main.rs index 965c54f..fd39fa4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -10,9 +10,65 @@ struct Cli{ #[derive(Subcommand)] enum Commands{ + Review(ReviewCommand), } -fn main(){ + +#[derive(Args)] +struct ReviewCommand{ + #[arg(long)] + cookie:String, +} + +#[tokio::main] +async fn main(){ let cli=Cli::parse(); match cli.command{ + Commands::Review(command)=>review(ReviewConfig{ + cookie:command.cookie, + }).await.unwrap(), } } + +#[derive(Debug)] +enum ReviewError{ + Cookie(submissions_api::CookieError), + Reqwest(submissions_api::ReqwestError), + GetPolicies(submissions_api::Error), + GetScriptFromHash(submissions_api::types::SingleItemError), + NoScript, + WriteCurrent(std::io::Error), +} + +struct ReviewConfig{ + cookie:String, +} + +async fn review(config:ReviewConfig)->Result<(),ReviewError>{ + // download unreviewed policies + // review them + let cookie=submissions_api::Cookie::new(&config.cookie).map_err(ReviewError::Cookie)?; + let api=submissions_api::external::Context::new("http://localhost:8083".to_owned(),cookie).map_err(ReviewError::Reqwest)?; + + let unreviewed_policies=api.get_script_policies(submissions_api::types::GetScriptPoliciesRequest{ + Page:1, + Limit:100, + FromScriptHash:None, + ToScriptID:None, + Policy:Some(submissions_api::types::Policy::None), + }).await.map_err(ReviewError::GetPolicies)?; + + for policy in unreviewed_policies{ + // download source code + let script_response=api.get_script_from_hash(submissions_api::types::HashRequest{ + hash:policy.FromScriptHash.as_str(), + }).await + .map_err(ReviewError::GetScriptFromHash)? + .ok_or(ReviewError::NoScript)?; + + let source=script_response.Source; + //load source into current.lua + tokio::fs::write("current.lua",source).await.map_err(ReviewError::WriteCurrent)?; + } + + Ok(()) +}