ConfigurationSetSerializer.h (3187B)
1 // Copyright (c) Microsoft Corporation. 2 // Licensed under the MIT License. 3 #pragma once 4 #include "ConfigurationSetSerializer.h" 5 #include "ConfigurationSetUtilities.h" 6 #include "ConfigurationSet.h" 7 8 #include <winget/Yaml.h> 9 #include <initializer_list> 10 #include <string_view> 11 #include <utility> 12 13 namespace winrt::Microsoft::Management::Configuration::implementation 14 { 15 struct ConfigurationSetSerializer 16 { 17 using OverrideMap = std::vector<std::pair<ConfigurationField, Windows::Foundation::IInspectable>>; 18 19 static std::unique_ptr<ConfigurationSetSerializer> CreateSerializer(hstring version, bool strictVersionMatching = false); 20 21 virtual ~ConfigurationSetSerializer() noexcept = default; 22 23 ConfigurationSetSerializer(const ConfigurationSetSerializer&) = delete; 24 ConfigurationSetSerializer& operator=(const ConfigurationSetSerializer&) = delete; 25 ConfigurationSetSerializer(ConfigurationSetSerializer&&) = default; 26 ConfigurationSetSerializer& operator=(ConfigurationSetSerializer&&) = default; 27 28 // Serializes a configuration set to the original yaml string. 29 virtual hstring Serialize(ConfigurationSet*) = 0; 30 31 // Serialize the metadata with the given environment. 32 virtual std::string SerializeMetadataWithEnvironment(const Windows::Foundation::Collections::ValueSet& metadata, const Configuration::ConfigurationEnvironment& environment) = 0; 33 34 // Serializes a value set only. 35 std::string SerializeValueSet(const Windows::Foundation::Collections::ValueSet& valueSet); 36 37 // Serializes a value set only. 38 std::string SerializeStringArray(const Windows::Foundation::Collections::IVector<hstring>& stringArray); 39 40 protected: 41 ConfigurationSetSerializer() = default; 42 43 static void WriteYamlValueSet(AppInstaller::YAML::Emitter& emitter, const Windows::Foundation::Collections::ValueSet& valueSet, const OverrideMap& overrides = {}); 44 static void WriteYamlValueSetValues(AppInstaller::YAML::Emitter& emitter, const Windows::Foundation::Collections::ValueSet& valueSet, const OverrideMap& overrides = {}); 45 static void WriteYamlValueSetIfNotEmpty(AppInstaller::YAML::Emitter& emitter, ConfigurationField key, const Windows::Foundation::Collections::ValueSet& valueSet, const OverrideMap& overrides = {}); 46 static void WriteYamlValueSetAsArray(AppInstaller::YAML::Emitter& emitter, const Windows::Foundation::Collections::ValueSet& valueSetArray); 47 48 static void WriteYamlStringArray(AppInstaller::YAML::Emitter& emitter, const Windows::Foundation::Collections::IVector<hstring>& values); 49 50 static void WriteYamlValue(AppInstaller::YAML::Emitter& emitter, const winrt::Windows::Foundation::IInspectable& value); 51 static void WriteYamlValueIfNotEmpty(AppInstaller::YAML::Emitter& emitter, ConfigurationField key, const winrt::Windows::Foundation::IInspectable& value); 52 static void WriteYamlStringValueIfNotEmpty(AppInstaller::YAML::Emitter& emitter, ConfigurationField key, hstring value); 53 54 std::wstring_view GetSchemaVersionCommentPrefix(); 55 }; 56 }