Skip to content

Commit

Permalink
Add header to /range (#325)
Browse files Browse the repository at this point in the history
  • Loading branch information
casey authored Aug 17, 2022
1 parent fac929b commit c03bf98
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 15 deletions.
21 changes: 8 additions & 13 deletions src/subcommand/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use {
self::{
deserialize_ordinal_from_str::DeserializeOrdinalFromStr,
templates::{
block::BlockHtml, ordinal::OrdinalHtml, output::OutputHtml, root::RootHtml,
block::BlockHtml, ordinal::OrdinalHtml, output::OutputHtml, range::RangeHtml, root::RootHtml,
transaction::TransactionHtml, Content,
},
tls_acceptor::TlsAcceptor,
Expand All @@ -16,6 +16,7 @@ use {
AcmeConfig,
},
serde::{de, Deserializer},
std::cmp::Ordering,
tokio_stream::StreamExt,
};

Expand Down Expand Up @@ -203,21 +204,15 @@ impl Server {
(DeserializeOrdinalFromStr, DeserializeOrdinalFromStr),
>,
) -> impl IntoResponse {
if start == end {
return (StatusCode::BAD_REQUEST, Html("Empty Range".to_string()));
}

if start > end {
return (
match start.cmp(&end) {
Ordering::Equal => (StatusCode::BAD_REQUEST, Html("Empty Range".to_string())).into_response(),
Ordering::Greater => (
StatusCode::BAD_REQUEST,
Html("Range Start Greater Than Range End".to_string()),
);
)
.into_response(),
Ordering::Less => RangeHtml { start, end }.page().into_response(),
}

(
StatusCode::OK,
Html(format!("<a href='/ordinal/{start}'>first</a>")),
)
}

async fn root(index: extract::Extension<Arc<Index>>) -> impl IntoResponse {
Expand Down
1 change: 1 addition & 0 deletions src/subcommand/server/templates.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ use {super::*, boilerplate::Display};
pub(crate) mod block;
pub(crate) mod ordinal;
pub(crate) mod output;
pub(crate) mod range;
pub(crate) mod root;
pub(crate) mod transaction;

Expand Down
43 changes: 43 additions & 0 deletions src/subcommand/server/templates/range.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
use super::*;

#[derive(Display)]
pub(crate) struct RangeHtml {
pub(crate) start: Ordinal,
pub(crate) end: Ordinal,
}

impl Content for RangeHtml {
fn title(&self) -> String {
format!("Ordinal range [{},{})", self.start, self.end)
}

fn page(self) -> PageHtml {
PageHtml {
content: Box::new(self),
}
}
}

#[cfg(test)]
mod tests {
use {super::*, pretty_assertions::assert_eq, unindent::Unindent};

#[test]
fn ordinal_html() {
assert_eq!(
RangeHtml {
start: Ordinal(0),
end: Ordinal(1),
}
.to_string(),
"
<h1>Ordinal range [0,1)</h1>
<dl>
<dt>size</dt><dd>1</dd>
<dt>first</dt><dd><a href=/ordinal/0>0</a></dd>
</dl>
"
.unindent()
);
}
}
5 changes: 5 additions & 0 deletions templates/range.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<h1>Ordinal range [{{self.start}},{{self.end}})</h1>
<dl>
<dt>size</dt><dd>{{self.end.n() - self.start.n()}}</dd>
<dt>first</dt><dd><a href=/ordinal/0>{{self.start.n()}}</a></dd>
</dl>
12 changes: 10 additions & 2 deletions tests/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,16 @@ fn empty_range_returns_400() {
}

#[test]
fn range_links_to_first() {
State::new().request("range/0/1", 200, "<a href='/ordinal/0'>first</a>");
fn range() {
State::new().request_regex(
"range/0/1",
200,
r".*<title>Ordinal range \[0,1\)</title>.*<h1>Ordinal range \[0,1\)</h1>
<dl>
<dt>size</dt><dd>1</dd>
<dt>first</dt><dd><a href=/ordinal/0>0</a></dd>
</dl>.*",
);
}

#[test]
Expand Down

0 comments on commit c03bf98

Please sign in to comment.