module hello import py import v.util.version [heap; py_module: 'hello'] struct HelloModuleContext { } [export: 'PyInit_hello'; unsafe] pub fn py_init_module() &C.PyObject { return py.init_module<HelloModuleContext>(&HelloModuleContext{}) } [py_method; unsafe] pub fn (mod HelloModuleContext) greetings(self &C.PyObject, ignore &C.PyObject) &C.PyObject { println('This module was build with: ${version.full_v_version(true)}') return py.py_none() } /* until it will be possible to either: - pass around method pointers - use generic anonymous function the module struct must explicitly implement the py.Dispatcher interface. */ pub fn (mod HelloModuleContext) dispatch(m_name string, self &C.PyObject, args &C.PyObject) &C.PyObject{ $for method in HelloModuleContext.methods { $if method.args[0].typ is C.PyObject && method.args[1].typ is C.PyObject { if method.name == m_name { return mod.$method(self, args).str } } } return py.py_none() }
>>> import hello
>>> hello.boring()
This module was built with: V 0.2.4 105d7fc
>>>