Refactor Backend into trait, broke direct TCP paste

This commit is contained in:
Travis Burtrum 2018-08-17 00:39:27 -04:00
parent 2b62a7e1da
commit ff1c687008

View File

@ -131,51 +131,34 @@ impl<'a> PasteInfo<'a> {
} }
} }
/*
trait Backend {
fn new_paste(&self) -> (String, String);
fn upload(&self, paste: Data, _key: Option<PasteID>) -> io::Result<String>; trait Backend: Sync + Send {
fn new_paste(&self) -> (String, String, String);
fn upload_string(&self, paste: &str, _key: Option<PasteID>) -> io::Result<String>; fn file_paths(&self, id: PasteID) -> (String, String, String);
fn upload(&self, paste: Data, _key: Option<PasteID>) -> Result<String>;
fn upload_multipart(&self, paste: MultipartUpload) -> Result<String>;
fn upload_string(&self, paste: &PasteForm) -> Result<String>;
fn upload_tcp_stream(&self, mut stream: TcpStream) -> Result<()>;
fn get(&self, id: PasteID) -> Result<content::Plain<File>>;
} }
#[derive(Default)] #[derive(Default)]
struct DefaultBackend{} 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<PasteID>) -> io::Result<String> {
let (filename, url) = self.new_paste();
paste.stream_to_file(Path::new(&filename))?;
Ok(url)
}
fn upload_string(&self, paste: &str, _key: Option<PasteID>) -> io::Result<String> {
let (filename, url) = self.new_paste();
fs::write(filename, paste)?;
Ok(url)
}
}
*/
/*
enum Backend { enum Backend {
PlainFile PlainFile
} }
*/
impl Backend { impl Backend for DefaultBackend {
//impl Backend {
fn new_paste(&self) -> (String, String, String) { fn new_paste(&self) -> (String, String, String) {
loop { loop {
let id = PasteID::new(); let id = PasteID::new();
@ -212,8 +195,7 @@ impl Backend {
Ok(url) 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(); let (filename, info_filename, url) = self.new_paste();
PasteInfo::default().write(info_filename)?; 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 = (); type Error = ();
fn from_request(req: &'a Request<'r>) -> request::Outcome<Self, ()> { fn from_request(req: &'a Request<'r>) -> request::Outcome<Self, ()> {
let backend = req.guard::<State<Backend>>()?; let backend = req.guard::<State<Box<Backend>>>()?;
Success(backend.inner()) let backend = backend.inner();
Success(backend.as_ref())
} }
} }
@ -376,10 +359,17 @@ fn copy<R: ?Sized, W: ?Sized>(reader: &mut R, writer: &mut W, upload_max_size: u
} }
} }
fn run_tcp(){ /*
//fn run_tcp() {
fn run_tcp<T: Send + Sync + 'static>(backend: T)
where T: Backend
{
// Bind the server's socket // Bind the server's socket
thread::spawn(|| { thread::spawn(move || {
let backend = &Backend::PlainFile; //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(); let listener = TcpListener::bind("127.0.0.1:12345").unwrap();
loop { loop {
@ -397,9 +387,12 @@ fn run_tcp(){
}); });
} }
*/
fn main() { fn main() {
let backend = Backend::PlainFile; let backend = Box::new(DefaultBackend::default());
run_tcp(); //let tcp_backend = DefaultBackend::default();
rocket().manage(backend).launch(); //run_tcp(tcp_backend);
//run_tcp();
rocket().manage(backend as Box<Backend + 'static>).launch();
} }