Skip to content

Commit

Permalink
Make serialization compatible with trimming
Browse files Browse the repository at this point in the history
  • Loading branch information
jerry08 committed Jun 14, 2024
1 parent 893a7b0 commit 3976803
Show file tree
Hide file tree
Showing 5 changed files with 58 additions and 16 deletions.
10 changes: 8 additions & 2 deletions SoundCloudExplode/Playlists/PlaylistClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,10 @@ public async ValueTask<Playlist> GetAsync(
throw new SoundcloudExplodeException("Invalid playlist url");

var resolvedJson = await endpoint.ResolveUrlAsync(url, cancellationToken);
var playlist = JsonSerializer.Deserialize<Playlist>(resolvedJson)!;
var playlist = JsonSerializer.Deserialize(
resolvedJson,
SourceGenerationContext.Default.Playlist
)!;

if (populateAllTracks)
{
Expand Down Expand Up @@ -119,7 +122,10 @@ public async IAsyncEnumerable<Batch<Track>> GetTrackBatchesAsync(
cancellationToken
);

var tracks = JsonSerializer.Deserialize<List<Track>>(response)!;
var tracks = JsonSerializer.Deserialize(
response,
SourceGenerationContext.Default.ListTrack
)!;
foreach (var track in tracks)
track.PlaylistName = playlist.Title;

Expand Down
15 changes: 11 additions & 4 deletions SoundCloudExplode/Search/SearchClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -95,24 +95,31 @@ permalinkUrl is null
// User result
if (permalinkUri.Segments.Length == 2)
{
var user = JsonSerializer.Deserialize<UserSearchResult>(item.ToString()!)!;
var user = JsonSerializer.Deserialize(
item.ToString()!,
SourceGenerationContext.Default.UserSearchResult
)!;
results.Add(user);
continue;
}

// Track result
if (permalinkUri.Segments.Length == 3)
{
var track = JsonSerializer.Deserialize<TrackSearchResult>(item.ToString()!)!;
var track = JsonSerializer.Deserialize(
item.ToString()!,
SourceGenerationContext.Default.TrackSearchResult
)!;
results.Add(track);
continue;
}

// Playlist/Album result
if (permalinkUri.Segments.Length == 4 && permalinkUri.Segments[2] == "sets/")
{
var playlist = JsonSerializer.Deserialize<PlaylistSearchResult>(
item.ToString()!
var playlist = JsonSerializer.Deserialize(
item.ToString()!,
SourceGenerationContext.Default.PlaylistSearchResult
)!;
results.Add(playlist);
}
Expand Down
18 changes: 18 additions & 0 deletions SoundCloudExplode/SourceGenerationContext.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using System.Collections.Generic;
using System.Text.Json.Serialization;
using SoundCloudExplode.Playlists;
using SoundCloudExplode.Search;
using SoundCloudExplode.Tracks;
using SoundCloudExplode.Users;

namespace SoundCloudExplode;

[JsonSerializable(typeof(Track))]
[JsonSerializable(typeof(Playlist))]
[JsonSerializable(typeof(User))]
[JsonSerializable(typeof(List<Track>))]
[JsonSerializable(typeof(List<Playlist>))]
[JsonSerializable(typeof(TrackSearchResult))]
[JsonSerializable(typeof(PlaylistSearchResult))]
[JsonSerializable(typeof(UserSearchResult))]
internal partial class SourceGenerationContext : JsonSerializerContext;
7 changes: 5 additions & 2 deletions SoundCloudExplode/Tracks/TrackClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ public async Task<bool> IsUrlValidAsync(

var resolvedJson = await endpoint.ResolveUrlAsync(url, cancellationToken);

return JsonSerializer.Deserialize<Track>(resolvedJson)!;
return JsonSerializer.Deserialize(resolvedJson, SourceGenerationContext.Default.Track)!;
}

/// <summary>
Expand All @@ -83,7 +83,10 @@ public async Task<bool> IsUrlValidAsync(
if (trackInfoJson is null)
return null;

var track = JsonSerializer.Deserialize<Track>(trackInfoJson);
var track = JsonSerializer.Deserialize(
trackInfoJson,
SourceGenerationContext.Default.Track
);
return track is null || track.PermalinkUrl is null
? null
: (track.PermalinkUrl?.ToString());
Expand Down
24 changes: 16 additions & 8 deletions SoundCloudExplode/Users/UserClient.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Runtime.CompilerServices;
using System.Text.Json;
Expand Down Expand Up @@ -52,7 +51,7 @@ public async ValueTask<User> GetAsync(string url, CancellationToken cancellation
throw new SoundcloudExplodeException("Invalid user url");

var resolvedJson = await endpoint.ResolveUrlAsync(url, cancellationToken);
return JsonSerializer.Deserialize<User>(resolvedJson)!;
return JsonSerializer.Deserialize(resolvedJson, SourceGenerationContext.Default.User)!;
}

/// <summary>
Expand Down Expand Up @@ -100,8 +99,9 @@ public async IAsyncEnumerable<Batch<Track>> GetTrackBatchesAsync(
break;

if (
JsonSerializer.Deserialize<List<Track>>(collectionStr) is not List<Track> list
|| !list.Any()
JsonSerializer.Deserialize(collectionStr, SourceGenerationContext.Default.ListTrack)
is not List<Track> list
|| list.Count == 0
)
{
break;
Expand Down Expand Up @@ -204,8 +204,12 @@ public async IAsyncEnumerable<Batch<Playlist>> GetPlaylistBatchesAsync(
break;

if (
JsonSerializer.Deserialize<List<Playlist>>(collectionStr) is not List<Playlist> list
|| !list.Any()
JsonSerializer.Deserialize(
collectionStr,
SourceGenerationContext.Default.ListPlaylist
)
is not List<Playlist> list
|| list.Count == 0
)
{
break;
Expand Down Expand Up @@ -280,8 +284,12 @@ public async IAsyncEnumerable<Batch<Playlist>> GetAlbumBatchesAsync(
break;

if (
JsonSerializer.Deserialize<List<Playlist>>(collectionStr) is not List<Playlist> list
|| !list.Any()
JsonSerializer.Deserialize(
collectionStr,
SourceGenerationContext.Default.ListPlaylist
)
is not List<Playlist> list
|| list.Count == 0
)
{
break;
Expand Down

0 comments on commit 3976803

Please sign in to comment.