upstream_rs/providers/github/
github_dtos.rs1use serde::{Deserialize, Deserializer, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
4pub struct GithubAssetDto {
5 pub id: i64,
6 #[serde(default, deserialize_with = "deserialize_nullable_string")]
7 pub name: String,
8 #[serde(default, deserialize_with = "deserialize_nullable_string")]
9 pub browser_download_url: String,
10 pub size: i64,
11 #[serde(default, deserialize_with = "deserialize_nullable_string")]
12 pub content_type: String,
13 #[serde(default, deserialize_with = "deserialize_nullable_string")]
14 pub created_at: String,
15}
16
17#[derive(Debug, Clone, Serialize, Deserialize)]
18pub struct GithubReleaseDto {
19 pub id: i64,
20 #[serde(default, deserialize_with = "deserialize_nullable_string")]
21 pub tag_name: String,
22 #[serde(default, deserialize_with = "deserialize_nullable_string")]
23 pub name: String,
24 #[serde(default, deserialize_with = "deserialize_nullable_string")]
25 pub body: String,
26 pub prerelease: bool,
27 pub draft: bool,
28 #[serde(default, deserialize_with = "deserialize_nullable_string")]
29 pub published_at: String,
30 pub assets: Vec<GithubAssetDto>,
31}
32
33fn deserialize_nullable_string<'de, D>(deserializer: D) -> Result<String, D::Error>
34where
35 D: Deserializer<'de>,
36{
37 Ok(Option::<String>::deserialize(deserializer)?.unwrap_or_default())
38}