Skip to main content

upstream_rs/providers/github/
github_dtos.rs

1use 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}