| 150 | } |
| 151 | |
| 152 | absl::StatusOr<std::string> EncodeDurationToJson(absl::Duration duration) { |
| 153 | // Adapted from protobuf time_util. |
| 154 | CEL_RETURN_IF_ERROR(ValidateDuration(duration)); |
| 155 | std::string result; |
| 156 | int64_t seconds = absl::IDivDuration(duration, absl::Seconds(1), &duration); |
| 157 | int64_t nanos = absl::IDivDuration(duration, absl::Nanoseconds(1), &duration); |
| 158 | |
| 159 | if (seconds < 0 || nanos < 0) { |
| 160 | result = "-"; |
| 161 | seconds = -seconds; |
| 162 | nanos = -nanos; |
| 163 | } |
| 164 | |
| 165 | absl::StrAppend(&result, seconds); |
| 166 | if (nanos != 0) { |
| 167 | absl::StrAppend(&result, ".", FormatNanos(nanos)); |
| 168 | } |
| 169 | |
| 170 | absl::StrAppend(&result, "s"); |
| 171 | return result; |
| 172 | } |
| 173 | |
| 174 | absl::StatusOr<std::string> EncodeTimestampToJson(absl::Time timestamp) { |
| 175 | // Adapted from protobuf time_util. |