/* Copyright 2020 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 VBOOT_REFERENCE_CHROMEOS_CONFIG_H_
#define VBOOT_REFERENCE_CHROMEOS_CONFIG_H_

#include <stdbool.h>
#include <stdint.h>

#include "2common.h"
#include "2return_codes.h"

/**
 * Get a value from the model configuration on the device as a string.
 *
 * Note: this function allocates memory by its use of vb2_read_file, and relies
 * on the caller to free the allocated memory. The output parameter will be set
 * to NULL upon failure, so free can be safely called on this parameter.
 *
 * @param path          The path in the config schema to the object containing
 *                      the requested property.
 * @param property      The name of the requested property.
 * @param val_out       Output parameter which gets assigned to a
 *                      null-terminated string.
 * @return VB2_SUCCESS on success, or a relevant error upon error.
 */
vb2_error_t chromeos_config_get_string(const char *path, const char *property,
				       char **val_out);

/**
 * Get a value from the model configuration on the device as a boolean.
 *
 * @param path          The path in the config schema to the object containing
 *                      the requested property.
 * @param property      The name of the requested property.
 * @param val_out       Output parameter which gets assigned to a boolean.
 * @return VB2_SUCCESS on success, or a relevant error upon error.
 */
vb2_error_t chromeos_config_get_boolean(const char *path, const char *property,
					bool *val_out);

/**
 * Get a value from the model configuration on the device as an integer.
 *
 * @param path          The path in the config schema to the object containing
 *                      the requested property.
 * @param property      The name of the requested property.
 * @param val_out       Output parameter which gets assigned to an integer.
 * @return VB2_SUCCESS on success, or a relevant error upon error.
 */
vb2_error_t chromeos_config_get_integer(const char *path, const char *property,
					int *val_out);

#endif /* VBOOT_REFERENCE_CHROMEOS_CONFIG_H_ */
