При этом десериализаторы писать элементарно, они автоматом фактически делаются.
fn deserialize_language_identifier<'de, D>(deserializer: D) -> Result<LanguageIdentifier, D::Error>
where
D: Deserializer<'de>,
{
let s: String = Deserialize::deserialize(deserializer)?;
s.parse().map_err(serde::de::Error::custom)
}
Может и макрос для совсем автомата накатать или найти.
Но serde сериализация и обратно и так для почти всех типов есть или ее можно легко сделать. Я десериализатор написал только что бы оперток не плодить