diff options
Diffstat (limited to 'ink_stroke_modeler/types.cc')
-rw-r--r-- | ink_stroke_modeler/types.cc | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/ink_stroke_modeler/types.cc b/ink_stroke_modeler/types.cc new file mode 100644 index 0000000..9864ea3 --- /dev/null +++ b/ink_stroke_modeler/types.cc @@ -0,0 +1,36 @@ +#include "ink_stroke_modeler/types.h" + +#include "absl/status/status.h" +#include "ink_stroke_modeler/internal/validation.h" + +// This convenience macro evaluates the given expression, and if it does not +// return an OK status, returns and propagates the status. +#define RETURN_IF_ERROR(expr) \ + do { \ + if (auto status = (expr); !status.ok()) return status; \ + } while (false) + +namespace ink { +namespace stroke_model { + +absl::Status ValidateInput(const Input& input) { + switch (input.event_type) { + case Input::EventType::kUp: + case Input::EventType::kMove: + case Input::EventType::kDown: + break; + default: + return absl::InvalidArgumentError("Unknown Input.event_type."); + } + RETURN_IF_ERROR(ValidateIsFiniteNumber(input.position.x, "Input.position.x")); + RETURN_IF_ERROR(ValidateIsFiniteNumber(input.position.y, "Input.position.y")); + RETURN_IF_ERROR(ValidateIsFiniteNumber(input.time.Value(), "Input.time")); + RETURN_IF_ERROR(ValidateIsFiniteNumber(input.pressure, "Input.pressure")); + RETURN_IF_ERROR(ValidateIsFiniteNumber(input.tilt, "Input.tilt")); + RETURN_IF_ERROR( + ValidateIsFiniteNumber(input.orientation, "Input.orientation")); + return absl::OkStatus(); +} + +} // namespace stroke_model +} // namespace ink |