/* * This program source code file is part of KiCad, a free EDA CAD application. * * Copyright (C) 2023 KiCad Developers, see AUTHORS.txt for contributors. * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or (at your * option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include #include #include #include #include #include #define MAGIC_ENUM_RANGE_MAX 1024 #include #include #include #include template nlohmann::json FormatEnum() { nlohmann::json js; js["type"] = magic_enum::enum_type_name(); js["values"] = nlohmann::json::array(); for( const std::pair& entry : magic_enum::enum_entries() ) { js["values"].emplace_back( nlohmann::json( { { "key", entry.second }, { "value", static_cast( entry.first ) } } ) ); } return js; } int main( int argc, char* argv[] ) { argparse::ArgumentParser args( "enum_exporter" ); args.add_argument( "output_dir" ).default_value( std::string() ); try { args.parse_args( argc, argv ); } catch( const std::runtime_error& err ) { std::cerr << err.what() << std::endl; std::cerr << args; std::exit( 1 ); } std::filesystem::path path( args.get( "output_dir" ) ); std::ofstream outfile; if( !path.empty() ) { path = std::filesystem::absolute( path ); outfile.open( path ); } std::ostream& out = outfile.is_open() ? outfile : std::cout; nlohmann::json js = nlohmann::json::array(); js += FormatEnum(); js += FormatEnum(); js += FormatEnum(); out << js.dump( 4 ) << std::endl; }