mirror of
https://github.com/euzu/tuliprox.git
synced 2026-10-21 07:12:25 +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()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user