def generate()

in tools/scripts/codegen/legacy_c2j_cpp_gen.py [0:0]


    def generate(self, executor: ProcessPoolExecutor, max_workers: int, args: dict) -> int:
        """
        Call C++ SDK clients generator to generate service clients and endpoint tests in parallel
        :param executor: executor to use to run parallel code generation
        :param max_workers: maximum number of parallel tasks
        :param args: input arguments from the command line
        :return:
        """
        self.build_generator(self.path_to_generator)
        if args.get("prepare_tools"):
            return 0

        pending = set()
        done = set()

        print(f"Running code generator, up to {max_workers} processes in parallel")
        sys.stdout.flush()
        for core_component in ["defaults", "partitions"]:
            if args.get("all") or args.get(core_component):
                core_output_dir = f"{self.output_location}/../src/"
                task = executor.submit(self._generate_core_component,
                                       core_component,
                                       CORE_COMPONENT_TO_MODEL[core_component],
                                       core_output_dir,
                                       None,
                                       self.raw_generator_arguments)
                pending.add(task)

        for service, model_files in self.c2j_models.items():
            while len(pending) >= max_workers:
                new_done, pending = wait(pending, return_when=FIRST_COMPLETED)
                done.update(new_done)

            task = executor.submit(self._generate_single_service,
                                   service,
                                   model_files,
                                   self.output_location,
                                   None,
                                   self.raw_generator_arguments)
            pending.add(task)

        new_done, _ = wait(pending, return_when=ALL_COMPLETED)
        done.update(new_done)

        failures = set()
        for result in done:
            try:
                service, status = result.result()  # will rethrow any exceptions
                if status != 0:
                    raise RuntimeError(f"Service {service} (re)generation failed with non-zero return: {status}")
            except Exception as exc:
                failures.add(f"Service (re)generation failed with error.\n    Exception: {exc}\n"
                             f"stderr: {getattr(exc, 'stderr', None)}")

        if len(failures):
            print(f"Code generation failed, processed {len(done)} packages. "
                  f"Encountered {len(failures)} failures:\n")  # Including defaults and partitions
            for failure in failures:
                print(failure)

        if len(failures):
            return -1

        print(f"Code generation done, (re)generated {len(done)} packages.")  # Including defaults and partitions
        return 0