# 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
#   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" ]
}
