/*
 *
 *    Copyright (c) 2022 Project CHIP Authors
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */

// THIS FILE IS GENERATED BY ZAP

#pragma once

#include <app-common/zap-generated/callbacks/PluginCallbacks.h>

#define MATTER_PLUGINS_INIT                                                                                                        \
    MatterIdentifyPluginClientInitCallback();                                                                                      \
    MatterGroupsPluginClientInitCallback();                                                                                        \
    MatterScenesPluginClientInitCallback();                                                                                        \
    MatterOnOffPluginClientInitCallback();                                                                                         \
    MatterOnOffSwitchConfigurationPluginClientInitCallback();                                                                      \
    MatterLevelControlPluginClientInitCallback();                                                                                  \
    MatterBinaryInputBasicPluginClientInitCallback();                                                                              \
    MatterDescriptorPluginClientInitCallback();                                                                                    \
    MatterBindingPluginClientInitCallback();                                                                                       \
    MatterAccessControlPluginClientInitCallback();                                                                                 \
    MatterActionsPluginClientInitCallback();                                                                                       \
    MatterBasicPluginClientInitCallback();                                                                                         \
    MatterOtaSoftwareUpdateProviderPluginClientInitCallback();                                                                     \
    MatterOtaSoftwareUpdateRequestorPluginClientInitCallback();                                                                    \
    MatterLocalizationConfigurationPluginClientInitCallback();                                                                     \
    MatterTimeFormatLocalizationPluginClientInitCallback();                                                                        \
    MatterUnitLocalizationPluginClientInitCallback();                                                                              \
    MatterPowerSourceConfigurationPluginClientInitCallback();                                                                      \
    MatterPowerSourcePluginClientInitCallback();                                                                                   \
    MatterGeneralCommissioningPluginClientInitCallback();                                                                          \
    MatterNetworkCommissioningPluginClientInitCallback();                                                                          \
    MatterDiagnosticLogsPluginClientInitCallback();                                                                                \
    MatterGeneralDiagnosticsPluginClientInitCallback();                                                                            \
    MatterSoftwareDiagnosticsPluginClientInitCallback();                                                                           \
    MatterThreadNetworkDiagnosticsPluginClientInitCallback();                                                                      \
    MatterWiFiNetworkDiagnosticsPluginClientInitCallback();                                                                        \
    MatterEthernetNetworkDiagnosticsPluginClientInitCallback();                                                                    \
    MatterBridgedDeviceBasicPluginClientInitCallback();                                                                            \
    MatterSwitchPluginClientInitCallback();                                                                                        \
    MatterAdministratorCommissioningPluginClientInitCallback();                                                                    \
    MatterOperationalCredentialsPluginClientInitCallback();                                                                        \
    MatterGroupKeyManagementPluginClientInitCallback();                                                                            \
    MatterFixedLabelPluginClientInitCallback();                                                                                    \
    MatterUserLabelPluginClientInitCallback();                                                                                     \
    MatterBooleanStatePluginClientInitCallback();                                                                                  \
    MatterModeSelectPluginClientInitCallback();                                                                                    \
    MatterDoorLockPluginClientInitCallback();                                                                                      \
    MatterWindowCoveringPluginClientInitCallback();                                                                                \
    MatterBarrierControlPluginClientInitCallback();                                                                                \
    MatterPumpConfigurationAndControlPluginClientInitCallback();                                                                   \
    MatterThermostatPluginClientInitCallback();                                                                                    \
    MatterFanControlPluginClientInitCallback();                                                                                    \
    MatterThermostatUserInterfaceConfigurationPluginClientInitCallback();                                                          \
    MatterColorControlPluginClientInitCallback();                                                                                  \
    MatterBallastConfigurationPluginClientInitCallback();                                                                          \
    MatterIlluminanceMeasurementPluginClientInitCallback();                                                                        \
    MatterTemperatureMeasurementPluginClientInitCallback();                                                                        \
    MatterPressureMeasurementPluginClientInitCallback();                                                                           \
    MatterFlowMeasurementPluginClientInitCallback();                                                                               \
    MatterRelativeHumidityMeasurementPluginClientInitCallback();                                                                   \
    MatterOccupancySensingPluginClientInitCallback();                                                                              \
    MatterWakeOnLanPluginClientInitCallback();                                                                                     \
    MatterChannelPluginClientInitCallback();                                                                                       \
    MatterTargetNavigatorPluginClientInitCallback();                                                                               \
    MatterMediaPlaybackPluginClientInitCallback();                                                                                 \
    MatterMediaInputPluginClientInitCallback();                                                                                    \
    MatterLowPowerPluginClientInitCallback();                                                                                      \
    MatterKeypadInputPluginClientInitCallback();                                                                                   \
    MatterContentLauncherPluginClientInitCallback();                                                                               \
    MatterAudioOutputPluginClientInitCallback();                                                                                   \
    MatterApplicationLauncherPluginClientInitCallback();                                                                           \
    MatterApplicationBasicPluginClientInitCallback();                                                                              \
    MatterAccountLoginPluginClientInitCallback();                                                                                  \
    MatterElectricalMeasurementPluginClientInitCallback();                                                                         \
    MatterTestClusterPluginClientInitCallback();
