Skip to content

Instantly share code, notes, and snippets.

@asaaki
Created November 17, 2025 18:01
Show Gist options
  • Select an option

  • Save asaaki/202793a713a6b6bbdc0284a22fbf8e17 to your computer and use it in GitHub Desktop.

Select an option

Save asaaki/202793a713a6b6bbdc0284a22fbf8e17 to your computer and use it in GitHub Desktop.
rust serde skip_null_values helper
fn skip_null_values<S, K, M>(map: &M, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
K: serde::Serialize,
M: ?Sized,
for<'a> &'a M: IntoIterator<Item = (&'a K, &'a Value)>,
{
use serde::ser::SerializeMap;
let mut ser_map = serializer.serialize_map(None)?;
for (k, v) in map {
if !v.is_null() {
ser_map.serialize_entry(k, v)?;
}
}
ser_map.end()
}
@asaaki
Copy link
Author

asaaki commented Nov 17, 2025

Usage:

#[derive(serde::Serialize, serde::Deserialize)]
struct User {
    id: String,
    username: String,

    #[serde(flatten, serialize_with = "skip_null_values")]
    extra: std::collections::HashMap<String, serde_json::Value>,
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment