Line data Source code
1 : /** 2 : * 3 : * Copyright (c) 2021 Project CHIP Authors 4 : * 5 : * Licensed under the Apache License, Version 2.0 (the "License"); 6 : * you may not use this file except in compliance with the License. 7 : * You may obtain a copy of the License at 8 : * 9 : * http://www.apache.org/licenses/LICENSE-2.0 10 : * 11 : * Unless required by applicable law or agreed to in writing, software 12 : * distributed under the License is distributed on an "AS IS" BASIS, 13 : * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 : * See the License for the specific language governing permissions and 15 : * limitations under the License. 16 : */ 17 : 18 : #pragma once 19 : 20 : #include <app/AppConfig.h> 21 : #include <app/util/basic-types.h> 22 : #include <lib/core/CHIPCore.h> 23 : #include <lib/core/TLV.h> 24 : #include <lib/support/CodeUtils.h> 25 : #include <lib/support/logging/CHIPLogging.h> 26 : 27 : #include "CommandDataIB.h" 28 : #include "CommandStatusIB.h" 29 : #include "StructBuilder.h" 30 : #include "StructParser.h" 31 : 32 : namespace chip { 33 : namespace app { 34 : namespace InvokeResponseIB { 35 : enum class Tag : uint8_t 36 : { 37 : kCommand = 0, 38 : kStatus = 1, 39 : }; 40 : 41 : class Parser : public StructParser 42 : { 43 : public: 44 : #if CHIP_CONFIG_IM_PRETTY_PRINT 45 : CHIP_ERROR PrettyPrint() const; 46 : #endif // CHIP_CONFIG_IM_PRETTY_PRINT 47 : 48 : /** 49 : * @brief Get a parser for a Command. 50 : * 51 : * @param [in] apCommand A pointer to the CommandDataIB parser. 52 : * 53 : * @return #CHIP_NO_ERROR on success 54 : * #CHIP_END_OF_TLV if there is no such element 55 : */ 56 : CHIP_ERROR GetCommand(CommandDataIB::Parser * const apCommand) const; 57 : 58 : /** 59 : * @brief Get a parser for a Status. 60 : * 61 : * @param [in] apStatus A pointer to the CommandStatusIB parser. 62 : * 63 : * @return #CHIP_NO_ERROR on success 64 : * #CHIP_END_OF_TLV if there is no such element 65 : */ 66 : CHIP_ERROR GetStatus(CommandStatusIB::Parser * const apStatus) const; 67 : }; 68 : 69 : class Builder : public StructBuilder 70 : { 71 : public: 72 : /** 73 : * @brief Initialize a CommandDataIB::Builder for writing into the TLV stream 74 : * 75 : * @return A reference to CommandDataIB::Builder 76 : */ 77 : CommandDataIB::Builder & CreateCommand(); 78 : 79 : /** 80 : * @return A reference to CommandDataIB::Builder 81 : */ 82 31 : CommandDataIB::Builder & GetCommand() { return mCommand; } 83 : 84 : /** 85 : * @return A reference to CommandStatusIB::Builder 86 : */ 87 111 : CommandStatusIB::Builder & GetStatus() { return mStatus; } 88 : 89 : /** 90 : * @brief Initialize a CommandStatusIB::Builder for writing into the TLV stream 91 : * 92 : * @return A reference to CommandStatusIB::Builder 93 : */ 94 : CommandStatusIB::Builder & CreateStatus(); 95 : 96 : /** 97 : * @brief Mark the end of this InvokeCommand 98 : * 99 : * @return The builder's final status. 100 : */ 101 : CHIP_ERROR EndOfInvokeResponseIB(); 102 : 103 : private: 104 : CommandDataIB::Builder mCommand; 105 : CommandStatusIB::Builder mStatus; 106 : }; 107 : } // namespace InvokeResponseIB 108 : } // namespace app 109 : } // namespace chip