// Copyright 2014 The Chromium OS 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 LIBBRILLO_BRILLO_VARIANT_DICTIONARY_H_
#define LIBBRILLO_BRILLO_VARIANT_DICTIONARY_H_

#include <map>
#include <string>

#include <brillo/any.h>
#include <brillo/brillo_export.h>

namespace brillo {

using VariantDictionary = std::map<std::string, brillo::Any>;

// GetVariantValueOrDefault tries to retrieve the named key from the dictionary
// and convert it to the type T.  If the value does not exist, or the type
// conversion fails, the default value of type T is returned.
template<typename T>
const T GetVariantValueOrDefault(const VariantDictionary& dictionary,
                                 const std::string& key) {
  VariantDictionary::const_iterator it = dictionary.find(key);
  if (it == dictionary.end()) {
    return T();
  }
  return it->second.TryGet<T>();
}

}  // namespace brillo

#endif  // LIBBRILLO_BRILLO_VARIANT_DICTIONARY_H_