cube2rust 0.0.1

A tool for generating a rust project from a STM32CubeMX ioc file
Documentation
import xml.etree.ElementTree as ElementTree

from natsort import natsorted

file_path = r'C:\Program Files (x86)\STMicroelectronics\STM32Cube\STM32CubeMX\db\mcu\families.xml'
FEATURE = 'F0'


def get_memory_sizes():
    mem_info = {}

    tree = ElementTree.parse(file_path)
    root = tree.getroot()

    for family in root:
        for subfamily in family:
            for mcu in subfamily:
                mcu_name = mcu.attrib['RefName']
                if not mcu_name.startswith('STM32' + FEATURE):
                    continue

                rams = mcu.findall('Ram')
                flashs = mcu.findall('Flash')

                assert len(rams) == 1
                assert len(flashs) == 1

                flash = flashs[0].text
                ram = rams[0].text

                assert mcu_name not in mem_info
                mem_info[mcu_name] = {'ram': ram, 'flash': flash}

    return mem_info


def get_mem_sizes_string(mem_info: dict):
    outstring = 'pub static MEMORY_SIZES: Map<&str, MemSize> = phf_map! {\n'

    for mcu, mem_size in natsorted(mem_info.items()):
        flash = mem_size['flash']
        ram = mem_size['ram']
        outstring += f'    "{mcu}" => MemSize{{flash: {flash}, ram: {ram}}},\n'

    return outstring + '};\n'


if __name__ == '__main__':
    mem_info = get_memory_sizes()
    mem_sizes_string = get_mem_sizes_string(mem_info)

    imports = 'use phf::{phf_map, Map};\n'\

              'use super::MemSize;\n\n'

    print(imports + mem_sizes_string)