瀏覽代碼

serde's default does not do what we expected for null

Mark Rousskov 5 年之前
父節點
當前提交
4ef3ae95f5
共有 1 個文件被更改,包括 12 次插入1 次删除
  1. 12 1
      src/github.rs

+ 12 - 1
src/github.rs

@@ -138,7 +138,7 @@ pub struct Issue {
 
 #[derive(Debug, serde::Deserialize)]
 pub struct Comment {
-    #[serde(default)]
+    #[serde(deserialize_with = "opt_string")]
     pub body: String,
     pub html_url: String,
     pub user: User,
@@ -146,6 +146,17 @@ pub struct Comment {
     pub updated_at: chrono::DateTime<Utc>,
 }
 
+fn opt_string<'de, D>(deserializer: D) -> Result<String, D::Error>
+where
+    D: serde::de::Deserializer<'de>,
+{
+    use serde::de::Deserialize;
+    match <Option<String>>::deserialize(deserializer) {
+        Ok(v) => Ok(v.unwrap_or_default()),
+        Err(e) => Err(e),
+    }
+}
+
 #[derive(Debug)]
 pub enum AssignmentError {
     InvalidAssignee,