using System.Text.Json; using System.Text.Json.Serialization; namespace View_by_Distance.Shared.Models; public record LocationContainer(DateOnly? CreationDateOnly, ExifDirectory? ExifDirectory, object? Encoding, FaceFile? FaceFile, FilePath FilePath, int? LengthPermyriad, FilePath? LengthSource, PersonKeyFormattedAndKeyTicksAndDisplayDirectoryName? PersonKeyFormattedAndKeyTicksAndDisplayDirectoryName, int? WholePercentages) { public string GetWithoutEncoding() { string result; WithoutEncoding withoutEncoding = new(CreationDateOnly: CreationDateOnly, ExifDirectory: ExifDirectory, FaceFile: FaceFile, FilePath: FilePath, LengthPermyriad: LengthPermyriad, LengthSource: LengthSource, PersonKeyFormattedAndKeyTicksAndDisplayDirectoryName: PersonKeyFormattedAndKeyTicksAndDisplayDirectoryName, WholePercentages: WholePercentages); result = JsonSerializer.Serialize(withoutEncoding, WithoutEncodingSourceGenerationContext.Default.WithoutEncoding); return result; } public static LocationContainer Get(LocationContainer locationContainer, object? encoding) { LocationContainer result; result = new(CreationDateOnly: locationContainer.CreationDateOnly, ExifDirectory: locationContainer.ExifDirectory, Encoding: encoding, FaceFile: locationContainer.FaceFile, FilePath: locationContainer.FilePath, LengthPermyriad: locationContainer.LengthPermyriad, LengthSource: locationContainer.LengthSource, PersonKeyFormattedAndKeyTicksAndDisplayDirectoryName: locationContainer.PersonKeyFormattedAndKeyTicksAndDisplayDirectoryName, WholePercentages: locationContainer.WholePercentages); return result; } public static LocationContainer Get(LocationContainer source, LocationContainer locationContainer, int lengthPermyriad, bool keepExifDirectory, bool keepEncoding) { LocationContainer result; result = new(CreationDateOnly: locationContainer.CreationDateOnly, ExifDirectory: keepExifDirectory ? locationContainer.ExifDirectory : null, Encoding: keepEncoding ? locationContainer.Encoding : null, FaceFile: locationContainer.FaceFile, FilePath: locationContainer.FilePath, LengthPermyriad: lengthPermyriad, LengthSource: source.FilePath, PersonKeyFormattedAndKeyTicksAndDisplayDirectoryName: locationContainer.PersonKeyFormattedAndKeyTicksAndDisplayDirectoryName, WholePercentages: locationContainer.WholePercentages); return result; } } internal record WithoutEncoding(DateOnly? CreationDateOnly, ExifDirectory? ExifDirectory, FaceFile? FaceFile, FilePath FilePath, int? LengthPermyriad, FilePath? LengthSource, PersonKeyFormattedAndKeyTicksAndDisplayDirectoryName? PersonKeyFormattedAndKeyTicksAndDisplayDirectoryName, int? WholePercentages); [JsonSourceGenerationOptions(WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull)] [JsonSerializable(typeof(WithoutEncoding))] internal partial class WithoutEncodingSourceGenerationContext : JsonSerializerContext { }