Use iterators
This commit is contained in:
parent
9cc9f5dd02
commit
9f000cbdcb
55
src/main.rs
55
src/main.rs
|
@ -1,22 +1,59 @@
|
|||
use std::collections::VecDeque;
|
||||
|
||||
use crate::rentry::{build_client, delete_paste, CSRFData, DeleteError};
|
||||
|
||||
mod rentry;
|
||||
|
||||
const PASTE_NAME: &str = "Hyprland-controversy";
|
||||
|
||||
pub struct EditCodeGenerator {
|
||||
codes: Vec<String>,
|
||||
index: usize,
|
||||
}
|
||||
|
||||
impl EditCodeGenerator {
|
||||
pub fn retry_last(&mut self) -> Option<()> {
|
||||
if self.index > 0 {
|
||||
self.index -= 1;
|
||||
Some(())
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for EditCodeGenerator {
|
||||
fn default() -> Self {
|
||||
let codes = (b'a'..=b'z')
|
||||
.map(|c| (c as char).to_string())
|
||||
.chain((b'A'..=b'Z').map(|c| (c as char).to_string()))
|
||||
.chain((b'0'..=b'9').map(|c| (c as char).to_string()))
|
||||
.collect();
|
||||
|
||||
EditCodeGenerator { codes, index: 0 }
|
||||
}
|
||||
}
|
||||
|
||||
impl Iterator for EditCodeGenerator {
|
||||
type Item = String;
|
||||
|
||||
fn next(&mut self) -> Option<Self::Item> {
|
||||
if self.index < self.codes.len() {
|
||||
let code = self.codes[self.index].clone();
|
||||
self.index += 1;
|
||||
Some(code)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let client = build_client();
|
||||
let mut csrf_data = CSRFData::get(&client, PASTE_NAME);
|
||||
|
||||
let mut edit_codes = VecDeque::from([
|
||||
"qwack", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u",
|
||||
"v", "w", "x", "y", "z", "a", "b", "c",
|
||||
]);
|
||||
let mut edit_codes = EditCodeGenerator::default();
|
||||
|
||||
while let Some(edit_code) = edit_codes.pop_front() {
|
||||
match delete_paste(&client, &csrf_data, edit_code, PASTE_NAME) {
|
||||
while let Some(edit_code) = edit_codes.next() {
|
||||
match delete_paste(&client, &csrf_data, &edit_code, PASTE_NAME) {
|
||||
Ok(_) => {
|
||||
println!("Paste deleted successfully with edit code: {edit_code}");
|
||||
return;
|
||||
|
@ -35,7 +72,7 @@ fn main() {
|
|||
println!("Hit the limit, waiting...");
|
||||
csrf_data = CSRFData::get(&client, PASTE_NAME);
|
||||
std::thread::sleep(std::time::Duration::from_secs(30));
|
||||
edit_codes.push_front(edit_code);
|
||||
edit_codes.retry_last().unwrap();
|
||||
}
|
||||
DeleteError::FormError(msg) => {
|
||||
eprintln!("Form error: {msg}");
|
||||
|
|
Loading…
Reference in a new issue