mirror of
https://github.com/euzu/tuliprox.git
synced 2026-10-17 13:22:19 +02:00
SyncIOBridge caused tokio panic
This commit is contained in:
@@ -1,12 +1,10 @@
|
||||
use std::collections::{HashMap, HashSet};
|
||||
use std::fs::File;
|
||||
use std::io::{BufReader, Write};
|
||||
use std::path::Path;
|
||||
use crate::utils::file_reader;
|
||||
use serde::Serialize;
|
||||
use serde_json::Value;
|
||||
use shared::utils::json_iter_array;
|
||||
use crate::utils::file_reader;
|
||||
use tokio_util::io::SyncIoBridge;
|
||||
use std::collections::{HashMap, HashSet};
|
||||
use std::fs::File;
|
||||
use std::io::Write;
|
||||
use std::path::Path;
|
||||
|
||||
pub fn json_filter_file<S: ::std::hash::BuildHasher>(file_path: &Path, filter: &HashMap<&str, HashSet<String, S>, S>) -> Vec<serde_json::Value> {
|
||||
let mut filtered: Vec<serde_json::Value> = Vec::with_capacity(1024);
|
||||
@@ -19,33 +17,39 @@ pub fn json_filter_file<S: ::std::hash::BuildHasher>(file_path: &Path, filter: &
|
||||
};
|
||||
|
||||
let reader = file_reader(file);
|
||||
for entry in json_iter_array::<serde_json::Value, BufReader<File>>(reader).flatten() {
|
||||
if let Some(item) = entry.as_object() {
|
||||
if filter.iter().all(|(&key, filter_set)| {
|
||||
item.get(key).is_some_and(|field_value| match field_value {
|
||||
Value::String(s) => filter_set.contains(s.as_str()),
|
||||
Value::Number(n) => filter_set.contains(n.as_str()),
|
||||
_ => false,
|
||||
})
|
||||
}) {
|
||||
filtered.push(entry);
|
||||
match serde_json::from_reader(reader) {
|
||||
Ok(value) => {
|
||||
if let Value::Array(list) = value {
|
||||
for entry in list {
|
||||
if let Some(item) = entry.as_object() {
|
||||
if filter.iter().all(|(&key, filter_set)| {
|
||||
item.get(key).is_some_and(|field_value| match field_value {
|
||||
Value::String(s) => filter_set.contains(s.as_str()),
|
||||
Value::Number(n) => filter_set.contains(n.as_str()),
|
||||
_ => false,
|
||||
})
|
||||
}) {
|
||||
filtered.push(entry);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Err(_err) => {}
|
||||
}
|
||||
|
||||
filtered
|
||||
}
|
||||
|
||||
pub async fn json_write_documents_to_file<T>(file: &std::path::Path, value: &T) -> std::io::Result<()>
|
||||
pub fn json_write_documents_to_file<T>(
|
||||
path: &std::path::Path,
|
||||
value: &T,
|
||||
) -> std::io::Result<()>
|
||||
where
|
||||
T: ?Sized + Serialize,
|
||||
T: Serialize,
|
||||
{
|
||||
let file = tokio::fs::File::create(file).await?;
|
||||
|
||||
let sync_writer = SyncIoBridge::new(file);
|
||||
let mut buf_writer = std::io::BufWriter::new(sync_writer);
|
||||
|
||||
let file = std::fs::File::create(path)?;
|
||||
let mut buf_writer = std::io::BufWriter::new(file);
|
||||
serde_json::to_writer(&mut buf_writer, value)?;
|
||||
buf_writer.flush()?;
|
||||
Ok(())
|
||||
}
|
||||
buf_writer.flush()
|
||||
}
|
||||
|
||||
@@ -331,7 +331,7 @@ async fn get_remote_content(client: Arc<reqwest::Client>, input: &InputSource, h
|
||||
let (mut stream, response_url) = get_remote_content_as_stream(client.clone(), url, input.method, Some(&headers)).await.map_err(|e| str_to_io_error(&format!("Failed to read content: {e}")))?;
|
||||
let mut content = String::new();
|
||||
stream.read_to_string(&mut content).await.map_err(|e| str_to_io_error(&format!("Failed to read content: {e}")))?;
|
||||
debug_if_enabled!("Request took:{} {}", format_elapsed_time(start_time.elapsed().as_secs()), sanitize_sensitive_info(url.as_str()));
|
||||
debug_if_enabled!("Request took: {} {}", format_elapsed_time(start_time.elapsed().as_secs()), sanitize_sensitive_info(url.as_str()));
|
||||
Ok((content, response_url))
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user