improve examples
[elektra-initiative:libelektra.git] / src / bindings / cpp / include / kdbio.hpp
1 #ifndef ELEKTRA_KDB_IO_HPP
2 #define ELEKTRA_KDB_IO_HPP
3
4 /**
5  * @brief See examples/cpp_example_userio.cpp for how to use
6  * USER_DEFINED_IO
7  */
8 #ifndef USER_DEFINED_IO
9
10 #include <key.hpp>
11
12 #include <ostream>
13 #include <iomanip>
14
15 namespace kdb
16 {
17
18 inline std::ostream & printError(std::ostream & os, kdb::Key const & error)
19 {
20         if (!error.getMeta<const kdb::Key>("error"))
21         {
22                 // no error available
23                 return os;
24         }
25
26         try{
27                 error.getMeta<std::string>("error");
28                 os << "Error number " << error.getMeta<std::string>("error/number") << " occurred!" << std::endl;
29                 os << "Description: " << error.getMeta<std::string>("error/description") << std::endl;
30                 os << "Ingroup: " << error.getMeta<std::string>("error/ingroup") << std::endl;
31                 os << "Module: " << error.getMeta<std::string>("error/module") << std::endl;
32                 os << "At: " << error.getMeta<std::string>("error/file") << ":" << error.getMeta<std::string>("error/line") << std::endl;
33                 os << "Reason: " << error.getMeta<std::string>("error/reason") << std::endl;
34         } catch (kdb::KeyMetaException const& e)
35         {
36                 os << "Error meta data is not set correctly by a plugin" << std::endl;
37         }
38
39         return os;
40 }
41
42 inline std::ostream & printWarnings(std::ostream & os, kdb::Key const & error)
43 {
44         if (!error.getMeta<const kdb::Key>("warnings"))
45         {
46                 // no warnings were issued
47                 return os;
48         }
49
50         try{
51                 int nr = error.getMeta<int>("warnings");
52                 if (!nr)
53                 {
54                         os << "1 Warning was issued:" << std::endl;
55                 }
56                 else
57                 {
58                         os << nr+1 << " Warnings were issued:" << std::endl;
59                 }
60
61                 for (int i=0; i<=nr; i++)
62                 {
63                         std::ostringstream name;
64                         name << "warnings/#" << std::setfill('0') << std::setw(2) << i;
65                         // os << "\t" << name.str() << ": " << error.getMeta<std::string>(name.str()) << std::endl;
66                         os << "\tWarning number: " << error.getMeta<std::string>(name.str() + "/number") << std::endl;
67                         os << "\tDescription: " << error.getMeta<std::string>(name.str() + "/description") << std::endl;
68                         os << "\tIngroup: " << error.getMeta<std::string>(name.str() + "/ingroup") << std::endl;
69                         os << "\tModule: " << error.getMeta<std::string>(name.str() + "/module") << std::endl;
70                         os << "\tAt: " << error.getMeta<std::string>(name.str() + "/file") << ":"
71                                   << error.getMeta<std::string>(name.str() + "/line") << std::endl;
72                         os << "\tReason: " << error.getMeta<std::string>(name.str() + "/reason") << std::endl;
73                 }
74
75         } catch (kdb::KeyMetaException const& e)
76         {
77                 os << "Warnings meta data not set correctly by a plugin" << std::endl;
78         }
79
80         return os;
81 }
82
83 }
84
85 #endif
86
87 #endif