Loading...
Searching...
No Matches
validator.h
Go to the documentation of this file.
1//
2// Copyright 2024 Pixar
3//
4// Licensed under the terms set forth in the LICENSE.txt file available at
5// https://openusd.org/license.
6//
7#ifndef PXR_USD_USD_VALIDATOR_H
8#define PXR_USD_USD_VALIDATOR_H
9
11
12#include "pxr/pxr.h"
13#include "pxr/base/tf/token.h"
14#include "pxr/usd/usd/api.h"
15#include "pxr/usd/usd/stage.h"
16
17#include <functional>
18#include <variant>
19#include <vector>
20
21PXR_NAMESPACE_OPEN_SCOPE
22
24using UsdValidationErrorVector = std::vector<UsdValidationError>;
25class UsdPrim;
26
46{
55
59 PlugPluginPtr pluginPtr;
60
63
66 std::string doc;
67
71
73 bool isSuite;
74}; // UsdValidatorMetadata
75
76using UsdValidatorMetadataVector = std::vector<UsdValidatorMetadata>;
77
78// TODO:
79// - TimeCode (Range), leaving right now for brevity. Will introduce in
80// subsequent iterations.
81//
82//
83
92
94using UsdValidateLayerTaskFn = std::function<UsdValidationErrorVector(
95 const SdfLayerHandle&)>;
97using UsdValidateStageTaskFn = std::function<UsdValidationErrorVector(
98 const UsdStagePtr&)>;
100using UsdValidatePrimTaskFn = std::function<UsdValidationErrorVector(
101 const UsdPrim&)>;
102
104
117{
118public:
121 USD_API
122 explicit UsdValidator(const UsdValidatorMetadata &metadata);
123
124 UsdValidator(const UsdValidator &other) = delete;
125 UsdValidator &operator=(const UsdValidator&) = delete;
126
127 UsdValidator(UsdValidator &&other) noexcept = default;
128 UsdValidator& operator=(UsdValidator&&) noexcept = default;
129
132 USD_API
134 const UsdValidateLayerTaskFn &validateLayerTaskFn);
135
138 USD_API
140 const UsdValidateStageTaskFn &validateStageTaskFn);
141
144 USD_API
146 const UsdValidatePrimTaskFn &validatePrimTaskFn);
147
150 {
151 return _metadata;
152 }
153
156 {
157 return std::move(_metadata);
158 }
159
165 USD_API
166 UsdValidationErrorVector Validate(const SdfLayerHandle &layer) const;
167
173 USD_API
174 UsdValidationErrorVector Validate(const UsdStagePtr &usdStage) const;
175
181 USD_API
182 UsdValidationErrorVector Validate(const UsdPrim& usdPrim) const;
183
184private:
185 // To make sure registry can query task types on a validator.
186 // Registry needs access to _GetValidatorPrimTasks, in order to determine if
187 // the contained validators in a suite, which provides schemaTypes metadata
188 // are compliant.
189 friend class UsdValidationRegistry;
190
191 UsdValidatorMetadata _metadata;
192 std::variant<UsdValidateLayerTaskFn,
194 UsdValidatePrimTaskFn> _validateTaskFn;
195
196 // Return UsdValidateLayerTaskFn if provided by the validator, else a
197 // nullptr.
198 const UsdValidateLayerTaskFn* _GetValidateLayerTask() const;
199
200 // Return UsdValidateStageTaskFn if provided by the validator, else a
201 // nullptr.
202 const UsdValidateStageTaskFn* _GetValidateStageTask() const;
203
204 // Return UsdValidatePrimTaskFn if provided by the validator, else a
205 // nullptr.
206 const UsdValidatePrimTaskFn* _GetValidatePrimTask() const;
207
208}; // UsdValidator
209
219{
220public:
223 USD_API
225 const std::vector<const UsdValidator*>& validators);
226
227 UsdValidatorSuite(UsdValidatorSuite &&other) noexcept = default;
228
229 UsdValidatorSuite& operator=(UsdValidatorSuite&&) noexcept = default;
230
235 const std::vector<const UsdValidator*>& GetContainedValidators() const &
236 {
237 return _containedValidators;
238 }
239
244 std::vector<const UsdValidator*> GetContainedValidators() &&
245 {
246 return std::move(_containedValidators);
247 }
248
251 {
252 return _metadata;
253 }
254
257 {
258 return std::move(_metadata);
259 }
260
261private:
262 UsdValidatorMetadata _metadata;
263 std::vector<const UsdValidator*> _containedValidators;
264}; // UsdValidatorSuite
265
266PXR_NAMESPACE_CLOSE_SCOPE
267
268#endif // PXR_USD_USD_VALIDATOR_H
Token for efficient comparison, assignment, and hashing of known strings.
Definition: token.h:71
UsdPrim is the sole persistent scenegraph object on a UsdStage, and is the embodiment of a "Prim" as ...
Definition: prim.h:117
UsdValidationError is an entity returned by a validation task, which is associated with a UsdValidato...
UsdValidationRegistry manages and provides access to UsdValidator / UsdValidatorSuite for USD Validat...
UsdValidator is a class describing a single test.
Definition: validator.h:117
UsdValidatorMetadata GetMetadata() &&
Return metadata associated with this validator by-value.
Definition: validator.h:155
USD_API UsdValidationErrorVector Validate(const SdfLayerHandle &layer) const
Run validation on the given layer by executing the contained validateTaskFn and returns UsdValidation...
USD_API UsdValidator(const UsdValidatorMetadata &metadata)
Instantiate a UsdValidator which has no validation logic implementation.
USD_API UsdValidationErrorVector Validate(const UsdPrim &usdPrim) const
Run validation on the given usdPrim by executing the contained validateTaskFn and returns UsdValidati...
const UsdValidatorMetadata & GetMetadata() const &
Return metadata associated with this Validator.
Definition: validator.h:149
USD_API UsdValidationErrorVector Validate(const UsdStagePtr &usdStage) const
Run validation on the given usdStage by executing the contained validateTaskFn and returns UsdValidat...
UsdValidatorSuite acts like a suite for a collection of tests, which clients can use to bundle all te...
Definition: validator.h:219
UsdValidatorMetadata GetMetadata() &&
Return metadata associated with this validator.
Definition: validator.h:256
std::vector< const UsdValidator * > GetContainedValidators() &&
Returns a vector of const UsdValidator pointers, which make this UsdValidatorSuite.
Definition: validator.h:244
const std::vector< const UsdValidator * > & GetContainedValidators() const &
Returns a vector of const UsdValidator pointers, which make this UsdValidatorSuite.
Definition: validator.h:235
const UsdValidatorMetadata & GetMetadata() const &
Return metadata associated with this validator.
Definition: validator.h:250
USD_API UsdValidatorSuite(const UsdValidatorMetadata &metadata, const std::vector< const UsdValidator * > &validators)
Instantiate UsdValidatorSuite using metadata and a vector of validators.
std::function< UsdValidationErrorVector(const UsdStagePtr &)> UsdValidateStageTaskFn
UsdValidateStageTaskFn: Validation logic operating on a given UsdStage.
Definition: validator.h:98
std::function< UsdValidationErrorVector(const SdfLayerHandle &)> UsdValidateLayerTaskFn
UsdValidateLayerTaskFn: Validation logic operating on a given SdfLayerHandle.
Definition: validator.h:95
std::function< UsdValidationErrorVector(const UsdPrim &)> UsdValidatePrimTaskFn
UsdValidatePrimTaskFn: Validation logic operating on a given UsdPrim.
Definition: validator.h:101
STL namespace.
TfToken class for efficient string referencing and hashing, plus conversions to and from stl string c...
std::vector< TfToken > TfTokenVector
Convenience types.
Definition: token.h:440
PlugPluginPtr pluginPtr
Pointer to the plugin to which a plugin based validator belongs.
Definition: validator.h:59
bool isSuite
whether this test represents a test suite or not
Definition: validator.h:73
TfTokenVector schemaTypes
list of schemaTypes names this test applies to, extracted from plugInfo.json
Definition: validator.h:70
TfTokenVector keywords
list of keywords extracted for this test from the plugInfo.json
Definition: validator.h:62
std::string doc
doc string extracted from plugInfo.json This is a mandatory field for a ValidatorMetadata.
Definition: validator.h:66
TfToken name
Name of the validator.
Definition: validator.h:54
A structure which describes metadata for a UsdValidator.
Definition: validator.h:46