#pragma once #include namespace gridfire::policy { struct ReactionChainPolicy {}; struct NetworkPolicy {}; } namespace py { template struct class_ { template class_& def(const char*, F) { return *this; } }; } namespace bindings::detail { template concept IsReactionChainPolicy = std::is_base_of_v; template concept IsNetworkPolicy = std::is_base_of_v; template void registerReactionChainPolicyDefs(py::class_& pyClass) { pyClass.def("name", &T::name) .def("hash", [](const T& self) { return self.hash(0); }); } template void registerNetworkPolicyDefs(py::class_ pyClass) { pyClass.def("name", &T::name) .def("construct", [](const T& self) { return self.construct(); }); } static_assert(IsNetworkPolicy); }