diff --git a/src/main.rs b/src/main.rs index 5cf994e..fe65052 100644 --- a/src/main.rs +++ b/src/main.rs @@ -131,51 +131,34 @@ impl<'a> PasteInfo<'a> { } } -/* -trait Backend { - fn new_paste(&self) -> (String, String); - fn upload(&self, paste: Data, _key: Option) -> io::Result; +trait Backend: Sync + Send { + fn new_paste(&self) -> (String, String, String); - fn upload_string(&self, paste: &str, _key: Option) -> io::Result; + fn file_paths(&self, id: PasteID) -> (String, String, String); + + fn upload(&self, paste: Data, _key: Option) -> Result; + + fn upload_multipart(&self, paste: MultipartUpload) -> Result; + + fn upload_string(&self, paste: &PasteForm) -> Result; + + fn upload_tcp_stream(&self, mut stream: TcpStream) -> Result<()>; + + fn get(&self, id: PasteID) -> Result>; } #[derive(Default)] struct DefaultBackend{} -impl Backend for DefaultBackend { - fn new_paste(&self) -> (String, String) { - loop { - let id = PasteID::new(); - let filename = format!("upload/{id}", id = id); - if !Path::new(&filename).exists() { - let url = format!("{host}/{id}\n", host = HOST, id = id); - return (filename, url) - } - } - } - - fn upload(&self, paste: Data, _key: Option) -> io::Result { - let (filename, url) = self.new_paste(); - - paste.stream_to_file(Path::new(&filename))?; - Ok(url) - } - - fn upload_string(&self, paste: &str, _key: Option) -> io::Result { - let (filename, url) = self.new_paste(); - - fs::write(filename, paste)?; - Ok(url) - } -} -*/ +/* enum Backend { PlainFile } - -impl Backend { +*/ +impl Backend for DefaultBackend { +//impl Backend { fn new_paste(&self) -> (String, String, String) { loop { let id = PasteID::new(); @@ -212,8 +195,7 @@ impl Backend { Ok(url) } - fn upload_tcp_stream(&self, mut stream: TcpStream) -> Result<()> - { + fn upload_tcp_stream(&self, mut stream: TcpStream) -> Result<()> { let (filename, info_filename, url) = self.new_paste(); PasteInfo::default().write(info_filename)?; @@ -247,12 +229,13 @@ impl Backend { } } -impl<'a, 'r> FromRequest<'a, 'r> for &'a Backend { +impl<'a, 'r> FromRequest<'a, 'r> for &'a dyn Backend { type Error = (); fn from_request(req: &'a Request<'r>) -> request::Outcome { - let backend = req.guard::>()?; - Success(backend.inner()) + let backend = req.guard::>>()?; + let backend = backend.inner(); + Success(backend.as_ref()) } } @@ -376,10 +359,17 @@ fn copy(reader: &mut R, writer: &mut W, upload_max_size: u } } -fn run_tcp(){ +/* +//fn run_tcp() { +fn run_tcp(backend: T) + where T: Backend +{ // Bind the server's socket - thread::spawn(|| { - let backend = &Backend::PlainFile; + thread::spawn(move || { + //let backendbla = DefaultBackend::default(); + //let backend = &backendbla; + //let backend = backend.as_ref(); + let backend = &backend as &'static Backend; let listener = TcpListener::bind("127.0.0.1:12345").unwrap(); loop { @@ -397,9 +387,12 @@ fn run_tcp(){ }); } +*/ fn main() { - let backend = Backend::PlainFile; - run_tcp(); - rocket().manage(backend).launch(); + let backend = Box::new(DefaultBackend::default()); + //let tcp_backend = DefaultBackend::default(); + //run_tcp(tcp_backend); + //run_tcp(); + rocket().manage(backend as Box).launch(); }