From 0f3c29d7d499e61350c1cb935d25f98bf7dea121 Mon Sep 17 00:00:00 2001 From: jzitnik-dev Date: Tue, 2 Jun 2026 10:12:59 +0200 Subject: [PATCH] fix: Random mrdka --- src/management/mod.rs | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/management/mod.rs b/src/management/mod.rs index b0f3412..999b4a2 100644 --- a/src/management/mod.rs +++ b/src/management/mod.rs @@ -239,7 +239,7 @@ struct CreateInput { text_content: String, start_date: String, end_date: String, - #[serde(default)] + #[serde(default, deserialize_with = "one_or_many")] flags: Vec, } @@ -325,6 +325,24 @@ async fn delete_announcement( // ── Helpers ─────────────────────────────────────────────────────────────────── +fn one_or_many<'de, D: serde::Deserializer<'de>>(d: D) -> Result, D::Error> { + use serde::de; + struct OneOrMany; + impl<'de> de::Visitor<'de> for OneOrMany { + type Value = Vec; + fn expecting(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + f.write_str("a string or list of strings") + } + fn visit_str(self, v: &str) -> Result, E> { + Ok(vec![v.to_owned()]) + } + fn visit_seq>(self, seq: A) -> Result, A::Error> { + de::Deserialize::deserialize(de::value::SeqAccessDeserializer::new(seq)) + } + } + d.deserialize_any(OneOrMany) +} + fn escape_html(s: &str) -> String { s.replace('&', "&") .replace('<', "<")