| 207 | } |
| 208 | |
| 209 | absl::optional<int64_t> ValueAsInt64(const Value& value) { |
| 210 | if (auto int_value = value.AsInt(); int_value) { |
| 211 | return int_value->NativeValue(); |
| 212 | } else if (auto uint_value = value.AsUint(); |
| 213 | uint_value && |
| 214 | uint_value->NativeValue() <= std::numeric_limits<int64_t>::max()) { |
| 215 | return static_cast<int64_t>(uint_value->NativeValue()); |
| 216 | } else if (auto double_value = value.AsDouble(); |
| 217 | double_value && |
| 218 | static_cast<double>(static_cast<int64_t>( |
| 219 | double_value->NativeValue())) == double_value->NativeValue()) { |
| 220 | return static_cast<int64_t>(double_value->NativeValue()); |
| 221 | } |
| 222 | return absl::nullopt; |
| 223 | } |
| 224 | |
| 225 | absl::optional<uint32_t> ValueAsUInt32(const Value& value) { |
| 226 | if (auto int_value = value.AsInt(); |
no test coverage detected