89 lines
3.1 KiB
C++
89 lines
3.1 KiB
C++
// 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_
|