""" yaml parser """ __license__ = 'GPL-3.0-only' import yaml from .types import Variable, Function, Struct from .header import Header def read(path: str, hdr: Header): with open(path, mode='r', encoding='utf-8') as stream: data = yaml.safe_load(stream) for item, info in data['variables'].items(): hdr.variables.append(Variable(item, data=info)) for item, info in data['functions'].items(): hdr.functions.append(Function(item, data=info)) for struct in data['structs']: name = struct.pop('name') members = [] for item, info in struct.items(): match info['type']: case 'fn_ptr': members.append(Function(item, data=info)) case _: members.append(Variable(item, data=info)) hdr.structs.append(Struct(name, members))