| // 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 TOOLS_FIDL_FIDLC_INCLUDE_FIDL_TEMPLATE_STRING_H_ |
| #define TOOLS_FIDL_FIDLC_INCLUDE_FIDL_TEMPLATE_STRING_H_ |
| |
| #include <map> |
| #include <string> |
| |
| namespace fidl { |
| |
| using Substitutions = std::map<std::string, std::string>; |
| |
| // Holds a string with named variables to replace, using a dictionary of |
| // key/value string pairs (map<std::string,std::string>). The variable format is |
| // $name or ${name}. Variables that without a matching key in the substitution |
| // map are left unchanged. "$$" converts to "$" without interpreting either "$" |
| // as part of a variable name. |
| // |
| // Example: |
| // TemplateString ts("change '${ORIGINAL}' to '${REPLACEMENT}'"); |
| // std::string value = ts.Substitute({ |
| // {"ORIGINAL", prefix}, |
| // {"REPLACEMENT", replacement}, |
| // }); |
| class TemplateString { |
| public: |
| TemplateString(std::string str) : str_(str) {} |
| |
| // Constructs an empty template. |
| TemplateString() : TemplateString("") {} |
| |
| // Returns true if the template string is not empty. |
| explicit operator bool() const { return str_.size() > 0; } |
| |
| // Returns the string value after replacing all matched variables in the |
| // template string with the values for the matching keys. |
| // If |remove_unmatched| is true, variables without matching keys are |
| // removed from the string. |
| std::string Substitute(Substitutions substitutions, bool remove_unmatched) const; |
| |
| // Returns the string value after replacing all matched variables in the |
| // template string with the values for the matching keys. |
| // Variables without matching keys are left in place. |
| std::string Substitute(Substitutions substitutions) const { |
| return Substitute(substitutions, false); |
| } |
| |
| // Returns the template string with unreplaced variables (as given at |
| // construction). |
| inline const std::string& str() const { return str_; } |
| |
| private: |
| std::string str_; |
| }; |
| |
| } // namespace fidl |
| |
| #endif // TOOLS_FIDL_FIDLC_INCLUDE_FIDL_TEMPLATE_STRING_H_ |