Skip to content

Commit 35a8512

Browse files
committed
feat: improved support of fields of type 'any'
Currently, types of 'any' are simply ignored when generating output. This improves the handling of 'any' by adding explicit conversions to: - float - double - char - int8_t - uint8_t - int16_t - uint16_t - int32_t - uint32_t - int64_t - uint64_t and - std::string required to fix deNBI-cibi/tool_description_lib#59
1 parent fa6fd65 commit 35a8512

File tree

1 file changed

+39
-18
lines changed

1 file changed

+39
-18
lines changed

schema_salad/cpp_codegen.py

Lines changed: 39 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -700,31 +700,52 @@ def epilogue(self, root_loader: Optional[TypeDef]) -> None:
700700
}
701701
702702
// declaring toYaml
703-
inline auto toYaml(bool v) {
704-
return YAML::Node{v};
705-
}
706-
inline auto toYaml(float v) {
707-
return YAML::Node{v};
708-
}
709-
inline auto toYaml(double v) {
710-
return YAML::Node{v};
711-
}
712-
inline auto toYaml(int32_t v) {
713-
return YAML::Node{v};
714-
}
715-
inline auto toYaml(int64_t v) {
716-
return YAML::Node{v};
717-
}
718-
inline auto toYaml(std::any const&) {
719-
return YAML::Node{};
720-
}
703+
inline auto toYaml(bool v) { return YAML::Node{v}; }
704+
inline auto toYaml(float v) { return YAML::Node{v}; }
705+
inline auto toYaml(double v) { return YAML::Node{v}; }
706+
inline auto toYaml(char v) { return YAML::Node{v}; }
707+
inline auto toYaml(int8_t v) { return YAML::Node{v}; }
708+
inline auto toYaml(uint8_t v) { return YAML::Node{v}; }
709+
inline auto toYaml(int16_t v) { return YAML::Node{v}; }
710+
inline auto toYaml(uint16_t v) { return YAML::Node{v}; }
711+
inline auto toYaml(int32_t v) { return YAML::Node{v}; }
712+
inline auto toYaml(uint32_t v) { return YAML::Node{v}; }
713+
inline auto toYaml(int64_t v) { return YAML::Node{v}; }
714+
inline auto toYaml(uint64_t v) { return YAML::Node{v}; }
721715
inline auto toYaml(std::monostate const&) {
722716
return YAML::Node(YAML::NodeType::Undefined);
723717
}
724718
inline auto toYaml(std::string const& v) {
725719
return YAML::Node{v};
726720
}
727721
722+
template <typename T, typename ...Args>
723+
auto anyToYaml_impl(std::any const& a) {
724+
if (auto v = std::any_cast<T const>(&a)) {
725+
return toYaml(*v);
726+
}
727+
if constexpr (sizeof...(Args) > 0) {
728+
return anyToYaml_impl<Args...>(a);
729+
}
730+
return toYaml(std::monostate{});
731+
}
732+
733+
inline auto toYaml(std::any const& a) {
734+
return anyToYaml_impl<bool,
735+
float,
736+
double,
737+
char,
738+
int8_t,
739+
uint8_t,
740+
int16_t,
741+
uint16_t,
742+
int32_t,
743+
uint32_t,
744+
int64_t,
745+
uint64_t,
746+
std::string>(a);
747+
}
748+
728749
// declaring fromYaml
729750
inline void fromYaml(YAML::Node const& n, bool& v) {
730751
v = n.as<bool>();

0 commit comments

Comments
 (0)