mirror of
https://github.com/Steffo99/todocolors.git
synced 2024-11-22 00:04:18 +00:00
Kebabify board names in the backend
This commit is contained in:
parent
905a5899a0
commit
88b3ab1674
3 changed files with 65 additions and 0 deletions
59
todored/src/kebab.rs
Normal file
59
todored/src/kebab.rs
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
//! Module defining and implementing the [`Skewer`] trait.
|
||||||
|
|
||||||
|
use regex::Regex;
|
||||||
|
|
||||||
|
|
||||||
|
/// Trait to skewer strings into `UPPER-KEBAB-CASE` or `lower-kebab-case`.
|
||||||
|
pub trait Skewer {
|
||||||
|
/// Replace the non-alphanumeric characters of the string with dashes.
|
||||||
|
fn to_kebab_anycase(&self) -> String;
|
||||||
|
/// Lowercase the string, then [kebabify](to_kebab_anycase) it.
|
||||||
|
fn to_kebab_lowercase(&self) -> String;
|
||||||
|
/// Uppercase the string, then [kebabify](to_kebab_anycase) it.
|
||||||
|
fn to_kebab_uppercase(&self) -> String;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Skewer for &str {
|
||||||
|
fn to_kebab_anycase(&self) -> String {
|
||||||
|
lazy_static::lazy_static! {
|
||||||
|
static ref INVALID_CHARACTERS_REGEX: Regex = Regex::new(r#"[^A-Za-z0-9-]"#)
|
||||||
|
.expect("INVALID_CHARACTERS_REGEX to be valid");
|
||||||
|
}
|
||||||
|
|
||||||
|
log::trace!("Kebab-ifying: {self:?}");
|
||||||
|
let kebab = INVALID_CHARACTERS_REGEX.replace_all(self, "-").into_owned();
|
||||||
|
log::trace!("Kebab-ification complete: {kebab:?}");
|
||||||
|
|
||||||
|
kebab
|
||||||
|
}
|
||||||
|
|
||||||
|
fn to_kebab_lowercase(&self) -> String {
|
||||||
|
log::trace!("Kebab-i-lower-fying: {self:?}");
|
||||||
|
let kebab = self.to_ascii_lowercase().as_str().to_kebab_anycase();
|
||||||
|
log::trace!("Kebab-i-lower-ification complete: {kebab:?}");
|
||||||
|
|
||||||
|
kebab
|
||||||
|
}
|
||||||
|
|
||||||
|
fn to_kebab_uppercase(&self) -> String {
|
||||||
|
log::trace!("Kebab-i-lower-fying: {self:?}");
|
||||||
|
let kebab = self.to_ascii_uppercase().as_str().to_kebab_anycase();
|
||||||
|
log::trace!("Kebab-i-lower-ification complete: {kebab:?}");
|
||||||
|
|
||||||
|
kebab
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Skewer for String {
|
||||||
|
fn to_kebab_anycase(&self) -> String {
|
||||||
|
self.as_str().to_kebab_anycase()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn to_kebab_lowercase(&self) -> String {
|
||||||
|
self.as_str().to_kebab_lowercase()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn to_kebab_uppercase(&self) -> String {
|
||||||
|
self.as_str().to_kebab_uppercase()
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,6 +6,7 @@ pub mod outcome;
|
||||||
pub mod task;
|
pub mod task;
|
||||||
pub(crate) mod config;
|
pub(crate) mod config;
|
||||||
mod routes;
|
mod routes;
|
||||||
|
pub mod kebab;
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() {
|
async fn main() {
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
use axum::Extension;
|
use axum::Extension;
|
||||||
use axum::extract::{Path, WebSocketUpgrade};
|
use axum::extract::{Path, WebSocketUpgrade};
|
||||||
|
use crate::kebab::Skewer;
|
||||||
use super::ws;
|
use super::ws;
|
||||||
|
|
||||||
pub(crate) async fn handler(
|
pub(crate) async fn handler(
|
||||||
|
@ -7,6 +8,10 @@ pub(crate) async fn handler(
|
||||||
Extension(rclient): Extension<redis::Client>,
|
Extension(rclient): Extension<redis::Client>,
|
||||||
upgrade_request: WebSocketUpgrade,
|
upgrade_request: WebSocketUpgrade,
|
||||||
) -> axum::response::Response {
|
) -> axum::response::Response {
|
||||||
|
log::trace!("Kebabifying board name...");
|
||||||
|
let board = board.to_kebab_lowercase();
|
||||||
|
log::trace!("Kebabified board name to: {board:?}");
|
||||||
|
|
||||||
log::trace!("Received websocket request, upgrading...");
|
log::trace!("Received websocket request, upgrading...");
|
||||||
upgrade_request.on_upgrade(|websocket| ws::handler(board, rclient, websocket))
|
upgrade_request.on_upgrade(|websocket| ws::handler(board, rclient, websocket))
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue