winget-cli

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

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 }