def mk_definition(defn): """Instantiates a struct or SBP message specification from a parsed "AST" of a struct or message. Parameters ---------- defn : dict Returns ---------- A Definition or a specialization of a definition, like a Struct """ assert len(defn) == 1 identifier, contents = next(iter(defn.items())) fs = [mk_field(f) for f in contents.get('fields', [])] return sbp.resolve_type( sbp.Definition( identifier=identifier, sbp_id=contents.get('id', None), short_desc=contents.get('short_desc', None), desc=contents.get('desc', None), type_id=contents.get('type'), fields=fs, public=contents.get('public', True), embedded_type=contents.get('embedded_type', False), ))
def mk_field(field): """Instantiates a field specification from a parsed "AST" of a field. Parameters ---------- field : dict Returns ---------- A Field or a specialization of a field, like a bitfield. """ assert len(field) == 1 identifier, contents = field.items()[0] contents = dict({'units': '', 'n_with_values': 0}.items() + contents.items()) return sbp.resolve_type(sbp.Field(identifier=identifier, type_id=contents.pop('type'), options=contents))
def mk_definition(defn): """Instantiates a struct or SBP message specification from a parsed "AST" of a struct or message. Parameters ---------- defn : dict Returns ---------- A Definition or a specialization of a definition, like a Struct """ assert len(defn) == 1 identifier, contents = defn.items()[0] fs = [mk_field(f) for f in contents.get('fields', [])] return sbp.resolve_type(sbp.Definition(identifier=identifier, sbp_id=contents.get('id', None), short_desc=contents.get('short_desc', None), desc=contents.get('desc', None), type_id=contents.get('type'), fields=fs, public=contents.get('public', True)))