/** \file SensorList.h Copyright Notice\n Copyright (C) 2020 Jan Rogall - developer\n This file is part of hueplusplus. hueplusplus is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. hueplusplus is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with hueplusplus. If not, see . **/ #ifndef INCLUDE_HUEPLUSPLUS_SENSOR_LIST_H #define INCLUDE_HUEPLUSPLUS_SENSOR_LIST_H #include "ResourceList.h" #include "Sensor.h" namespace hueplusplus { //! \brief Handles a list of Sensor%s with type specific getters //! //! Allows to directly get the requested sensor type or all sensors of a given type. class SensorList : public CreateableResourceList, CreateSensor> { public: using CreateableResourceList::CreateableResourceList; //! \brief Get sensor specified by id, convert to \c T //! \param id Sensor id //! \tparam T Sensor type to convert to (from \ref sensors) //! \returns The sensor matching the id and type //! \throws HueException when id does not exist or type does not match //! \throws std::system_error when system or socket operations fail //! \throws HueAPIResponseException when response contains an error //! \throws nlohmann::json::parse_error when response could not be parsed template T getAsType(int id) { return get(id).asSensorType(); } //! \brief Get all sensors of type \c T //! \tparam T Sensor type to get (from \ref sensors) //! \returns All sensors matching the type //! \throws HueException when response contains no body //! \throws std::system_error when system or socket operations fail //! \throws HueAPIResponseException when response contains an error //! \throws nlohmann::json::parse_error when response could not be parsed template std::vector getAllByType() { nlohmann::json state = this->stateCache->getValue(); std::vector result; for (auto it = state.begin(); it != state.end(); ++it) { // Only parse the sensors with the correct type if (it->value("type", "") == T::typeStr) { result.push_back(get(maybeStoi(it.key())).asSensorType()); } } return result; } protected: //! \brief Protected defaulted move constructor SensorList(SensorList&&) = default; //! \brief Protected defaulted move assignment SensorList& operator=(SensorList&&) = default; }; } // namespace hueplusplus #endif