/** * * Copyright (c) 2021 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. */ #pragma once #include "ListBuilder.h" #include "ListParser.h" #include #include #include #include #include #include #include namespace chip { namespace app { namespace ClusterPathIB { enum class Tag : uint8_t { kNode = 0, kEndpoint = 1, kCluster = 2, }; class Parser : public ListParser { public: #if CHIP_CONFIG_IM_PRETTY_PRINT CHIP_ERROR PrettyPrint() const; #endif // CHIP_CONFIG_IM_PRETTY_PRINT /** * @brief Get the NodeId * * @param [in] apNodeId A pointer to apNodeId * * @return #CHIP_NO_ERROR on success * #CHIP_ERROR_WRONG_TLV_TYPE if there is such element but it's not any of the defined unsigned integer types * #CHIP_END_OF_TLV if there is no such element */ CHIP_ERROR GetNode(NodeId * const apNodeId) const; /** * @brief Get the Endpoint. * * @param [in] apEndpoint A pointer to apEndpoint * * @return #CHIP_NO_ERROR on success * #CHIP_ERROR_WRONG_TLV_TYPE if there is such element but it's not any of the defined unsigned integer types * #CHIP_END_OF_TLV if there is no such element */ CHIP_ERROR GetEndpoint(EndpointId * const apEndpoint) const; /** * @brief Get the Cluster. * * @param [in] apCluster A pointer to apCluster * * @return #CHIP_NO_ERROR on success * #CHIP_ERROR_WRONG_TLV_TYPE if there is such element but it's not any of the defined unsigned integer types * #CHIP_END_OF_TLV if there is no such element */ CHIP_ERROR GetCluster(ClusterId * const apCluster) const; }; class Builder : public ListBuilder { public: /** * @brief Inject Node into the TLV stream. * * @param [in] aNode Node for this cluster path * * @return A reference to *this */ ClusterPathIB::Builder & Node(const NodeId aNode); /** * @brief Inject Endpoint into the TLV stream. * * @param [in] aEndpoint Endpoint for this cluster path * * @return A reference to *this */ ClusterPathIB::Builder & Endpoint(const EndpointId aEndpoint); /** * @brief Inject Cluster into the TLV stream. * * @param [in] aCluster Cluster for this cluster path * * @return A reference to *this */ ClusterPathIB::Builder & Cluster(const ClusterId aCluster); /** * @brief Mark the end of this ClusterPathIB * * @return The builder's final status. */ CHIP_ERROR EndOfClusterPathIB(); }; } // namespace ClusterPathIB } // namespace app } // namespace chip