properly implement trip init & copying trips

This commit is contained in:
2023-09-11 19:39:16 +02:00
parent 5adf39c9e3
commit 008076f6df
6 changed files with 169 additions and 14 deletions

View File

@@ -6,8 +6,10 @@ use axum::{
routing::{get, post},
BoxError, Router,
};
use serde::de;
use uuid::Uuid;
use std::time::Duration;
use std::{fmt, time::Duration};
use tower::{timeout::TimeoutLayer, ServiceBuilder};
use crate::{AppState, Error, RequestError, TopLevelPage};
@@ -31,6 +33,33 @@ fn get_referer(headers: &HeaderMap) -> Result<&str, Error> {
})
}
fn uuid_or_empty<'de, D>(input: D) -> Result<Option<Uuid>, D::Error>
where
D: serde::Deserializer<'de>,
{
struct NoneVisitor;
impl<'vi> de::Visitor<'vi> for NoneVisitor {
type Value = Option<Uuid>;
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
write!(formatter, "invalid input")
}
fn visit_str<E: de::Error>(self, value: &str) -> Result<Self::Value, E> {
if value.is_empty() {
Ok(None)
} else {
Ok(Some(Uuid::try_from(value).map_err(|e| {
E::custom(format!("UUID parsing failed: {}", e))
})?))
}
}
}
input.deserialize_str(NoneVisitor)
}
#[tracing::instrument]
pub fn router(state: AppState) -> Router {
Router::new()