| // 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_ |