cove/src/export/json.rs
2022-08-10 03:08:06 +02:00

47 lines
988 B
Rust

use std::fs::File;
use std::io::{BufWriter, Write};
use crate::vault::Vault;
const CHUNK_SIZE: usize = 10000;
pub async fn export_to_file(
vault: &Vault,
room: String,
file: &mut BufWriter<File>,
) -> anyhow::Result<()> {
let vault = vault.euph(room);
write!(file, "[")?;
let mut total = 0;
let mut offset = 0;
loop {
let messages = vault.chunk_at_offset(CHUNK_SIZE, offset).await;
offset += messages.len();
if messages.is_empty() {
break;
}
for message in messages {
if total == 0 {
writeln!(file)?;
} else {
writeln!(file, ",")?;
}
serde_json::to_writer(&mut *file, &message)?; // Fancy reborrow! :D
total += 1;
}
if total % 100000 == 0 {
println!(" {total} messages");
}
}
write!(file, "\n]")?;
println!(" {total} messages in total");
Ok(())
}