| // Copyright 2019 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SRC_LIB_INSPECT_DEPRECATED_QUERY_FORMATTER_H_ |
| #define SRC_LIB_INSPECT_DEPRECATED_QUERY_FORMATTER_H_ |
| |
| #include "source.h" |
| |
| namespace inspect_deprecated { |
| |
| class Formatter { |
| public: |
| // Configure the formatting of paths for this formatter. |
| enum class PathFormat { |
| // Do not include paths in output, only list the names of Nodes. |
| NONE, |
| |
| // Include the full path to each Node in the output. |
| FULL, |
| |
| // Include the absolute path to each Node in the output. |
| ABSOLUTE, |
| }; |
| |
| Formatter(PathFormat path_format = PathFormat::NONE) : path_format_(path_format) {} |
| virtual ~Formatter() = default; |
| |
| // Formats the locations of all nodes under the given sources recursively. |
| virtual std::string FormatSourceLocations( |
| const std::vector<inspect_deprecated::Source>& sources) const = 0; |
| |
| // Formats the names of the children of the given sources in the desired |
| // string format. |
| virtual std::string FormatChildListing( |
| const std::vector<inspect_deprecated::Source>& sources) const = 0; |
| |
| // Recursively formats all hierarchies in the list of sources. |
| virtual std::string FormatSourcesRecursive( |
| const std::vector<inspect_deprecated::Source>& sources) const = 0; |
| |
| virtual std::string FormatHealth( |
| const std::vector<inspect_deprecated::Source>& sources) const = 0; |
| |
| protected: |
| using Path = std::vector<std::string>; |
| |
| // Formats the path to the given node or the name of the node depending on the |
| // configured path format. |
| std::string FormatPathOrName(const inspect_deprecated::Location& location, |
| const Path& path_from_location, const std::string& node_name) const; |
| |
| // Formats either the absolute or relative path to the node depending on the |
| // path format. |
| // |
| // This differs from FormatPathOrName in that it never returns the name of the |
| // node even if PathFormat is NONE. |
| std::string FormatPath(const inspect_deprecated::Location& location, |
| const Path& path_from_location) const; |
| |
| private: |
| PathFormat path_format_; |
| }; |
| |
| } // namespace inspect_deprecated |
| |
| #endif // SRC_LIB_INSPECT_DEPRECATED_QUERY_FORMATTER_H_ |