blob: 15f8e4fe89b8e9d386bea2e4e913ad4306f8193d [file] [log] [blame]
from .property import Property
from .namedelement import NamedElement
from .renderer import Renderer
class Method(NamedElement, Renderer):
def __init__(self, **kwargs):
self.parameters = \
[Property(**p) for p in kwargs.pop('parameters', [])]
self.returns = \
[Property(**r) for r in kwargs.pop('returns', [])]
self.flags = kwargs.pop('flags', [])
self.cpp_flags = self.or_cpp_flags(self.flags)
self.errors = kwargs.pop('errors', [])
super(Method, self).__init__(**kwargs)
def markdown(self, loader):
return self.render(loader, "method.md.mako", method=self)
def cpp_prototype(self, loader, interface, ptype):
return self.render(loader, "method.prototype.hpp.mako", method=self,
interface=interface, ptype=ptype, post=str.rstrip)
def or_cpp_flags(self, flags):
"""Return the corresponding ORed cpp flags."""
flags_dict = {"deprecated": "vtable::common_::deprecated",
"hidden": "vtable::common_::hidden",
"unprivileged": "vtable::common_::unprivileged",
"no_reply": "vtable::method_::no_reply"}
cpp_flags = []
for flag in flags:
try:
cpp_flags.append(flags_dict[flag])
except KeyError:
raise ValueError("Invalid flag \"{}\"".format(flag))
return " | ".join(cpp_flags)