| ## Note that this file is not auto generated, it is what generates the |
| ## elog-gen.hpp file |
| // This file was autogenerated. Do not edit! |
| // See elog-gen.py for more details |
| #pragma once |
| |
| #include <string> |
| #include <tuple> |
| #include <type_traits> |
| #include <sdbusplus/exception.hpp> |
| #include <phosphor-logging/log.hpp> |
| #include <phosphor-logging/elog.hpp> |
| |
| <% exceptions = [] %>\ |
| % for name in errors: |
| <% |
| if("example.xyz.openbmc_project" not in name): |
| exception = name.replace(".", "::") |
| exception = "sdbusplus::" + exception |
| index = exception.rfind("::") |
| exception = exception[:index] + "::Error::" + exception[index+2:] |
| exceptions.append(exception) |
| %>\ |
| % endfor |
| % for exception in set(exceptions): |
| <% |
| ns = exception.split("::") |
| exception_name = ns[-1] |
| ns = ns[:-1] |
| %>\ |
| % for s in ns: |
| namespace ${s} |
| { |
| % endfor |
| struct ${exception_name}; |
| % for s in reversed(ns): |
| } // namespace ${s} |
| % endfor |
| |
| % endfor |
| |
| namespace phosphor |
| { |
| |
| namespace logging |
| { |
| |
| % for index, name in enumerate(errors): |
| <% |
| ## Ex: name: xyz.openbmc_project.Error.Callout.Device |
| namespaces = name.split('.') |
| ## classname is the last name item (Device) |
| classname = namespaces[-1] |
| ## namespaces are all the name items except the last one |
| namespaces = namespaces[:-1] |
| %>\ |
| % for s in namespaces: |
| namespace ${s} |
| { |
| % endfor |
| namespace _${classname} |
| { |
| <% |
| meta_list = [] |
| if(name in meta): |
| meta_list = meta[name] |
| %>\ |
| |
| % for b in meta_list: |
| struct ${b} |
| { |
| static constexpr auto str = "${meta_data[b]['str']}"; |
| static constexpr auto str_short = "${meta_data[b]['str_short']}"; |
| using type = std::tuple<std::decay_t<decltype(str)>,${meta_data[b]['type']}>; |
| explicit constexpr ${b}(${meta_data[b]['type']} a) : _entry(entry(str, a)) {}; |
| type _entry; |
| }; |
| % endfor |
| |
| } // namespace _${classname} |
| <% |
| example_yaml = False |
| if("example.xyz.openbmc_project" in name): |
| example_yaml = True |
| %>\ |
| <% |
| meta_string = "" |
| if(meta_list): |
| meta_string = ', '.join(meta_list) |
| parent_meta = [] |
| |
| parent = parents[name] |
| while parent: |
| tmpparent = parent.split('.') |
| ## Name is the last item |
| parent_name = tmpparent[-1] |
| ## namespaces are all the name items except the last one |
| parent_namespace = '::'.join(tmpparent[:-1]) |
| parent_meta += [parent_namespace + "::" + parent_name + "::" + |
| p for p in meta[parent]] |
| parent_meta_short = ', '.join(meta[parent]) |
| if(meta_string): |
| meta_string = meta_string + ", " + parent_meta_short |
| else: |
| meta_string = parent_meta_short |
| parent = parents[parent] |
| |
| if example_yaml: |
| error_type = classname + " : public sdbusplus::exception_t" |
| else: |
| error_type = classname |
| %> |
| struct ${error_type} |
| { |
| % if example_yaml: |
| static constexpr auto errName = "${name}"; |
| static constexpr auto errDesc = "${error_msg[name]}"; |
| % endif |
| static constexpr auto L = level::${error_lvl[name]}; |
| % for b in meta_list: |
| using ${b} = _${classname}::${b}; |
| % endfor |
| % for b in parent_meta: |
| using ${b.split("::").pop()} = ${b}; |
| % endfor |
| using metadata_types = std::tuple<${meta_string}>; |
| |
| % if example_yaml: |
| const char* name() const noexcept |
| { |
| return errName; |
| } |
| |
| const char* description() const noexcept |
| { |
| return errDesc; |
| } |
| |
| const char* what() const noexcept |
| { |
| return errName; |
| } |
| % endif |
| }; |
| |
| % for s in reversed(namespaces): |
| } // namespace ${s} |
| % endfor |
| |
| <% |
| sdbusplus_name = name |
| if not example_yaml : |
| sdbusplus_name = "sdbusplus." + sdbusplus_name |
| pos = sdbusplus_name.rfind(".") |
| sdbusplus_name = (sdbusplus_name[:pos] + ".Error." + |
| sdbusplus_name[pos+1:]) |
| sdbusplus_type = sdbusplus_name.replace(".", "::") |
| phosphor_type = sdbusplus_type |
| if not example_yaml : |
| phosphor_type = sdbusplus_type.replace("sdbusplus::", "") |
| phosphor_type = phosphor_type.replace("Error::", "") |
| %>\ |
| |
| % if sdbusplus_type != phosphor_type: |
| namespace details |
| { |
| |
| template <> |
| struct map_exception_type<${sdbusplus_type}> |
| { |
| using type = ${phosphor_type}; |
| }; |
| |
| } |
| %endif |
| |
| % endfor |
| |
| } // namespace logging |
| |
| } // namespace phosphor |