feat: serve gopher with dot-stuffing and a synthetic root menu
This commit is contained in:
parent
1de4674b09
commit
dc2114a4d2
8 changed files with 334 additions and 11 deletions
|
|
@ -125,6 +125,15 @@ impl Protocol {
|
|||
pub fn negotiates(self) -> bool {
|
||||
matches!(self, Protocol::Http)
|
||||
}
|
||||
|
||||
/// Whether a listener exists for this protocol.
|
||||
///
|
||||
/// Gemini needs a TLS stack and per-host certificate selection, which is its
|
||||
/// own piece of work; naming it in a configuration is refused here rather
|
||||
/// than panicking on the first connection.
|
||||
pub fn is_implemented(self) -> bool {
|
||||
!matches!(self, Protocol::Gemini)
|
||||
}
|
||||
}
|
||||
|
||||
/// What validation established, and what `--check` prints.
|
||||
|
|
@ -254,6 +263,12 @@ impl ServerConfig {
|
|||
fn validate_listeners(&self, available: &[&str]) -> Result<BTreeSet<String>, Error> {
|
||||
let mut formats = BTreeSet::new();
|
||||
for (name, spec) in &self.listener {
|
||||
if !spec.protocol.is_implemented() {
|
||||
return Err(Error::config(format!(
|
||||
"listener '{name}': {} is not implemented yet",
|
||||
spec.protocol.as_str()
|
||||
)));
|
||||
}
|
||||
if spec.formats.is_empty() {
|
||||
return Err(Error::config(format!("listener '{name}': formats must not be empty")));
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue