Antares Simulator
Power System Simulator
decoders.hxx
1 /*
2  * Copyright 2007-2025, RTE (https://www.rte-france.com)
3  * See AUTHORS.txt
4  * SPDX-License-Identifier: MPL-2.0
5  * This file is part of Antares-Simulator,
6  * Adequacy and Performance assessment for interconnected energy networks.
7  *
8  * Antares_Simulator is free software: you can redistribute it and/or modify
9  * it under the terms of the Mozilla Public Licence 2.0 as published by
10  * the Mozilla Foundation, either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * Antares_Simulator is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * Mozilla Public Licence 2.0 for more details.
17  *
18  * You should have received a copy of the Mozilla Public Licence 2.0
19  * along with Antares_Simulator. If not, see <https://opensource.org/license/mpl-2-0/>.
20  */
21 
22 #pragma once
23 
24 #include "antares/io/inputs/yml-system/system.h"
25 
26 #include "yaml-cpp/yaml.h"
27 
28 // Implement convert specializations
29 namespace YAML
30 {
31 
42 template<typename T>
43 inline T as_fallback_default(const Node& n)
44 {
45  return n.as<T>(T());
46 }
47 
48 template<>
49 struct convert<Antares::IO::Inputs::YmlSystem::Parameter>
50 {
51  static bool decode(const Node& node, Antares::IO::Inputs::YmlSystem::Parameter& rhs)
52  {
53  if (!node.IsMap())
54  {
55  return false;
56  }
57  rhs.id = node["id"].as<std::string>();
58  rhs.time_dependent = node["time-dependent"].as<bool>();
59  rhs.scenario_dependent = node["scenario-dependent"].as<bool>();
60  rhs.value = node["value"].as<std::string>();
61  return true;
62  }
63 };
64 
65 template<>
66 struct convert<Antares::IO::Inputs::YmlSystem::Component>
67 {
68  static bool decode(const Node& node, Antares::IO::Inputs::YmlSystem::Component& rhs)
69  {
70  if (!node.IsMap())
71  {
72  return false;
73  }
74  rhs.id = node["id"].as<std::string>();
75  rhs.model = node["model"].as<std::string>();
76  rhs.scenarioGroup = node["scenario-group"].as<std::string>("");
77  rhs.parameters = as_fallback_default<
78  std::vector<Antares::IO::Inputs::YmlSystem::Parameter>>(node["parameters"]);
79  return true;
80  }
81 };
82 
83 template<>
84 struct convert<Antares::IO::Inputs::YmlSystem::Connection>
85 {
86  static bool decode(const Node& node, Antares::IO::Inputs::YmlSystem::Connection& rhs)
87  {
88  if (!node.IsMap() || node.size() != 4)
89  {
90  return false;
91  }
92  rhs.firstEntry.componentId = node["component1"].as<std::string>();
93  rhs.firstEntry.portId = node["port1"].as<std::string>();
94 
95  rhs.secondEntry.componentId = node["component2"].as<std::string>();
96  rhs.secondEntry.portId = node["port2"].as<std::string>();
97  return true;
98  }
99 };
100 
101 template<>
102 struct convert<Antares::IO::Inputs::YmlSystem::AreaConnection>
103 {
104  static bool decode(const Node& node, Antares::IO::Inputs::YmlSystem::AreaConnection& rhs)
105  {
106  if (!node.IsMap() || node.size() != 3)
107  {
108  return false;
109  }
110  rhs.componentId = node["component"].as<std::string>();
111  rhs.portId = node["port"].as<std::string>();
112  rhs.areaId = node["area"].as<std::string>();
113  return true;
114  }
115 };
116 
117 template<>
118 struct convert<Antares::IO::Inputs::YmlSystem::System>
119 {
120  static bool decode(const Node& node, Antares::IO::Inputs::YmlSystem::System& rhs)
121  {
122  rhs.id = node["id"].as<std::string>();
123  rhs.libraries = as_fallback_default<std::vector<std::string>>(node["model-libraries"]);
124  rhs.components = as_fallback_default<
125  std::vector<Antares::IO::Inputs::YmlSystem::Component>>(node["components"]);
126  rhs.connections = as_fallback_default<
127  std::vector<Antares::IO::Inputs::YmlSystem::Connection>>(node["connections"]);
128  rhs.areaConnections = as_fallback_default<
129  std::vector<Antares::IO::Inputs::YmlSystem::AreaConnection>>(node["area-connections"]);
130  return true;
131  }
132 };
133 
134 } // namespace YAML