// Copyright 2014 The Chromium 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 MOJO_PUBLIC_CPP_BINDINGS_LIB_VALIDATE_PARAMS_H_
#define MOJO_PUBLIC_CPP_BINDINGS_LIB_VALIDATE_PARAMS_H_
#include <stdint.h>
#include "base/macros.h"
namespace mojo {
namespace internal {
class ValidationContext;
using ValidateEnumFunc = bool (*)(int32_t, ValidationContext*);
class ContainerValidateParams {
public:
// Validates a map. A map is validated as a pair of arrays, one for the keys
// and one for the values. Both arguments must be non-null.
//
// ContainerValidateParams takes ownership of |in_key_validate params| and
// |in_element_validate params|.
ContainerValidateParams(ContainerValidateParams* in_key_validate_params,
ContainerValidateParams* in_element_validate_params)
: key_validate_params(in_key_validate_params),
element_validate_params(in_element_validate_params) {
DCHECK(in_key_validate_params)
<< "Map validate params require key validate params";
DCHECK(in_element_validate_params)
<< "Map validate params require element validate params";
}
// Validates an array.
//
// ContainerValidateParams takes ownership of |in_element_validate params|.
ContainerValidateParams(uint32_t in_expected_num_elements,
bool in_element_is_nullable,
ContainerValidateParams* in_element_validate_params)
: expected_num_elements(in_expected_num_elements),
element_is_nullable(in_element_is_nullable),
element_validate_params(in_element_validate_params) {}
// Validates an array of enums.
ContainerValidateParams(uint32_t in_expected_num_elements,
ValidateEnumFunc in_validate_enum_func)
: expected_num_elements(in_expected_num_elements),
validate_enum_func(in_validate_enum_func) {}
~ContainerValidateParams() {
if (element_validate_params)
delete element_validate_params;
if (key_validate_params)
delete key_validate_params;
}
// If |expected_num_elements| is not 0, the array is expected to have exactly
// that number of elements.
uint32_t expected_num_elements = 0;
// Whether the elements are nullable.
bool element_is_nullable = false;
// Validation information for the map key array. May contain other
// ArrayValidateParams e.g. if the keys are strings.
ContainerValidateParams* key_validate_params = nullptr;
// For arrays: validation information for elements. It is either a pointer to
// another instance of ArrayValidateParams (if elements are arrays or maps),
// or nullptr.
//
// For maps: validation information for the whole value array. May contain
// other ArrayValidateParams e.g. if the values are arrays or maps.
ContainerValidateParams* element_validate_params = nullptr;
// Validation function for enum elements.
ValidateEnumFunc validate_enum_func = nullptr;
private:
DISALLOW_COPY_AND_ASSIGN(ContainerValidateParams);
};
} // namespace internal
} // namespace mojo
#endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_VALIDATE_PARAMS_H_