/*
 *
 *    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
// This file is generated from clusters-Attributes.h.zapt

#pragma once

#include <app/ConcreteAttributePath.h>
#include <app/data-model/DecodableList.h>
#include <app/data-model/List.h>
#include <app/data-model/Nullable.h>
#include <app/util/basic-types.h>
#include <lib/core/TLV.h>
#include <lib/support/BitMask.h>

#include <clusters/shared/Attributes.h>
#include <clusters/shared/Enums.h>
#include <clusters/shared/Structs.h>

#include <clusters/ColorControl/AttributeIds.h>
#include <clusters/ColorControl/ClusterId.h>
#include <clusters/ColorControl/Enums.h>
#include <clusters/ColorControl/Structs.h>

namespace chip {
namespace app {
namespace Clusters {
namespace ColorControl {
namespace Attributes {

namespace CurrentHue {
struct TypeInfo {
  using Type = uint8_t;
  using DecodableType = uint8_t;
  using DecodableArgType = uint8_t;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::CurrentHue::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace CurrentHue
namespace CurrentSaturation {
struct TypeInfo {
  using Type = uint8_t;
  using DecodableType = uint8_t;
  using DecodableArgType = uint8_t;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::CurrentSaturation::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace CurrentSaturation
namespace RemainingTime {
struct TypeInfo {
  using Type = uint16_t;
  using DecodableType = uint16_t;
  using DecodableArgType = uint16_t;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::RemainingTime::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace RemainingTime
namespace CurrentX {
struct TypeInfo {
  using Type = uint16_t;
  using DecodableType = uint16_t;
  using DecodableArgType = uint16_t;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::CurrentX::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace CurrentX
namespace CurrentY {
struct TypeInfo {
  using Type = uint16_t;
  using DecodableType = uint16_t;
  using DecodableArgType = uint16_t;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::CurrentY::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace CurrentY
namespace DriftCompensation {
struct TypeInfo {
  using Type = chip::app::Clusters::ColorControl::DriftCompensationEnum;
  using DecodableType =
      chip::app::Clusters::ColorControl::DriftCompensationEnum;
  using DecodableArgType =
      chip::app::Clusters::ColorControl::DriftCompensationEnum;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::DriftCompensation::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace DriftCompensation
namespace CompensationText {
struct TypeInfo {
  using Type = chip::CharSpan;
  using DecodableType = chip::CharSpan;
  using DecodableArgType = chip::CharSpan;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::CompensationText::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
  static constexpr size_t MaxLength() { return 254; }
};
} // namespace CompensationText
namespace ColorTemperatureMireds {
struct TypeInfo {
  using Type = uint16_t;
  using DecodableType = uint16_t;
  using DecodableArgType = uint16_t;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::ColorTemperatureMireds::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace ColorTemperatureMireds
namespace ColorMode {
struct TypeInfo {
  using Type = chip::app::Clusters::ColorControl::ColorModeEnum;
  using DecodableType = chip::app::Clusters::ColorControl::ColorModeEnum;
  using DecodableArgType = chip::app::Clusters::ColorControl::ColorModeEnum;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::ColorMode::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace ColorMode
namespace Options {
struct TypeInfo {
  using Type = chip::BitMask<chip::app::Clusters::ColorControl::OptionsBitmap>;
  using DecodableType =
      chip::BitMask<chip::app::Clusters::ColorControl::OptionsBitmap>;
  using DecodableArgType =
      chip::BitMask<chip::app::Clusters::ColorControl::OptionsBitmap>;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::Options::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace Options
namespace NumberOfPrimaries {
struct TypeInfo {
  using Type = chip::app::DataModel::Nullable<uint8_t>;
  using DecodableType = chip::app::DataModel::Nullable<uint8_t>;
  using DecodableArgType = const chip::app::DataModel::Nullable<uint8_t> &;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::NumberOfPrimaries::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace NumberOfPrimaries
namespace Primary1X {
struct TypeInfo {
  using Type = uint16_t;
  using DecodableType = uint16_t;
  using DecodableArgType = uint16_t;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::Primary1X::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace Primary1X
namespace Primary1Y {
struct TypeInfo {
  using Type = uint16_t;
  using DecodableType = uint16_t;
  using DecodableArgType = uint16_t;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::Primary1Y::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace Primary1Y
namespace Primary1Intensity {
struct TypeInfo {
  using Type = chip::app::DataModel::Nullable<uint8_t>;
  using DecodableType = chip::app::DataModel::Nullable<uint8_t>;
  using DecodableArgType = const chip::app::DataModel::Nullable<uint8_t> &;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::Primary1Intensity::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace Primary1Intensity
namespace Primary2X {
struct TypeInfo {
  using Type = uint16_t;
  using DecodableType = uint16_t;
  using DecodableArgType = uint16_t;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::Primary2X::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace Primary2X
namespace Primary2Y {
struct TypeInfo {
  using Type = uint16_t;
  using DecodableType = uint16_t;
  using DecodableArgType = uint16_t;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::Primary2Y::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace Primary2Y
namespace Primary2Intensity {
struct TypeInfo {
  using Type = chip::app::DataModel::Nullable<uint8_t>;
  using DecodableType = chip::app::DataModel::Nullable<uint8_t>;
  using DecodableArgType = const chip::app::DataModel::Nullable<uint8_t> &;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::Primary2Intensity::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace Primary2Intensity
namespace Primary3X {
struct TypeInfo {
  using Type = uint16_t;
  using DecodableType = uint16_t;
  using DecodableArgType = uint16_t;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::Primary3X::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace Primary3X
namespace Primary3Y {
struct TypeInfo {
  using Type = uint16_t;
  using DecodableType = uint16_t;
  using DecodableArgType = uint16_t;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::Primary3Y::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace Primary3Y
namespace Primary3Intensity {
struct TypeInfo {
  using Type = chip::app::DataModel::Nullable<uint8_t>;
  using DecodableType = chip::app::DataModel::Nullable<uint8_t>;
  using DecodableArgType = const chip::app::DataModel::Nullable<uint8_t> &;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::Primary3Intensity::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace Primary3Intensity
namespace Primary4X {
struct TypeInfo {
  using Type = uint16_t;
  using DecodableType = uint16_t;
  using DecodableArgType = uint16_t;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::Primary4X::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace Primary4X
namespace Primary4Y {
struct TypeInfo {
  using Type = uint16_t;
  using DecodableType = uint16_t;
  using DecodableArgType = uint16_t;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::Primary4Y::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace Primary4Y
namespace Primary4Intensity {
struct TypeInfo {
  using Type = chip::app::DataModel::Nullable<uint8_t>;
  using DecodableType = chip::app::DataModel::Nullable<uint8_t>;
  using DecodableArgType = const chip::app::DataModel::Nullable<uint8_t> &;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::Primary4Intensity::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace Primary4Intensity
namespace Primary5X {
struct TypeInfo {
  using Type = uint16_t;
  using DecodableType = uint16_t;
  using DecodableArgType = uint16_t;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::Primary5X::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace Primary5X
namespace Primary5Y {
struct TypeInfo {
  using Type = uint16_t;
  using DecodableType = uint16_t;
  using DecodableArgType = uint16_t;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::Primary5Y::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace Primary5Y
namespace Primary5Intensity {
struct TypeInfo {
  using Type = chip::app::DataModel::Nullable<uint8_t>;
  using DecodableType = chip::app::DataModel::Nullable<uint8_t>;
  using DecodableArgType = const chip::app::DataModel::Nullable<uint8_t> &;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::Primary5Intensity::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace Primary5Intensity
namespace Primary6X {
struct TypeInfo {
  using Type = uint16_t;
  using DecodableType = uint16_t;
  using DecodableArgType = uint16_t;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::Primary6X::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace Primary6X
namespace Primary6Y {
struct TypeInfo {
  using Type = uint16_t;
  using DecodableType = uint16_t;
  using DecodableArgType = uint16_t;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::Primary6Y::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace Primary6Y
namespace Primary6Intensity {
struct TypeInfo {
  using Type = chip::app::DataModel::Nullable<uint8_t>;
  using DecodableType = chip::app::DataModel::Nullable<uint8_t>;
  using DecodableArgType = const chip::app::DataModel::Nullable<uint8_t> &;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::Primary6Intensity::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace Primary6Intensity
namespace WhitePointX {
struct TypeInfo {
  using Type = uint16_t;
  using DecodableType = uint16_t;
  using DecodableArgType = uint16_t;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::WhitePointX::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace WhitePointX
namespace WhitePointY {
struct TypeInfo {
  using Type = uint16_t;
  using DecodableType = uint16_t;
  using DecodableArgType = uint16_t;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::WhitePointY::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace WhitePointY
namespace ColorPointRX {
struct TypeInfo {
  using Type = uint16_t;
  using DecodableType = uint16_t;
  using DecodableArgType = uint16_t;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::ColorPointRX::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace ColorPointRX
namespace ColorPointRY {
struct TypeInfo {
  using Type = uint16_t;
  using DecodableType = uint16_t;
  using DecodableArgType = uint16_t;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::ColorPointRY::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace ColorPointRY
namespace ColorPointRIntensity {
struct TypeInfo {
  using Type = chip::app::DataModel::Nullable<uint8_t>;
  using DecodableType = chip::app::DataModel::Nullable<uint8_t>;
  using DecodableArgType = const chip::app::DataModel::Nullable<uint8_t> &;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::ColorPointRIntensity::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace ColorPointRIntensity
namespace ColorPointGX {
struct TypeInfo {
  using Type = uint16_t;
  using DecodableType = uint16_t;
  using DecodableArgType = uint16_t;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::ColorPointGX::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace ColorPointGX
namespace ColorPointGY {
struct TypeInfo {
  using Type = uint16_t;
  using DecodableType = uint16_t;
  using DecodableArgType = uint16_t;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::ColorPointGY::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace ColorPointGY
namespace ColorPointGIntensity {
struct TypeInfo {
  using Type = chip::app::DataModel::Nullable<uint8_t>;
  using DecodableType = chip::app::DataModel::Nullable<uint8_t>;
  using DecodableArgType = const chip::app::DataModel::Nullable<uint8_t> &;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::ColorPointGIntensity::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace ColorPointGIntensity
namespace ColorPointBX {
struct TypeInfo {
  using Type = uint16_t;
  using DecodableType = uint16_t;
  using DecodableArgType = uint16_t;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::ColorPointBX::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace ColorPointBX
namespace ColorPointBY {
struct TypeInfo {
  using Type = uint16_t;
  using DecodableType = uint16_t;
  using DecodableArgType = uint16_t;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::ColorPointBY::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace ColorPointBY
namespace ColorPointBIntensity {
struct TypeInfo {
  using Type = chip::app::DataModel::Nullable<uint8_t>;
  using DecodableType = chip::app::DataModel::Nullable<uint8_t>;
  using DecodableArgType = const chip::app::DataModel::Nullable<uint8_t> &;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::ColorPointBIntensity::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace ColorPointBIntensity
namespace EnhancedCurrentHue {
struct TypeInfo {
  using Type = uint16_t;
  using DecodableType = uint16_t;
  using DecodableArgType = uint16_t;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::EnhancedCurrentHue::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace EnhancedCurrentHue
namespace EnhancedColorMode {
struct TypeInfo {
  using Type = chip::app::Clusters::ColorControl::EnhancedColorModeEnum;
  using DecodableType =
      chip::app::Clusters::ColorControl::EnhancedColorModeEnum;
  using DecodableArgType =
      chip::app::Clusters::ColorControl::EnhancedColorModeEnum;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::EnhancedColorMode::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace EnhancedColorMode
namespace ColorLoopActive {
struct TypeInfo {
  using Type = uint8_t;
  using DecodableType = uint8_t;
  using DecodableArgType = uint8_t;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::ColorLoopActive::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace ColorLoopActive
namespace ColorLoopDirection {
struct TypeInfo {
  using Type = uint8_t;
  using DecodableType = uint8_t;
  using DecodableArgType = uint8_t;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::ColorLoopDirection::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace ColorLoopDirection
namespace ColorLoopTime {
struct TypeInfo {
  using Type = uint16_t;
  using DecodableType = uint16_t;
  using DecodableArgType = uint16_t;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::ColorLoopTime::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace ColorLoopTime
namespace ColorLoopStartEnhancedHue {
struct TypeInfo {
  using Type = uint16_t;
  using DecodableType = uint16_t;
  using DecodableArgType = uint16_t;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::ColorLoopStartEnhancedHue::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace ColorLoopStartEnhancedHue
namespace ColorLoopStoredEnhancedHue {
struct TypeInfo {
  using Type = uint16_t;
  using DecodableType = uint16_t;
  using DecodableArgType = uint16_t;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::ColorLoopStoredEnhancedHue::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace ColorLoopStoredEnhancedHue
namespace ColorCapabilities {
struct TypeInfo {
  using Type =
      chip::BitMask<chip::app::Clusters::ColorControl::ColorCapabilitiesBitmap>;
  using DecodableType =
      chip::BitMask<chip::app::Clusters::ColorControl::ColorCapabilitiesBitmap>;
  using DecodableArgType =
      chip::BitMask<chip::app::Clusters::ColorControl::ColorCapabilitiesBitmap>;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::ColorCapabilities::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace ColorCapabilities
namespace ColorTempPhysicalMinMireds {
struct TypeInfo {
  using Type = uint16_t;
  using DecodableType = uint16_t;
  using DecodableArgType = uint16_t;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::ColorTempPhysicalMinMireds::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace ColorTempPhysicalMinMireds
namespace ColorTempPhysicalMaxMireds {
struct TypeInfo {
  using Type = uint16_t;
  using DecodableType = uint16_t;
  using DecodableArgType = uint16_t;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::ColorTempPhysicalMaxMireds::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace ColorTempPhysicalMaxMireds
namespace CoupleColorTempToLevelMinMireds {
struct TypeInfo {
  using Type = uint16_t;
  using DecodableType = uint16_t;
  using DecodableArgType = uint16_t;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::CoupleColorTempToLevelMinMireds::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace CoupleColorTempToLevelMinMireds
namespace StartUpColorTemperatureMireds {
struct TypeInfo {
  using Type = chip::app::DataModel::Nullable<uint16_t>;
  using DecodableType = chip::app::DataModel::Nullable<uint16_t>;
  using DecodableArgType = const chip::app::DataModel::Nullable<uint16_t> &;

  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
  static constexpr AttributeId GetAttributeId() {
    return Attributes::StartUpColorTemperatureMireds::Id;
  }
  static constexpr bool MustUseTimedWrite() { return false; }
};
} // namespace StartUpColorTemperatureMireds
namespace GeneratedCommandList {
struct TypeInfo
    : public Clusters::Globals::Attributes::GeneratedCommandList::TypeInfo {
  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
};
} // namespace GeneratedCommandList
namespace AcceptedCommandList {
struct TypeInfo
    : public Clusters::Globals::Attributes::AcceptedCommandList::TypeInfo {
  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
};
} // namespace AcceptedCommandList
namespace AttributeList {
struct TypeInfo
    : public Clusters::Globals::Attributes::AttributeList::TypeInfo {
  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
};
} // namespace AttributeList
namespace FeatureMap {
struct TypeInfo : public Clusters::Globals::Attributes::FeatureMap::TypeInfo {
  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
};
} // namespace FeatureMap
namespace ClusterRevision {
struct TypeInfo
    : public Clusters::Globals::Attributes::ClusterRevision::TypeInfo {
  static constexpr ClusterId GetClusterId() {
    return Clusters::ColorControl::Id;
  }
};
} // namespace ClusterRevision

struct TypeInfo {
  struct DecodableType {
    static constexpr ClusterId GetClusterId() {
      return Clusters::ColorControl::Id;
    }

    CHIP_ERROR Decode(TLV::TLVReader &reader,
                      const ConcreteAttributePath &path);

    Attributes::CurrentHue::TypeInfo::DecodableType currentHue =
        static_cast<uint8_t>(0);
    Attributes::CurrentSaturation::TypeInfo::DecodableType currentSaturation =
        static_cast<uint8_t>(0);
    Attributes::RemainingTime::TypeInfo::DecodableType remainingTime =
        static_cast<uint16_t>(0);
    Attributes::CurrentX::TypeInfo::DecodableType currentX =
        static_cast<uint16_t>(0);
    Attributes::CurrentY::TypeInfo::DecodableType currentY =
        static_cast<uint16_t>(0);
    Attributes::DriftCompensation::TypeInfo::DecodableType driftCompensation =
        static_cast<chip::app::Clusters::ColorControl::DriftCompensationEnum>(
            0);
    Attributes::CompensationText::TypeInfo::DecodableType compensationText;
    Attributes::ColorTemperatureMireds::TypeInfo::DecodableType
        colorTemperatureMireds = static_cast<uint16_t>(0);
    Attributes::ColorMode::TypeInfo::DecodableType colorMode =
        static_cast<chip::app::Clusters::ColorControl::ColorModeEnum>(0);
    Attributes::Options::TypeInfo::DecodableType options = static_cast<
        chip::BitMask<chip::app::Clusters::ColorControl::OptionsBitmap>>(0);
    Attributes::NumberOfPrimaries::TypeInfo::DecodableType numberOfPrimaries;
    Attributes::Primary1X::TypeInfo::DecodableType primary1X =
        static_cast<uint16_t>(0);
    Attributes::Primary1Y::TypeInfo::DecodableType primary1Y =
        static_cast<uint16_t>(0);
    Attributes::Primary1Intensity::TypeInfo::DecodableType primary1Intensity;
    Attributes::Primary2X::TypeInfo::DecodableType primary2X =
        static_cast<uint16_t>(0);
    Attributes::Primary2Y::TypeInfo::DecodableType primary2Y =
        static_cast<uint16_t>(0);
    Attributes::Primary2Intensity::TypeInfo::DecodableType primary2Intensity;
    Attributes::Primary3X::TypeInfo::DecodableType primary3X =
        static_cast<uint16_t>(0);
    Attributes::Primary3Y::TypeInfo::DecodableType primary3Y =
        static_cast<uint16_t>(0);
    Attributes::Primary3Intensity::TypeInfo::DecodableType primary3Intensity;
    Attributes::Primary4X::TypeInfo::DecodableType primary4X =
        static_cast<uint16_t>(0);
    Attributes::Primary4Y::TypeInfo::DecodableType primary4Y =
        static_cast<uint16_t>(0);
    Attributes::Primary4Intensity::TypeInfo::DecodableType primary4Intensity;
    Attributes::Primary5X::TypeInfo::DecodableType primary5X =
        static_cast<uint16_t>(0);
    Attributes::Primary5Y::TypeInfo::DecodableType primary5Y =
        static_cast<uint16_t>(0);
    Attributes::Primary5Intensity::TypeInfo::DecodableType primary5Intensity;
    Attributes::Primary6X::TypeInfo::DecodableType primary6X =
        static_cast<uint16_t>(0);
    Attributes::Primary6Y::TypeInfo::DecodableType primary6Y =
        static_cast<uint16_t>(0);
    Attributes::Primary6Intensity::TypeInfo::DecodableType primary6Intensity;
    Attributes::WhitePointX::TypeInfo::DecodableType whitePointX =
        static_cast<uint16_t>(0);
    Attributes::WhitePointY::TypeInfo::DecodableType whitePointY =
        static_cast<uint16_t>(0);
    Attributes::ColorPointRX::TypeInfo::DecodableType colorPointRX =
        static_cast<uint16_t>(0);
    Attributes::ColorPointRY::TypeInfo::DecodableType colorPointRY =
        static_cast<uint16_t>(0);
    Attributes::ColorPointRIntensity::TypeInfo::DecodableType
        colorPointRIntensity;
    Attributes::ColorPointGX::TypeInfo::DecodableType colorPointGX =
        static_cast<uint16_t>(0);
    Attributes::ColorPointGY::TypeInfo::DecodableType colorPointGY =
        static_cast<uint16_t>(0);
    Attributes::ColorPointGIntensity::TypeInfo::DecodableType
        colorPointGIntensity;
    Attributes::ColorPointBX::TypeInfo::DecodableType colorPointBX =
        static_cast<uint16_t>(0);
    Attributes::ColorPointBY::TypeInfo::DecodableType colorPointBY =
        static_cast<uint16_t>(0);
    Attributes::ColorPointBIntensity::TypeInfo::DecodableType
        colorPointBIntensity;
    Attributes::EnhancedCurrentHue::TypeInfo::DecodableType enhancedCurrentHue =
        static_cast<uint16_t>(0);
    Attributes::EnhancedColorMode::TypeInfo::DecodableType enhancedColorMode =
        static_cast<chip::app::Clusters::ColorControl::EnhancedColorModeEnum>(
            0);
    Attributes::ColorLoopActive::TypeInfo::DecodableType colorLoopActive =
        static_cast<uint8_t>(0);
    Attributes::ColorLoopDirection::TypeInfo::DecodableType colorLoopDirection =
        static_cast<uint8_t>(0);
    Attributes::ColorLoopTime::TypeInfo::DecodableType colorLoopTime =
        static_cast<uint16_t>(0);
    Attributes::ColorLoopStartEnhancedHue::TypeInfo::DecodableType
        colorLoopStartEnhancedHue = static_cast<uint16_t>(0);
    Attributes::ColorLoopStoredEnhancedHue::TypeInfo::DecodableType
        colorLoopStoredEnhancedHue = static_cast<uint16_t>(0);
    Attributes::ColorCapabilities::TypeInfo::DecodableType colorCapabilities =
        static_cast<chip::BitMask<
            chip::app::Clusters::ColorControl::ColorCapabilitiesBitmap>>(0);
    Attributes::ColorTempPhysicalMinMireds::TypeInfo::DecodableType
        colorTempPhysicalMinMireds = static_cast<uint16_t>(0);
    Attributes::ColorTempPhysicalMaxMireds::TypeInfo::DecodableType
        colorTempPhysicalMaxMireds = static_cast<uint16_t>(0);
    Attributes::CoupleColorTempToLevelMinMireds::TypeInfo::DecodableType
        coupleColorTempToLevelMinMireds = static_cast<uint16_t>(0);
    Attributes::StartUpColorTemperatureMireds::TypeInfo::DecodableType
        startUpColorTemperatureMireds;
    Attributes::GeneratedCommandList::TypeInfo::DecodableType
        generatedCommandList;
    Attributes::AcceptedCommandList::TypeInfo::DecodableType
        acceptedCommandList;
    Attributes::AttributeList::TypeInfo::DecodableType attributeList;
    Attributes::FeatureMap::TypeInfo::DecodableType featureMap =
        static_cast<uint32_t>(0);
    Attributes::ClusterRevision::TypeInfo::DecodableType clusterRevision =
        static_cast<uint16_t>(0);
  };
};
} // namespace Attributes
} // namespace ColorControl
} // namespace Clusters
} // namespace app
} // namespace chip
