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