Rocket/examples/form_kitchen_sink/src/main.rs

61 lines
1.3 KiB
Rust
Raw Normal View History

2016-09-29 02:31:26 +00:00
#![feature(plugin, custom_derive)]
#![plugin(rocket_codegen)]
extern crate rocket;
use std::io;
use rocket::request::{Form, FromFormValue};
2016-09-29 02:31:26 +00:00
use rocket::response::NamedFile;
use rocket::http::RawStr;
2016-09-29 02:31:26 +00:00
// TODO: Make deriving `FromForm` for this enum possible.
#[derive(Debug)]
enum FormOption {
A, B, C
}
impl<'v> FromFormValue<'v> for FormOption {
type Error = &'v RawStr;
2016-09-29 02:31:26 +00:00
fn from_form_value(v: &'v RawStr) -> Result<Self, Self::Error> {
let variant = match v.as_str() {
2016-09-29 02:31:26 +00:00
"a" => FormOption::A,
"b" => FormOption::B,
"c" => FormOption::C,
_ => return Err(v)
};
Ok(variant)
}
}
#[derive(Debug, FromForm)]
struct FormInput {
2016-09-29 02:31:26 +00:00
checkbox: bool,
number: usize,
radio: FormOption,
password: String,
2016-09-29 02:31:26 +00:00
textarea: String,
select: FormOption,
}
#[post("/", data = "<sink>")]
fn sink(sink: Result<Form<FormInput>, Option<String>>) -> String {
match sink {
Ok(form) => format!("{:?}", form.get()),
Err(Some(f)) => format!("Invalid form input: {}", f),
Err(None) => format!("Form input was invalid UTF8."),
}
2016-09-29 02:31:26 +00:00
}
#[get("/")]
fn index() -> io::Result<NamedFile> {
NamedFile::open("static/index.html")
}
fn main() {
rocket::ignite()
.mount("/", routes![index, sink])
.launch();
2016-09-29 02:31:26 +00:00
}