diff options
Diffstat (limited to 'src/modules')
| -rw-r--r-- | src/modules/finger.rs | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/src/modules/finger.rs b/src/modules/finger.rs index de1eee9..99fecc5 100644 --- a/src/modules/finger.rs +++ b/src/modules/finger.rs @@ -60,9 +60,30 @@ To visit my personal Finger server, <finger://fuwn.me>, you would visit <gemini: }; #[allow(unsafe_code)] - response.push_str(unsafe { - &std::str::from_utf8_unchecked(&buffer[..bytes_read]) - .replace("finger://", "gemini://fuwn.me/finger/") + response.push_str(&unsafe { + let content = std::str::from_utf8_unchecked(&buffer[..bytes_read]) + .replace("finger://", "gemini://fuwn.me/finger/"); + let mut lines = content.lines().peekable(); + let mut result = String::new(); + + while let Some(line) = lines.next() { + if !line.is_empty() { + result.push_str(line); + + if lines + .peek() + .map_or(false, |&next_line| !next_line.is_empty()) + { + result.push(' '); + } else { + result.push('\n'); + } + } else { + result.push('\n'); + } + } + + result }); } |