xref: /openbmc/phosphor-power/config_file_parser_error.hpp (revision 38f8500414fe5c1be6f5159c563937289fe557c2)
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