Welcome to multidoc’s documentation!#
Creating and maintaining an API Reference for multiple programming languages
consumes unnecessary time. multidoc attempts to solve this through the use
of jinja2 templating and pydantic data modelling. At the core, is the
API Declaration:
api/hello.yaml#summary: This is the hello module...
notes: It's probably not that impressive 🤔
functions:
- name: hello
returns:
name: world
type: str
description: Returns the world!
With the API Declaration in hand, we can add replacement tags to the C++ source code:
cpp_src/foo.h#//! @get_docstring(__doc__)
#include <string>
namespace hello {
//! @get_docstring(world)
std::string world();
}
In the pybind11 exposed module, docstrings can also be added:
pybind_src/foo.cpp##include <pybind11/pybind11.h>
#include <pybind_src/docstrings.h>
#include <cpp/foo.h>
namespace py = pybind11;
PYBIND11_MODULE(hello, m) {
m.doc() = hello::get_docstring("__doc__");
m.def("world", &hello::world, hello::get_docstring("world"));
}
>>> generate_documented(src="pybind_src", dest=".", local={"py": True}, api="api/module.yaml")
>>> generate_documented(src="cpp_src", dest=".", local={"cpp": True}, api="api/module.yaml"))