/**
 * @file PythonBindings.h

 * Python C++ type bindings
 *
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#pragma once

#include "types/Types.h"

namespace org::apache::nifi::minifi::extensions::python {

PyMODINIT_FUNC
PyInit_minifi_native(void);

template<auto Fn>
PyObject* safePyFunction(PyObject* self, PyObject* args) {
  try {
    return ((PyCFunction)Fn)(self, args);
  } catch (const std::exception& e) { \
    PyErr_Format(PyExc_RuntimeError, "C++ exception: %s", e.what()); \
    return nullptr; \
  } catch (...) { \
    PyErr_SetString(PyExc_Exception, "Unknown C++ exception"); \
    return nullptr; \
  }
}

}  // namespace org::apache::nifi::minifi::extensions::python
