SettingsSerializationContext.cs
1 // Copyright (c) Microsoft Corporation 2 // The Microsoft Corporation licenses this file to you under the MIT license. 3 // See the LICENSE file in the project root for more information. 4 5 using System.Collections.Generic; 6 using System.Text.Json.Serialization; 7 using PowerDisplay.Common.Models; 8 using SettingsUILibrary = Settings.UI.Library; 9 using SettingsUILibraryHelpers = Settings.UI.Library.Helpers; 10 11 namespace Microsoft.PowerToys.Settings.UI.Library 12 { 13 /// <summary> 14 /// JSON serialization context for Native AOT compatibility. 15 /// This context provides source-generated serialization for all PowerToys settings types. 16 /// </summary> 17 /// <remarks> 18 /// <para><strong>⚠️ CRITICAL REQUIREMENT FOR ALL NEW SETTINGS CLASSES ⚠️</strong></para> 19 /// <para> 20 /// When adding a new PowerToys module or any class that inherits from <see cref="BasePTModuleSettings"/>, 21 /// you <strong>MUST</strong> add a <c>[JsonSerializable(typeof(YourNewSettingsClass))]</c> attribute 22 /// to this class. This is a MANDATORY step for Native AOT compatibility. 23 /// </para> 24 /// <para><strong>Steps to add a new settings class:</strong></para> 25 /// <list type="number"> 26 /// <item><description>Create your new settings class (e.g., <c>MyNewModuleSettings</c>) that inherits from <see cref="BasePTModuleSettings"/></description></item> 27 /// <item><description>Add <c>[JsonSerializable(typeof(MyNewModuleSettings))]</c> attribute to this <see cref="SettingsSerializationContext"/> class</description></item> 28 /// <item><description>If you have a corresponding Properties class, also add <c>[JsonSerializable(typeof(MyNewModuleProperties))]</c></description></item> 29 /// <item><description>Rebuild the project - source generator will create serialization code at compile time</description></item> 30 /// </list> 31 /// <para><strong>⚠️ Failure to register types will cause runtime errors:</strong></para> 32 /// <para> 33 /// If you forget to add the <c>[JsonSerializable]</c> attribute, calling <c>ToJsonString()</c> or 34 /// deserialization methods will throw <see cref="InvalidOperationException"/> at runtime with a clear 35 /// error message indicating which type is missing registration. 36 /// </para> 37 /// </remarks> 38 [JsonSourceGenerationOptions( 39 WriteIndented = false, 40 DefaultIgnoreCondition = JsonIgnoreCondition.Never, 41 IncludeFields = true)] 42 43 // Main Settings Classes 44 [JsonSerializable(typeof(GeneralSettings))] 45 [JsonSerializable(typeof(OutGoingGeneralSettings))] 46 [JsonSerializable(typeof(AdvancedPasteSettings))] 47 [JsonSerializable(typeof(AlwaysOnTopSettings))] 48 [JsonSerializable(typeof(AwakeSettings))] 49 [JsonSerializable(typeof(CmdNotFoundSettings))] 50 [JsonSerializable(typeof(ColorPickerSettings))] 51 [JsonSerializable(typeof(ColorPickerSettingsVersion1))] 52 [JsonSerializable(typeof(CropAndLockSettings))] 53 [JsonSerializable(typeof(CursorWrapSettings))] 54 [JsonSerializable(typeof(EnvironmentVariablesSettings))] 55 [JsonSerializable(typeof(FancyZonesSettings))] 56 [JsonSerializable(typeof(FileLocksmithSettings))] 57 [JsonSerializable(typeof(FindMyMouseSettings))] 58 [JsonSerializable(typeof(HostsSettings))] 59 [JsonSerializable(typeof(ImageResizerSettings))] 60 [JsonSerializable(typeof(KeyboardManagerSettings))] 61 [JsonSerializable(typeof(LightSwitchSettings))] 62 [JsonSerializable(typeof(MeasureToolSettings))] 63 [JsonSerializable(typeof(MouseHighlighterSettings))] 64 [JsonSerializable(typeof(MouseJumpSettings))] 65 [JsonSerializable(typeof(MousePointerCrosshairsSettings))] 66 [JsonSerializable(typeof(MouseWithoutBordersSettings))] 67 [JsonSerializable(typeof(NewPlusSettings))] 68 [JsonSerializable(typeof(PeekSettings))] 69 [JsonSerializable(typeof(PowerAccentSettings))] 70 [JsonSerializable(typeof(PowerDisplaySettings))] 71 [JsonSerializable(typeof(PowerLauncherSettings))] 72 [JsonSerializable(typeof(PowerOcrSettings))] 73 [JsonSerializable(typeof(PowerPreviewSettings))] 74 [JsonSerializable(typeof(PowerRenameSettings))] 75 [JsonSerializable(typeof(RegistryPreviewSettings))] 76 [JsonSerializable(typeof(ShortcutGuideSettings))] 77 [JsonSerializable(typeof(WorkspacesSettings))] 78 [JsonSerializable(typeof(ZoomItSettings))] 79 80 // Properties Classes 81 [JsonSerializable(typeof(AdvancedPasteProperties))] 82 [JsonSerializable(typeof(AlwaysOnTopProperties))] 83 [JsonSerializable(typeof(AwakeProperties))] 84 [JsonSerializable(typeof(CmdPalProperties))] 85 [JsonSerializable(typeof(ColorPickerProperties))] 86 [JsonSerializable(typeof(ColorPickerPropertiesVersion1))] 87 [JsonSerializable(typeof(CropAndLockProperties))] 88 [JsonSerializable(typeof(CursorWrapProperties))] 89 [JsonSerializable(typeof(EnvironmentVariablesProperties))] 90 [JsonSerializable(typeof(FileLocksmithProperties))] 91 [JsonSerializable(typeof(FileLocksmithLocalProperties))] 92 [JsonSerializable(typeof(FindMyMouseProperties))] 93 [JsonSerializable(typeof(FZConfigProperties))] 94 [JsonSerializable(typeof(HostsProperties))] 95 [JsonSerializable(typeof(ImageResizerProperties))] 96 [JsonSerializable(typeof(KeyboardManagerProperties))] 97 [JsonSerializable(typeof(KeyboardManagerProfile))] 98 [JsonSerializable(typeof(LightSwitchProperties))] 99 [JsonSerializable(typeof(MeasureToolProperties))] 100 [JsonSerializable(typeof(MouseHighlighterProperties))] 101 [JsonSerializable(typeof(MouseJumpProperties))] 102 [JsonSerializable(typeof(MousePointerCrosshairsProperties))] 103 [JsonSerializable(typeof(MouseWithoutBordersProperties))] 104 [JsonSerializable(typeof(NewPlusProperties))] 105 [JsonSerializable(typeof(PeekProperties))] 106 [JsonSerializable(typeof(SettingsUILibrary.PeekPreviewSettings))] 107 [JsonSerializable(typeof(PowerAccentProperties))] 108 [JsonSerializable(typeof(PowerDisplayProperties))] 109 [JsonSerializable(typeof(PowerLauncherProperties))] 110 [JsonSerializable(typeof(PowerOcrProperties))] 111 [JsonSerializable(typeof(PowerPreviewProperties))] 112 [JsonSerializable(typeof(PowerRenameProperties))] 113 [JsonSerializable(typeof(PowerRenameLocalProperties))] 114 [JsonSerializable(typeof(RegistryPreviewProperties))] 115 [JsonSerializable(typeof(ShortcutConflictProperties))] 116 [JsonSerializable(typeof(ShortcutGuideProperties))] 117 [JsonSerializable(typeof(WorkspacesProperties))] 118 [JsonSerializable(typeof(ZoomItProperties))] 119 120 // Base Property Types (used throughout settings) 121 [JsonSerializable(typeof(BoolProperty))] 122 [JsonSerializable(typeof(StringProperty))] 123 [JsonSerializable(typeof(IntProperty))] 124 [JsonSerializable(typeof(DoubleProperty))] 125 126 // Helper and Utility Types 127 [JsonSerializable(typeof(HotkeySettings))] 128 [JsonSerializable(typeof(ColorFormatModel))] 129 [JsonSerializable(typeof(ImageSize))] 130 [JsonSerializable(typeof(KeysDataModel))] 131 [JsonSerializable(typeof(EnabledModules))] 132 [JsonSerializable(typeof(GeneralSettingsCustomAction))] 133 [JsonSerializable(typeof(OutGoingGeneralSettings))] 134 [JsonSerializable(typeof(OutGoingLanguageSettings))] 135 [JsonSerializable(typeof(AdvancedPasteCustomActions))] 136 [JsonSerializable(typeof(AdvancedPasteAdditionalActions))] 137 [JsonSerializable(typeof(AdvancedPasteCustomAction))] 138 [JsonSerializable(typeof(AdvancedPasteAdditionalAction))] 139 [JsonSerializable(typeof(AdvancedPastePasteAsFileAction))] 140 [JsonSerializable(typeof(AdvancedPasteTranscodeAction))] 141 [JsonSerializable(typeof(ImageResizerSizes))] 142 [JsonSerializable(typeof(ImageResizerCustomSizeProperty))] 143 [JsonSerializable(typeof(KeyboardKeysProperty))] 144 [JsonSerializable(typeof(MonitorInfo))] 145 [JsonSerializable(typeof(PowerDisplayActionMessage))] 146 [JsonSerializable(typeof(PowerDisplayActionMessage.ActionData))] 147 [JsonSerializable(typeof(PowerDisplayActionMessage.PowerDisplayAction))] 148 [JsonSerializable(typeof(VcpCodeDisplayInfo))] 149 [JsonSerializable(typeof(VcpValueInfo))] 150 [JsonSerializable(typeof(List<string>))] 151 [JsonSerializable(typeof(List<MonitorInfo>))] 152 [JsonSerializable(typeof(List<VcpCodeDisplayInfo>))] 153 [JsonSerializable(typeof(List<VcpValueInfo>))] 154 [JsonSerializable(typeof(SettingsUILibraryHelpers.SearchLocation))] 155 156 // AdvancedPaste AI Provider Types (for AOT compatibility) 157 [JsonSerializable(typeof(PasteAIConfiguration))] 158 [JsonSerializable(typeof(PasteAIProviderDefinition))] 159 [JsonSerializable(typeof(System.Collections.ObjectModel.ObservableCollection<PasteAIProviderDefinition>))] 160 161 // PowerDisplay Profile Types (for AOT compatibility) 162 [JsonSerializable(typeof(PowerDisplayProfile))] 163 [JsonSerializable(typeof(List<PowerDisplayProfile>))] 164 [JsonSerializable(typeof(PowerDisplayProfiles))] 165 [JsonSerializable(typeof(ProfileMonitorSetting))] 166 [JsonSerializable(typeof(List<ProfileMonitorSetting>))] 167 168 // IPC Send Message Wrapper Classes (Snd*) 169 [JsonSerializable(typeof(SndAwakeSettings))] 170 [JsonSerializable(typeof(SndCursorWrapSettings))] 171 [JsonSerializable(typeof(SndFindMyMouseSettings))] 172 [JsonSerializable(typeof(SndLightSwitchSettings))] 173 [JsonSerializable(typeof(SndMouseHighlighterSettings))] 174 [JsonSerializable(typeof(SndMouseJumpSettings))] 175 [JsonSerializable(typeof(SndMousePointerCrosshairsSettings))] 176 [JsonSerializable(typeof(SndPowerAccentSettings))] 177 [JsonSerializable(typeof(SndPowerPreviewSettings))] 178 [JsonSerializable(typeof(SndPowerRenameSettings))] 179 [JsonSerializable(typeof(SndShortcutGuideSettings))] 180 181 // IPC Message Generic Wrapper Types (SndModuleSettings<T>) 182 [JsonSerializable(typeof(SndModuleSettings<SndAwakeSettings>))] 183 [JsonSerializable(typeof(SndModuleSettings<SndCursorWrapSettings>))] 184 [JsonSerializable(typeof(SndModuleSettings<SndFindMyMouseSettings>))] 185 [JsonSerializable(typeof(SndModuleSettings<SndLightSwitchSettings>))] 186 [JsonSerializable(typeof(SndModuleSettings<SndMouseHighlighterSettings>))] 187 [JsonSerializable(typeof(SndModuleSettings<SndMouseJumpSettings>))] 188 [JsonSerializable(typeof(SndModuleSettings<SndMousePointerCrosshairsSettings>))] 189 [JsonSerializable(typeof(SndModuleSettings<SndPowerAccentSettings>))] 190 [JsonSerializable(typeof(SndModuleSettings<SndPowerPreviewSettings>))] 191 [JsonSerializable(typeof(SndModuleSettings<SndPowerRenameSettings>))] 192 [JsonSerializable(typeof(SndModuleSettings<SndShortcutGuideSettings>))] 193 194 public partial class SettingsSerializationContext : JsonSerializerContext 195 { 196 } 197 }