// <auto-generated />
//
// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
//
//    using c3stream;
//
//    var conference = Conference.FromJson(jsonString);

using System;
using System.Collections.Generic;
using System.Globalization;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;

namespace c3stream {
	public partial class Conference {
		[JsonProperty("acronym", NullValueHandling = NullValueHandling.Ignore)]
		public string Acronym { get; set; }

		[JsonProperty("aspect_ratio", NullValueHandling = NullValueHandling.Ignore)]
		public string AspectRatio { get; set; }

		[JsonProperty("updated_at", NullValueHandling = NullValueHandling.Ignore)]
		public DateTimeOffset? UpdatedAt { get; set; }

		[JsonProperty("title", NullValueHandling = NullValueHandling.Ignore)]
		public string Title { get; set; }

		[JsonProperty("schedule_url", NullValueHandling = NullValueHandling.Ignore)]
		public string ScheduleUrl { get; set; }

		[JsonProperty("slug", NullValueHandling = NullValueHandling.Ignore)]
		public string Slug { get; set; }

		[JsonProperty("event_last_released_at", NullValueHandling = NullValueHandling.Ignore)]
		public DateTimeOffset? EventLastReleasedAt { get; set; }

		[JsonProperty("webgen_location", NullValueHandling = NullValueHandling.Ignore)]
		public string WebgenLocation { get; set; }

		[JsonProperty("logo_url", NullValueHandling = NullValueHandling.Ignore)]
		public Uri LogoUrl { get; set; }

		[JsonProperty("images_url", NullValueHandling = NullValueHandling.Ignore)]
		public Uri ImagesUrl { get; set; }

		[JsonProperty("recordings_url", NullValueHandling = NullValueHandling.Ignore)]
		public Uri RecordingsUrl { get; set; }

		[JsonProperty("url", NullValueHandling = NullValueHandling.Ignore)]
		public Uri Url { get; set; }

		[JsonProperty("events", NullValueHandling = NullValueHandling.Ignore)]
		public List<Event> Events { get; set; }
	}

	public class Event {
		[JsonProperty("guid", NullValueHandling = NullValueHandling.Ignore)]
		public Guid? Guid { get; set; }

		[JsonProperty("title", NullValueHandling = NullValueHandling.Ignore)]
		public string Title { get; set; }

		[JsonProperty("subtitle")] public string Subtitle { get; set; }

		[JsonProperty("slug", NullValueHandling = NullValueHandling.Ignore)]
		public string Slug { get; set; }

		[JsonProperty("link", NullValueHandling = NullValueHandling.Ignore)]
		public Uri Link { get; set; }

		[JsonProperty("description")] public string Description { get; set; }

		[JsonProperty("original_language", NullValueHandling = NullValueHandling.Ignore)]
		public string OriginalLanguage { get; set; }

		[JsonProperty("persons", NullValueHandling = NullValueHandling.Ignore)]
		public List<string> Persons { get; set; }

		[JsonProperty("tags", NullValueHandling = NullValueHandling.Ignore)]
		public List<string> Tags { get; set; }

		[JsonProperty("view_count", NullValueHandling = NullValueHandling.Ignore)]
		public long? ViewCount { get; set; }

		[JsonProperty("promoted", NullValueHandling = NullValueHandling.Ignore)]
		public bool? Promoted { get; set; }

		[JsonProperty("date", NullValueHandling = NullValueHandling.Ignore)]
		public DateTimeOffset? Date { get; set; }

		[JsonProperty("release_date", NullValueHandling = NullValueHandling.Ignore)]
		public DateTimeOffset? ReleaseDate { get; set; }

		[JsonProperty("updated_at", NullValueHandling = NullValueHandling.Ignore)]
		public DateTimeOffset? UpdatedAt { get; set; }

		[JsonProperty("length", NullValueHandling = NullValueHandling.Ignore)]
		public long? Length { get; set; }

		[JsonProperty("duration", NullValueHandling = NullValueHandling.Ignore)]
		public long? Duration { get; set; }

		[JsonProperty("thumb_url", NullValueHandling = NullValueHandling.Ignore)]
		public Uri ThumbUrl { get; set; }

		[JsonProperty("poster_url", NullValueHandling = NullValueHandling.Ignore)]
		public Uri PosterUrl { get; set; }

		[JsonProperty("timeline_url", NullValueHandling = NullValueHandling.Ignore)]
		public Uri TimelineUrl { get; set; }

		[JsonProperty("thumbnails_url", NullValueHandling = NullValueHandling.Ignore)]
		public Uri ThumbnailsUrl { get; set; }

		[JsonProperty("frontend_link", NullValueHandling = NullValueHandling.Ignore)]
		public Uri FrontendLink { get; set; }

		[JsonProperty("url", NullValueHandling = NullValueHandling.Ignore)]
		public Uri Url { get; set; }

		[JsonProperty("conference_url", NullValueHandling = NullValueHandling.Ignore)]
		public Uri ConferenceUrl { get; set; }

		[JsonProperty("related", NullValueHandling = NullValueHandling.Ignore)]
		public List<object> Related { get; set; }
	}

	public partial class Conference {
		public static Conference FromJson(string json) => JsonConvert.DeserializeObject<Conference>(json, Converter.Settings);
	}

	public static partial class Serialize {
		public static string ToJson(this Conference self) => JsonConvert.SerializeObject(self, Converter.Settings);
	}

	internal static class Converter {
		public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings {
			MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
			DateParseHandling        = DateParseHandling.None,
			Converters               = {new IsoDateTimeConverter {DateTimeStyles = DateTimeStyles.AssumeUniversal}}
		};
	}

	public partial class Talk {
		[JsonProperty("guid", NullValueHandling = NullValueHandling.Ignore)]
		public Guid? Guid { get; set; }

		[JsonProperty("title", NullValueHandling = NullValueHandling.Ignore)]
		public string Title { get; set; }

		[JsonProperty("subtitle", NullValueHandling = NullValueHandling.Ignore)]
		public string Subtitle { get; set; }

		[JsonProperty("slug", NullValueHandling = NullValueHandling.Ignore)]
		public string Slug { get; set; }

		[JsonProperty("link", NullValueHandling = NullValueHandling.Ignore)]
		public Uri Link { get; set; }

		[JsonProperty("description", NullValueHandling = NullValueHandling.Ignore)]
		public string Description { get; set; }

		[JsonProperty("original_language", NullValueHandling = NullValueHandling.Ignore)]
		public string OriginalLanguage { get; set; }

		[JsonProperty("persons", NullValueHandling = NullValueHandling.Ignore)]
		public List<string> Persons { get; set; }

		[JsonProperty("tags", NullValueHandling = NullValueHandling.Ignore)]
		public List<string> Tags { get; set; }

		[JsonProperty("view_count", NullValueHandling = NullValueHandling.Ignore)]
		public long? ViewCount { get; set; }

		[JsonProperty("promoted", NullValueHandling = NullValueHandling.Ignore)]
		public bool? Promoted { get; set; }

		[JsonProperty("date", NullValueHandling = NullValueHandling.Ignore)]
		public DateTimeOffset? Date { get; set; }

		[JsonProperty("release_date", NullValueHandling = NullValueHandling.Ignore)]
		public DateTimeOffset? ReleaseDate { get; set; }

		[JsonProperty("updated_at", NullValueHandling = NullValueHandling.Ignore)]
		public DateTimeOffset? UpdatedAt { get; set; }

		[JsonProperty("length", NullValueHandling = NullValueHandling.Ignore)]
		public long? Length { get; set; }

		[JsonProperty("duration", NullValueHandling = NullValueHandling.Ignore)]
		public long? Duration { get; set; }

		[JsonProperty("thumb_url", NullValueHandling = NullValueHandling.Ignore)]
		public Uri ThumbUrl { get; set; }

		[JsonProperty("poster_url", NullValueHandling = NullValueHandling.Ignore)]
		public Uri PosterUrl { get; set; }

		[JsonProperty("timeline_url", NullValueHandling = NullValueHandling.Ignore)]
		public Uri TimelineUrl { get; set; }

		[JsonProperty("thumbnails_url", NullValueHandling = NullValueHandling.Ignore)]
		public Uri ThumbnailsUrl { get; set; }

		[JsonProperty("frontend_link", NullValueHandling = NullValueHandling.Ignore)]
		public Uri FrontendLink { get; set; }

		[JsonProperty("url", NullValueHandling = NullValueHandling.Ignore)]
		public Uri Url { get; set; }

		[JsonProperty("conference_url", NullValueHandling = NullValueHandling.Ignore)]
		public Uri ConferenceUrl { get; set; }

		[JsonProperty("related", NullValueHandling = NullValueHandling.Ignore)]
		public List<object> Related { get; set; }

		[JsonProperty("recordings", NullValueHandling = NullValueHandling.Ignore)]
		public List<Recording> Recordings { get; set; }
	}

	public class Recording {
		[JsonProperty("size", NullValueHandling = NullValueHandling.Ignore)]
		public long? Size { get; set; }

		[JsonProperty("length", NullValueHandling = NullValueHandling.Ignore)]
		public long? Length { get; set; }

		[JsonProperty("mime_type", NullValueHandling = NullValueHandling.Ignore)]
		public string MimeType { get; set; }

		[JsonProperty("language", NullValueHandling = NullValueHandling.Ignore)]
		public string Language { get; set; }

		[JsonProperty("filename", NullValueHandling = NullValueHandling.Ignore)]
		public string Filename { get; set; }

		[JsonProperty("state", NullValueHandling = NullValueHandling.Ignore)]
		public string State { get; set; }

		[JsonProperty("folder", NullValueHandling = NullValueHandling.Ignore)]
		public string Folder { get; set; }

		[JsonProperty("high_quality", NullValueHandling = NullValueHandling.Ignore)]
		public bool? HighQuality { get; set; }

		[JsonProperty("width", NullValueHandling = NullValueHandling.Ignore)]
		public long? Width { get; set; }

		[JsonProperty("height", NullValueHandling = NullValueHandling.Ignore)]
		public long? Height { get; set; }

		[JsonProperty("updated_at", NullValueHandling = NullValueHandling.Ignore)]
		public DateTimeOffset? UpdatedAt { get; set; }

		[JsonProperty("recording_url", NullValueHandling = NullValueHandling.Ignore)]
		public Uri RecordingUrl { get; set; }

		[JsonProperty("url", NullValueHandling = NullValueHandling.Ignore)]
		public Uri Url { get; set; }

		[JsonProperty("event_url", NullValueHandling = NullValueHandling.Ignore)]
		public Uri EventUrl { get; set; }

		[JsonProperty("conference_url", NullValueHandling = NullValueHandling.Ignore)]
		public Uri ConferenceUrl { get; set; }
	}

	public partial class Talk {
		public static Talk FromJson(string json) => JsonConvert.DeserializeObject<Talk>(json, Converter.Settings);
	}

	public static partial class Serialize {
		public static string ToJson(this Talk self) => JsonConvert.SerializeObject(self, Converter.Settings);
	}
}