ConfigurationSetParser_0_1.cpp (2987B)
1 // Copyright (c) Microsoft Corporation. 2 // Licensed under the MIT License. 3 #include "pch.h" 4 #include "ConfigurationSetParser_0_1.h" 5 #include "ParsingMacros.h" 6 7 #include <AppInstallerErrors.h> 8 #include <AppInstallerStrings.h> 9 10 #include <sstream> 11 12 namespace winrt::Microsoft::Management::Configuration::implementation 13 { 14 using namespace AppInstaller::YAML; 15 16 void ConfigurationSetParser_0_1::Parse() 17 { 18 std::vector<Configuration::ConfigurationUnit> units; 19 const Node& properties = m_document[GetConfigurationFieldName(ConfigurationField::Properties)]; 20 ParseConfigurationUnitsFromField(properties, ConfigurationField::Assertions, ConfigurationUnitIntent::Assert, units); 21 ParseConfigurationUnitsFromField(properties, ConfigurationField::Parameters, ConfigurationUnitIntent::Inform, units); 22 ParseConfigurationUnitsFromField(properties, ConfigurationField::Resources, ConfigurationUnitIntent::Apply, units); 23 24 m_configurationSet = make_self<implementation::ConfigurationSet>(); 25 m_configurationSet->Units(std::move(units)); 26 m_configurationSet->SchemaVersion(GetSchemaVersion()); 27 } 28 29 hstring ConfigurationSetParser_0_1::GetSchemaVersion() 30 { 31 static hstring s_schemaVersion{ L"0.1" }; 32 return s_schemaVersion; 33 } 34 35 void ConfigurationSetParser_0_1::ExtractEnvironmentFromMetadata(Windows::Foundation::Collections::ValueSet, implementation::ConfigurationEnvironment&) 36 { 37 } 38 39 void ConfigurationSetParser_0_1::SetDocument(AppInstaller::YAML::Node&& document) 40 { 41 m_document = std::move(document); 42 } 43 44 void ConfigurationSetParser_0_1::ParseConfigurationUnitsFromField(const Node& document, ConfigurationField field, ConfigurationUnitIntent intent, std::vector<Configuration::ConfigurationUnit>& result) 45 { 46 ParseSequence(document, field, false, Node::Type::Mapping, [&](const Node& item) 47 { 48 auto configurationUnit = make_self<ConfigurationUnit>(); 49 ParseConfigurationUnit(configurationUnit.get(), item, intent); 50 result.emplace_back(*configurationUnit); 51 }); 52 } 53 54 void ConfigurationSetParser_0_1::ParseConfigurationUnit(ConfigurationUnit* unit, const Node& unitNode, ConfigurationUnitIntent intent) 55 { 56 CHECK_ERROR(GetStringValueForUnit(unitNode, ConfigurationField::Resource, true, unit, &ConfigurationUnit::Type)); 57 CHECK_ERROR(GetStringValueForUnit(unitNode, ConfigurationField::Id, false, unit, &ConfigurationUnit::Identifier)); 58 unit->Intent(intent); 59 CHECK_ERROR(GetStringArrayForUnit(unitNode, ConfigurationField::DependsOn, false, unit, &ConfigurationUnit::Dependencies)); 60 CHECK_ERROR(ParseValueSet(unitNode, ConfigurationField::Directives, false, unit->Metadata())); 61 CHECK_ERROR(ParseValueSet(unitNode, ConfigurationField::Settings, false, unit->Settings())); 62 } 63 }