std::string sai_serialize_attr_value()

in meta/SaiSerialize.cpp [2014:2201]


std::string sai_serialize_attr_value(
        _In_ const sai_attr_metadata_t& meta,
        _In_ const sai_attribute_t &attr,
        _In_ const bool countOnly)
{
    SWSS_LOG_ENTER();

    switch (meta.attrvaluetype)
    {
        case SAI_ATTR_VALUE_TYPE_BOOL:
            return sai_serialize_bool(attr.value.booldata);

        case SAI_ATTR_VALUE_TYPE_CHARDATA:
            return sai_serialize_chardata(attr.value.chardata);

        case SAI_ATTR_VALUE_TYPE_UINT8:
            return sai_serialize_number(attr.value.u8);

        case SAI_ATTR_VALUE_TYPE_INT8:
            return sai_serialize_number(attr.value.s8);

        case SAI_ATTR_VALUE_TYPE_UINT16:
            return sai_serialize_number(attr.value.u16);

        case SAI_ATTR_VALUE_TYPE_JSON:
            return sai_serialize_json(attr.value.json);

        case SAI_ATTR_VALUE_TYPE_INT16:
            return sai_serialize_number(attr.value.s16);

        case SAI_ATTR_VALUE_TYPE_UINT32:
            return sai_serialize_number(attr.value.u32);

        case SAI_ATTR_VALUE_TYPE_INT32:
            return sai_serialize_enum(attr.value.s32, meta.enummetadata);

        case SAI_ATTR_VALUE_TYPE_UINT64:
            return sai_serialize_number(attr.value.u64);

//        case SAI_ATTR_VALUE_TYPE_INT64:
//            return sai_serialize_number(attr.value.s64);

        case SAI_ATTR_VALUE_TYPE_MAC:
            return sai_serialize_mac(attr.value.mac);

        case SAI_ATTR_VALUE_TYPE_IPV4:
            return sai_serialize_ipv4(attr.value.ip4);

        case SAI_ATTR_VALUE_TYPE_IPV6:
            return sai_serialize_ipv6(attr.value.ip6);

        case SAI_ATTR_VALUE_TYPE_POINTER:
            return sai_serialize_pointer(attr.value.ptr);

        case SAI_ATTR_VALUE_TYPE_IP_ADDRESS:
            return sai_serialize_ip_address(attr.value.ipaddr);

        case SAI_ATTR_VALUE_TYPE_IP_PREFIX:
            return sai_serialize_ip_prefix(attr.value.ipprefix);

        case SAI_ATTR_VALUE_TYPE_OBJECT_ID:
            return sai_serialize_object_id(attr.value.oid);

        case SAI_ATTR_VALUE_TYPE_OBJECT_LIST:
            return sai_serialize_oid_list(attr.value.objlist, countOnly);

        case SAI_ATTR_VALUE_TYPE_UINT8_LIST:
            return sai_serialize_number_list(attr.value.u8list, countOnly);

        case SAI_ATTR_VALUE_TYPE_INT8_LIST:
            return sai_serialize_number_list(attr.value.s8list, countOnly);

        case SAI_ATTR_VALUE_TYPE_LATCH_STATUS:
            return sai_serialize_latch_status(attr.value.latchstatus);

        case SAI_ATTR_VALUE_TYPE_PORT_LANE_LATCH_STATUS_LIST:
            return sai_serialize_port_lane_latch_status_list(attr.value.portlanelatchstatuslist, countOnly);

//        case SAI_ATTR_VALUE_TYPE_UINT16_LIST:
//            return sai_serialize_number_list(attr.value.u16list, countOnly);
//
//        case SAI_ATTR_VALUE_TYPE_INT16_LIST:
//            return sai_serialize_number_list(attr.value.s16list, countOnly);

        case SAI_ATTR_VALUE_TYPE_UINT32_LIST:
            return sai_serialize_number_list(attr.value.u32list, countOnly);

        case SAI_ATTR_VALUE_TYPE_INT32_LIST:
            return sai_serialize_enum_list(attr.value.s32list, meta.enummetadata, countOnly);

        case SAI_ATTR_VALUE_TYPE_UINT32_RANGE:
            return sai_serialize_range(attr.value.u32range);

//        case SAI_ATTR_VALUE_TYPE_INT32_RANGE:
//            return sai_serialize_range(attr.value.s32range);

        case SAI_ATTR_VALUE_TYPE_UINT16_RANGE_LIST:
            return sai_serialize_u16_range_list(attr.value.u16rangelist, countOnly);

        case SAI_ATTR_VALUE_TYPE_VLAN_LIST:
            return sai_serialize_number_list(attr.value.vlanlist, countOnly);

        case SAI_ATTR_VALUE_TYPE_QOS_MAP_LIST:
            return sai_serialize_qos_map_list(attr.value.qosmap, countOnly);

        case SAI_ATTR_VALUE_TYPE_MAP_LIST:
            return sai_serialize_map_list(attr.value.maplist, countOnly);

        case SAI_ATTR_VALUE_TYPE_ACL_RESOURCE_LIST:
            return sai_serialize_acl_resource_list(attr.value.aclresource, countOnly);

        case SAI_ATTR_VALUE_TYPE_IP_ADDRESS_LIST:
            return sai_serialize_ip_address_list(attr.value.ipaddrlist, countOnly);

        case SAI_ATTR_VALUE_TYPE_SEGMENT_LIST:
            return sai_serialize_segment_list(attr.value.segmentlist, countOnly);

            // ACL FIELD DATA

        case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_BOOL:
        case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT8:
        case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_INT8:
        case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT16:
        case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_INT16:
        case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT32:
        case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_INT32:
        case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT64:
        case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_MAC:
        case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_IPV4:
        case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_IPV6:
        case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_OBJECT_ID:
        case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_OBJECT_LIST:
        case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT8_LIST:
            return sai_serialize_acl_field(meta, attr.value.aclfield, countOnly);

            // ACL ACTION DATA

        case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_BOOL:
        case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_UINT8:
        case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_INT8:
        case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_UINT16:
        case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_INT16:
        case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_UINT32:
        case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_INT32:
        case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_MAC:
        case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_IPV4:
        case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_IPV6:
        case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_OBJECT_ID:
        case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_OBJECT_LIST:
        case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_IP_ADDRESS:
            return sai_serialize_acl_action(meta, attr.value.aclaction, countOnly);

        case SAI_ATTR_VALUE_TYPE_ACL_CAPABILITY:
            return sai_serialize_acl_capability(meta, attr.value.aclcapability, countOnly);

            // MACsec Attributions

        case SAI_ATTR_VALUE_TYPE_MACSEC_SAK:
            return sai_serialize_hex_binary(attr.value.macsecsak);

        case SAI_ATTR_VALUE_TYPE_MACSEC_AUTH_KEY:
            return sai_serialize_hex_binary(attr.value.macsecauthkey);

        case SAI_ATTR_VALUE_TYPE_MACSEC_SALT:
            return sai_serialize_hex_binary(attr.value.macsecsalt);

        case SAI_ATTR_VALUE_TYPE_AUTH_KEY:
            return sai_serialize_hex_binary(attr.value.authkey);

        case SAI_ATTR_VALUE_TYPE_ENCRYPT_KEY:
            return sai_serialize_hex_binary(attr.value.encrypt_key);

        case SAI_ATTR_VALUE_TYPE_SYSTEM_PORT_CONFIG:
            return sai_serialize_system_port_config(meta, attr.value.sysportconfig);

        case SAI_ATTR_VALUE_TYPE_SYSTEM_PORT_CONFIG_LIST:
            return sai_serialize_system_port_config_list(meta, attr.value.sysportconfiglist, countOnly);

        case SAI_ATTR_VALUE_TYPE_IP_PREFIX_LIST:
            return sai_serialize_ip_prefix_list(attr.value.ipprefixlist, countOnly);

        case SAI_ATTR_VALUE_TYPE_POE_PORT_POWER_CONSUMPTION:
            return sai_serialize_poe_port_power_consumption(attr.value.portpowerconsumption);

        default:
            SWSS_LOG_THROW("sai attr value type %s is not implemented, FIXME", sai_serialize_attr_value_type(meta.attrvaluetype).c_str());
    }
}