add with input stream

develop
Kinch 2023-09-17 21:49:37 +02:00
parent ca1dca8414
commit e96052c286
5 changed files with 35 additions and 1 deletions

View File

@ -0,0 +1,8 @@
use std::ops::Deref;
use std::path::PathBuf;
pub trait ResourceInputStream: std::io::Read {
fn path(&self) -> PathBuf;
}
pub type DynResourceInputStream = Box<dyn ResourceInputStream>;

View File

@ -1,3 +1,5 @@
pub mod input_stream;
mod input_stream_filesystem;
pub mod resource_filesystem;
use mlua::{MetaMethod, UserData, UserDataFields, UserDataMethods};

View File

@ -1,3 +1,8 @@
use crate::resources::input_stream::DynResourceInputStream;
mod zip_sink;
pub trait ResourceSink {}
pub trait ResourceSink {
fn add_file(&mut self, input: DynResourceInputStream);
fn add_directory(&mut self);
}

View File

@ -0,0 +1,19 @@
use crate::resources::input_stream::DynResourceInputStream;
use crate::sinks::ResourceSink;
use std::fs::File;
use std::io::Write;
use std::ptr::write;
use zip::ZipWriter;
pub struct ZipSink {
writer: ZipWriter<File>,
}
impl ResourceSink for ZipSink {
fn add(&mut self, mut input: DynResourceInputStream) {
self.writer
.start_file(input.path(), Default::default())
.expect("error writing zip");
std::io::copy(&mut input, &mut self.writer).expect("error writing zip");
}
}