{# THIS IS A TEMPLATE PROCESSED BY lib/libifconfig/sfp.lua #}
#include <libifconfig_sfp_tables.h>
#include <libifconfig_sfp_tables_internal.h>
struct sfp_enum_metadata {
int value;
const char *symbol;
const char *description;
const char *display;
};
const struct sfp_enum_metadata *
find_metadata(const struct sfp_enum_metadata *table, int value)
{
while (table->value != value && table->symbol != NULL)
++table;
return (table->symbol != NULL ? table : NULL);
}
{%
for _, ent in ipairs(enums) do
if type(ent) == "string" then
%}
{%
else
local enum = ent
local name = "sfp_"..enum.name
local sym, desc, disp
%}
static const struct sfp_enum_metadata {*name*}_table_[] = {
{%
for _, item in ipairs(enum.values) do
_, sym, desc, disp = table.unpack(item)
local symbol = string.upper(name).."_"..sym
%}
{
.value = {*symbol*},
.symbol = "{*symbol*}",
.description = "{*desc*}",
{%
if disp then
%}
.display = "{*disp*}",
{%
end
%}
},
{%
end
%}
{0}
};
const struct sfp_enum_metadata *{*name*}_table = {*name*}_table_;
const char *
ifconfig_{*name*}_symbol(enum {*name*} v)
{
const struct sfp_enum_metadata *metadata;
if ((metadata = find_metadata({*name*}_table, v)) == NULL)
return (NULL);
return (metadata->symbol);
}
const char *
ifconfig_{*name*}_description(enum {*name*} v)
{
const struct sfp_enum_metadata *metadata;
if ((metadata = find_metadata({*name*}_table, v)) == NULL)
return (NULL);
return (metadata->description);
}
{%
if disp then
%}
const char *
ifconfig_{*name*}_display(enum {*name*} v)
{
const struct sfp_enum_metadata *metadata;
if ((metadata = find_metadata({*name*}_table, v)) == NULL)
return (NULL);
return (metadata->display);
}
{%
end
end
end
%}