| 119 | } |
| 120 | |
| 121 | absl::StatusOr<absl::Time> ParseTimestamp(absl::string_view input) { |
| 122 | absl::Time timestamp; |
| 123 | std::string err; |
| 124 | if (!absl::ParseTime(absl::RFC3339_full, input, absl::UTCTimeZone(), |
| 125 | ×tamp, &err)) { |
| 126 | return err.empty() ? absl::InvalidArgumentError( |
| 127 | "Failed to parse timestamp from string") |
| 128 | : absl::InvalidArgumentError(absl::StrCat( |
| 129 | "Failed to parse timestamp from string: ", err)); |
| 130 | } |
| 131 | CEL_RETURN_IF_ERROR(ValidateTimestamp(timestamp)); |
| 132 | return timestamp; |
| 133 | } |
| 134 | |
| 135 | absl::StatusOr<std::string> FormatTimestamp(absl::Time timestamp) { |
| 136 | CEL_RETURN_IF_ERROR(ValidateTimestamp(timestamp)); |