using System.Text.Json; using DotBased.Logging; using DotBased.Monads; using Manager.YouTube.Models; using Manager.YouTube.Models.Parser; using Manager.YouTube.Util.Converters; namespace Manager.YouTube.Parsers.Json; public static class VideoJsonParser { private static readonly JsonSerializerOptions VideoParserOptions = new() { Converters = { new YouTubeVideoJsonConverter() } }; private static readonly ILogger Logger = LogService.RegisterLogger(typeof(VideoJsonParser), "Video JSON parser"); public static Result ParseVideoData(YouTubeVideoData videoData) { if (videoData.YouTubeInitialData == null || videoData.YouTubeInitialData.Count == 0) { return ResultError.Fail("No initial video data found!"); } YouTubeVideo? video; try { video = videoData.YouTubeInitialData.Deserialize(VideoParserOptions); } catch (Exception e) { Logger.Error(e, "Failed to parse video data"); return ResultError.Fail("Failed to parse video data"); } return video != null? video : ResultError.Fail("Failed to parse video data!"); } }