1*38f85004SShawn McCarney /** 2*38f85004SShawn McCarney * Copyright © 2025 IBM Corporation 3*38f85004SShawn McCarney * 4*38f85004SShawn McCarney * Licensed under the Apache License, Version 2.0 (the "License"); 5*38f85004SShawn McCarney * you may not use this file except in compliance with the License. 6*38f85004SShawn McCarney * You may obtain a copy of the License at 7*38f85004SShawn McCarney * 8*38f85004SShawn McCarney * http://www.apache.org/licenses/LICENSE-2.0 9*38f85004SShawn McCarney * 10*38f85004SShawn McCarney * Unless required by applicable law or agreed to in writing, software 11*38f85004SShawn McCarney * distributed under the License is distributed on an "AS IS" BASIS, 12*38f85004SShawn McCarney * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*38f85004SShawn McCarney * See the License for the specific language governing permissions and 14*38f85004SShawn McCarney * limitations under the License. 15*38f85004SShawn McCarney */ 16*38f85004SShawn McCarney #pragma once 17*38f85004SShawn McCarney 18*38f85004SShawn McCarney #include <exception> 19*38f85004SShawn McCarney #include <filesystem> 20*38f85004SShawn McCarney #include <string> 21*38f85004SShawn McCarney 22*38f85004SShawn McCarney namespace phosphor::power::util 23*38f85004SShawn McCarney { 24*38f85004SShawn McCarney 25*38f85004SShawn McCarney /** 26*38f85004SShawn McCarney * @class ConfigFileParserError 27*38f85004SShawn McCarney * 28*38f85004SShawn McCarney * An error that occurred while parsing a JSON configuration file. 29*38f85004SShawn McCarney */ 30*38f85004SShawn McCarney class ConfigFileParserError : public std::exception 31*38f85004SShawn McCarney { 32*38f85004SShawn McCarney public: 33*38f85004SShawn McCarney // Specify which compiler-generated methods we want 34*38f85004SShawn McCarney ConfigFileParserError() = delete; 35*38f85004SShawn McCarney ConfigFileParserError(const ConfigFileParserError&) = default; 36*38f85004SShawn McCarney ConfigFileParserError(ConfigFileParserError&&) = default; 37*38f85004SShawn McCarney ConfigFileParserError& operator=(const ConfigFileParserError&) = default; 38*38f85004SShawn McCarney ConfigFileParserError& operator=(ConfigFileParserError&&) = default; 39*38f85004SShawn McCarney virtual ~ConfigFileParserError() = default; 40*38f85004SShawn McCarney 41*38f85004SShawn McCarney /** 42*38f85004SShawn McCarney * Constructor. 43*38f85004SShawn McCarney * 44*38f85004SShawn McCarney * @param pathName Configuration file path name 45*38f85004SShawn McCarney * @param error Error message 46*38f85004SShawn McCarney */ ConfigFileParserError(const std::filesystem::path & pathName,const std::string & error)47*38f85004SShawn McCarney explicit ConfigFileParserError(const std::filesystem::path& pathName, 48*38f85004SShawn McCarney const std::string& error) : 49*38f85004SShawn McCarney pathName{pathName}, 50*38f85004SShawn McCarney error{"ConfigFileParserError: " + pathName.string() + ": " + error} 51*38f85004SShawn McCarney {} 52*38f85004SShawn McCarney 53*38f85004SShawn McCarney /** 54*38f85004SShawn McCarney * Returns the configuration file path name. 55*38f85004SShawn McCarney * 56*38f85004SShawn McCarney * @return path name 57*38f85004SShawn McCarney */ getPathName()58*38f85004SShawn McCarney const std::filesystem::path& getPathName() 59*38f85004SShawn McCarney { 60*38f85004SShawn McCarney return pathName; 61*38f85004SShawn McCarney } 62*38f85004SShawn McCarney 63*38f85004SShawn McCarney /** 64*38f85004SShawn McCarney * Returns the description of this error. 65*38f85004SShawn McCarney * 66*38f85004SShawn McCarney * @return error description 67*38f85004SShawn McCarney */ what() const68*38f85004SShawn McCarney const char* what() const noexcept override 69*38f85004SShawn McCarney { 70*38f85004SShawn McCarney return error.c_str(); 71*38f85004SShawn McCarney } 72*38f85004SShawn McCarney 73*38f85004SShawn McCarney private: 74*38f85004SShawn McCarney /** 75*38f85004SShawn McCarney * Configuration file path name. 76*38f85004SShawn McCarney */ 77*38f85004SShawn McCarney const std::filesystem::path pathName; 78*38f85004SShawn McCarney 79*38f85004SShawn McCarney /** 80*38f85004SShawn McCarney * Error message. 81*38f85004SShawn McCarney */ 82*38f85004SShawn McCarney const std::string error{}; 83*38f85004SShawn McCarney }; 84*38f85004SShawn McCarney 85*38f85004SShawn McCarney } // namespace phosphor::power::util 86