feat: update file writing methods to use async I/O and improve dependency versions
parent
0056b4fa7b
commit
96ac85072e
|
@ -303,7 +303,7 @@ dependencies = [
|
|||
"atomic",
|
||||
"pear",
|
||||
"serde",
|
||||
"toml",
|
||||
"toml 0.8.23",
|
||||
"uncased",
|
||||
"version_check",
|
||||
]
|
||||
|
@ -442,7 +442,7 @@ dependencies = [
|
|||
"serde",
|
||||
"serde_json",
|
||||
"tokio",
|
||||
"toml",
|
||||
"toml 0.9.2",
|
||||
"url",
|
||||
]
|
||||
|
||||
|
@ -1259,6 +1259,15 @@ dependencies = [
|
|||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_spanned"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "40734c41988f7306bb04f0ecf60ec0f3f1caa34290e4e8ea471dcd3346483b83"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_urlencoded"
|
||||
version = "0.7.1"
|
||||
|
@ -1461,11 +1470,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362"
|
||||
dependencies = [
|
||||
"serde",
|
||||
"serde_spanned",
|
||||
"toml_datetime",
|
||||
"serde_spanned 0.6.9",
|
||||
"toml_datetime 0.6.11",
|
||||
"toml_edit",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml"
|
||||
version = "0.9.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ed0aee96c12fa71097902e0bb061a5e1ebd766a6636bb605ba401c45c1650eac"
|
||||
dependencies = [
|
||||
"indexmap",
|
||||
"serde",
|
||||
"serde_spanned 1.0.0",
|
||||
"toml_datetime 0.7.0",
|
||||
"toml_parser",
|
||||
"toml_writer",
|
||||
"winnow",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml_datetime"
|
||||
version = "0.6.11"
|
||||
|
@ -1475,6 +1499,15 @@ dependencies = [
|
|||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml_datetime"
|
||||
version = "0.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bade1c3e902f58d73d3f294cd7f20391c1cb2fbcb643b73566bc773971df91e3"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml_edit"
|
||||
version = "0.22.27"
|
||||
|
@ -1483,18 +1516,33 @@ checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a"
|
|||
dependencies = [
|
||||
"indexmap",
|
||||
"serde",
|
||||
"serde_spanned",
|
||||
"toml_datetime",
|
||||
"serde_spanned 0.6.9",
|
||||
"toml_datetime 0.6.11",
|
||||
"toml_write",
|
||||
"winnow",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml_parser"
|
||||
version = "1.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "97200572db069e74c512a14117b296ba0a80a30123fbbb5aa1f4a348f639ca30"
|
||||
dependencies = [
|
||||
"winnow",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml_write"
|
||||
version = "0.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801"
|
||||
|
||||
[[package]]
|
||||
name = "toml_writer"
|
||||
version = "1.0.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fcc842091f2def52017664b53082ecbbeb5c7731092bad69d2c63050401dfd64"
|
||||
|
||||
[[package]]
|
||||
name = "tower"
|
||||
version = "0.5.2"
|
||||
|
|
11
Cargo.toml
11
Cargo.toml
|
@ -6,14 +6,19 @@ edition = "2024"
|
|||
[dependencies]
|
||||
anyhow = "1.0.98"
|
||||
backon = "1"
|
||||
clap = { version = "4.5.40", features = ["derive"] }
|
||||
clap = { version = "4", features = ["derive"] }
|
||||
futures = "0.3"
|
||||
regex = "1.11.1"
|
||||
reqwest = { version = "0.12.22", features = ["json"] }
|
||||
serde_json = "1.0.140"
|
||||
tokio = { version = "1.46", features = ["macros", "rt-multi-thread", "time"] }
|
||||
tokio = { version = "1.46", features = [
|
||||
"macros",
|
||||
"rt-multi-thread",
|
||||
"time",
|
||||
"fs",
|
||||
] }
|
||||
url = { version = "2.5.4", features = ["serde"] }
|
||||
async-stream = "0.3"
|
||||
figment = { version = "0.10.19", features = ["env", "toml"] }
|
||||
serde = { version = "1.0.219", features = ["derive"] }
|
||||
toml = "0.8"
|
||||
toml = "0.9"
|
||||
|
|
|
@ -1,11 +1,15 @@
|
|||
use crate::types::ApiKey;
|
||||
use anyhow::Result;
|
||||
use std::{fs, io::Write};
|
||||
use tokio::io::{AsyncWriteExt, BufWriter};
|
||||
use toml::Value;
|
||||
|
||||
// Write valid key to output file
|
||||
pub fn write_keys_txt_file(file: &mut fs::File, key: &ApiKey) -> Result<()> {
|
||||
writeln!(file, "{}", key.as_str())?;
|
||||
pub async fn write_keys_txt_file(
|
||||
file: &mut BufWriter<tokio::fs::File>,
|
||||
key: &ApiKey,
|
||||
) -> Result<()> {
|
||||
file.write_all(key.as_str().as_bytes()).await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
@ -13,11 +17,11 @@ pub fn write_keys_txt_file(file: &mut fs::File, key: &ApiKey) -> Result<()> {
|
|||
pub fn write_keys_clewdr_format(file: &mut fs::File, key: &ApiKey) -> Result<()> {
|
||||
let mut table = toml::value::Table::new();
|
||||
table.insert("key".to_string(), Value::String(key.as_str().to_string()));
|
||||
|
||||
|
||||
let gemini_keys = Value::Array(vec![Value::Table(table)]);
|
||||
let mut root = toml::value::Table::new();
|
||||
root.insert("gemini_keys".to_string(), gemini_keys);
|
||||
|
||||
|
||||
let toml_string = toml::to_string(&Value::Table(root))?;
|
||||
write!(file, "{}", toml_string)?;
|
||||
Ok(())
|
||||
|
|
|
@ -2,8 +2,8 @@ use anyhow::Result;
|
|||
use async_stream::stream;
|
||||
use futures::{pin_mut, stream::StreamExt};
|
||||
use reqwest::Client;
|
||||
use std::{fs, time::Instant};
|
||||
use tokio::sync::mpsc;
|
||||
use std::time::Instant;
|
||||
use tokio::{fs, sync::mpsc};
|
||||
|
||||
use crate::adapters::write_keys_txt_file;
|
||||
use crate::config::KeyCheckerConfig;
|
||||
|
@ -42,20 +42,19 @@ impl ValidationService {
|
|||
|
||||
// Create stream to validate keys concurrently
|
||||
let valid_keys_stream = stream
|
||||
.map(|key| {
|
||||
validate_key_with_retry(self.client.to_owned(), self.config.api_host(), key)
|
||||
})
|
||||
.map(|key| validate_key_with_retry(self.client.to_owned(), self.config.api_host(), key))
|
||||
.buffer_unordered(self.config.concurrency())
|
||||
.filter_map(|r| async { r });
|
||||
pin_mut!(valid_keys_stream);
|
||||
|
||||
// Open output file for writing valid keys
|
||||
let mut output_file = fs::File::create(&self.config.output_path())?;
|
||||
let output_file = fs::File::create(&self.config.output_path()).await?;
|
||||
let mut buffer_writer = tokio::io::BufWriter::new(output_file);
|
||||
|
||||
// Process validated keys and write to output file
|
||||
while let Some(valid_key) = valid_keys_stream.next().await {
|
||||
println!("Valid key found: {}", valid_key.as_str());
|
||||
if let Err(e) = write_keys_txt_file(&mut output_file, &valid_key) {
|
||||
if let Err(e) = write_keys_txt_file(&mut buffer_writer, &valid_key).await {
|
||||
eprintln!("Failed to write key to output file: {}", e);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue