aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFuwn <[email protected]>2022-03-26 09:43:42 +0000
committerFuwn <[email protected]>2022-03-26 09:43:42 +0000
commita436ec3dee22fcf58d9ce1e7b6bbba7766aabd79 (patch)
treea0826d014e317753cd580b9f0d56e8c523130e41
parentfeat(response): temporary failure response (diff)
downloadwindmark-a436ec3dee22fcf58d9ce1e7b6bbba7766aabd79.tar.xz
windmark-a436ec3dee22fcf58d9ce1e7b6bbba7766aabd79.zip
feat(response): inputs
-rw-r--r--examples/windmark.rs14
-rw-r--r--src/lib.rs4
-rw-r--r--src/response.rs12
3 files changed, 28 insertions, 2 deletions
diff --git a/examples/windmark.rs b/examples/windmark.rs
index 391b13e..f45c9a7 100644
--- a/examples/windmark.rs
+++ b/examples/windmark.rs
@@ -81,5 +81,19 @@ fn main() -> std::io::Result<()> {
.mount("/param/:lang", |_, _url, dynamic_parameter| {
Response::Success(format!("Parameter lang is {:?}", dynamic_parameter))
})
+ .mount("/input", |_, url, _| {
+ if let Some(name) = url.query() {
+ Response::Success(format!("Your name is {}!", name))
+ } else {
+ Response::Input("What is your name?".into())
+ }
+ })
+ .mount("/sensitive-input", |_, url, _| {
+ if let Some(password) = url.query() {
+ Response::Success(format!("Your password is {}!", password))
+ } else {
+ Response::SensitiveInput("What is your password?".into())
+ }
+ })
.run()
}
diff --git a/src/lib.rs b/src/lib.rs
index f532679..1b17318 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -367,11 +367,11 @@ impl Router {
"{}{}\r\n{}",
response_status,
match response_status {
- 40 | 50 | 51 => &*content,
+ 10 | 11 | 40 | 50 | 51 => &*content,
_ => " text/gemini; charset=utf-8",
},
match response_status {
- 40 | 50 | 51 => "".to_string(),
+ 10 | 11 | 40 | 50 | 51 => "".to_string(),
_ => format!("{}{}{}", header, content, footer),
}
)
diff --git a/src/response.rs b/src/response.rs
index 961cf79..cad2f1a 100644
--- a/src/response.rs
+++ b/src/response.rs
@@ -27,6 +27,8 @@ impl ToString for Header {
}
pub enum Response {
+ Input(String),
+ SensitiveInput(String),
Success(String),
NotFound(String),
TemporaryFailure(String),
@@ -38,6 +40,16 @@ pub(crate) fn to_value_set_status(
status: &mut i32,
) -> String {
match response {
+ Response::Input(value) => {
+ *status = 10;
+
+ value
+ }
+ Response::SensitiveInput(value) => {
+ *status = 11;
+
+ value
+ }
Response::Success(value) => {
*status = 20;