CustomAttributes.cc 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. /**
  2. * Licensed to the Apache Software Foundation (ASF) under one
  3. * or more contributor license agreements. See the NOTICE file
  4. * distributed with this work for additional information
  5. * regarding copyright ownership. The ASF licenses this file
  6. * to you under the Apache License, Version 2.0 (the
  7. * "License"); you may not use this file except in compliance
  8. * with the License. You may obtain a copy of the License at
  9. *
  10. * http://www.apache.org/licenses/LICENSE-2.0
  11. *
  12. * Unless required by applicable law or agreed to in writing, software
  13. * distributed under the License is distributed on an "AS IS" BASIS,
  14. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. * See the License for the specific language governing permissions and
  16. * limitations under the License.
  17. */
  18. #include "CustomAttributes.hh"
  19. #include "Exception.hh"
  20. #include <map>
  21. #include <memory>
  22. namespace avro {
  23. boost::optional<std::string> CustomAttributes::getAttribute(const std::string &name) const {
  24. boost::optional<std::string> result;
  25. std::map<std::string, std::string>::const_iterator iter =
  26. attributes_.find(name);
  27. if (iter == attributes_.end()) {
  28. return result;
  29. }
  30. result = iter->second;
  31. return result;
  32. }
  33. void CustomAttributes::addAttribute(const std::string &name,
  34. const std::string &value) {
  35. auto iter_and_find =
  36. attributes_.insert(std::pair<std::string, std::string>(name, value));
  37. if (!iter_and_find.second) {
  38. throw Exception(name + " already exists and cannot be added");
  39. }
  40. }
  41. void CustomAttributes::printJson(std::ostream &os,
  42. const std::string &name) const {
  43. if (attributes().find(name) == attributes().end()) {
  44. throw Exception(name + " doesn't exist");
  45. }
  46. os << "\"" << name << "\": \"" << attributes().at(name) << "\"";
  47. }
  48. } // namespace avro