# Copyright (c) 2024 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.
import("//build_overrides/chip.gni")

# This source set is TIGHLY coupled with code-generated data models
# as generally implemented by `src/app/util`
#
# Corresponding functions defined in attribute-storace.cpp/attribute-table.cpp must
# be available at link time for this model to use
#
# Use `model.gni` to get access to:
#   CodegenDataModelProvider.cpp
#   CodegenDataModelProvider.h
#   CodegenDataModelProvider_Read.cpp
#   CodegenDataModelProvider_Write.cpp
#   EmberAttributeDataBuffer.cpp
#   EmberAttributeDataBuffer.h
#   EmberMetadata.cpp
#   EmberMetadata.h
#   Instance.cpp
#
# The above list of files exists to satisfy the "dependency linter"
# since those files should technically be "visible to gn" even though we
# are supposed to go through model.gni constants

source_set("instance-header") {
  # TODO: this is a workaround until we have actual injection in our code. The issue is that
  #       DataModel is not currently injected and InteractionModelEngine needs a default
  #
  #       The default should be code-generated data models, however that depends on code
  #       generation and is application specific.
  #
  # This only declares that the instance method is provided by something (that something
  # generally being unit tests or data_model.gni/data_model.cmake files)
  sources = [ "Instance.h" ]
}
