diff --git a/common/values/duration_value.h b/common/values/duration_value.h index 714caee71..1b2468b60 100644 --- a/common/values/duration_value.h +++ b/common/values/duration_value.h @@ -25,7 +25,7 @@ #include "absl/base/nullability.h" #include "absl/log/absl_check.h" #include "absl/status/status.h" -#include "absl/strings/cord.h" +#include "absl/status/statusor.h" #include "absl/strings/string_view.h" #include "absl/time/time.h" #include "absl/utility/utility.h" @@ -44,6 +44,7 @@ class Value; class DurationValue; DurationValue UnsafeDurationValue(absl::Duration value); +absl::StatusOr SafeDurationValue(absl::Duration value); // `DurationValue` represents values of the primitive `duration` type. class DurationValue final : private common_internal::ValueMixin { @@ -125,6 +126,14 @@ inline DurationValue UnsafeDurationValue(absl::Duration value) { return DurationValue(absl::in_place, value); } +inline absl::StatusOr SafeDurationValue(absl::Duration value) { + absl::Status status = internal::ValidateDuration(value); + if (!status.ok()) { + return status; + } + return UnsafeDurationValue(value); +} + inline bool operator!=(DurationValue lhs, DurationValue rhs) { return !operator==(lhs, rhs); } diff --git a/common/values/timestamp_value.h b/common/values/timestamp_value.h index 719011122..acc202300 100644 --- a/common/values/timestamp_value.h +++ b/common/values/timestamp_value.h @@ -25,6 +25,7 @@ #include "absl/base/nullability.h" #include "absl/log/absl_check.h" #include "absl/status/status.h" +#include "absl/status/statusor.h" #include "absl/strings/string_view.h" #include "absl/time/time.h" #include "absl/utility/utility.h" @@ -43,6 +44,7 @@ class Value; class TimestampValue; TimestampValue UnsafeTimestampValue(absl::Time value); +absl::StatusOr SafeTimestampValue(absl::Time value); // `TimestampValue` represents values of the primitive `timestamp` type. class TimestampValue final @@ -123,6 +125,14 @@ inline TimestampValue UnsafeTimestampValue(absl::Time value) { return TimestampValue(absl::in_place, value); } +inline absl::StatusOr SafeTimestampValue(absl::Time value) { + absl::Status status = internal::ValidateTimestamp(value); + if (!status.ok()) { + return status; + } + return UnsafeTimestampValue(value); +} + inline bool operator!=(TimestampValue lhs, TimestampValue rhs) { return !operator==(lhs, rhs); }