parse.cpp (1460B)
1 #include <fstream> 2 #include <iostream> 3 #include <vector> 4 5 #include "yaml-cpp/eventhandler.h" 6 #include "yaml-cpp/yaml.h" // IWYU pragma: keep 7 8 struct Params { 9 bool hasFile; 10 std::string fileName; 11 }; 12 13 Params ParseArgs(int argc, char** argv) { 14 Params p; 15 16 std::vector<std::string> args(argv + 1, argv + argc); 17 18 return p; 19 } 20 21 class NullEventHandler : public YAML::EventHandler { 22 public: 23 void OnDocumentStart(const YAML::Mark&) override {} 24 void OnDocumentEnd() override {} 25 26 void OnNull(const YAML::Mark&, YAML::anchor_t) override {} 27 void OnAlias(const YAML::Mark&, YAML::anchor_t) override {} 28 void OnScalar(const YAML::Mark&, const std::string&, YAML::anchor_t, 29 const std::string&) override {} 30 31 void OnSequenceStart(const YAML::Mark&, const std::string&, YAML::anchor_t, 32 YAML::EmitterStyle::value) override {} 33 void OnSequenceEnd() override {} 34 35 void OnMapStart(const YAML::Mark&, const std::string&, YAML::anchor_t, 36 YAML::EmitterStyle::value) override {} 37 void OnMapEnd() override {} 38 }; 39 40 void parse(std::istream& input) { 41 try { 42 YAML::Node doc = YAML::Load(input); 43 std::cout << doc << "\n"; 44 } catch (const YAML::Exception& e) { 45 std::cerr << e.what() << "\n"; 46 } 47 } 48 49 int main(int argc, char** argv) { 50 Params p = ParseArgs(argc, argv); 51 52 if (argc > 1) { 53 std::ifstream fin; 54 fin.open(argv[1]); 55 parse(fin); 56 } else { 57 parse(std::cin); 58 } 59 60 return 0; 61 }