import os
from multigen.jinja import JinjaTask, JinjaGenerator
from riaps.gen.target.capnp import capnpfilters
[docs]class CapnpTask(JinjaTask):
template_name = 'capnp.tpl'
[docs] def filtered_elements(self, model):
model = {'capnp' : model}
return model.values()
[docs] def relative_path_for_element(self, element):
output_file = os.path.join('./', f'{element["appname"].lower()}.capnp')
return output_file
[docs]class CapnpGenerator(JinjaGenerator):
templates_path = os.path.join(
os.path.abspath(os.path.dirname(__file__)),
'tpl'
)
tasks = [
CapnpTask(),
]
def __init__(self, cppmodel, output_dir):
super(CapnpGenerator, self).__init__()
# Creating directory for the c++ header/source
cpp_msgdir = os.path.join(output_dir, "include/messages")
if cppmodel and not os.path.isdir(cpp_msgdir):
os.makedirs(cpp_msgdir, exist_ok=True)
[docs] def create_environment(self, **kwargs):
environment = super().create_environment(**kwargs)
environment.trim_blocks = True
environment.filters['generateid'] = capnpfilters.generate_capnp_id
return environment