| 188 | namespace { |
| 189 | |
| 190 | absl::optional<int32_t> ValueAsInt32(const Value& value) { |
| 191 | if (auto int_value = value.AsInt(); |
| 192 | int_value && |
| 193 | int_value->NativeValue() >= std::numeric_limits<int32_t>::min() && |
| 194 | int_value->NativeValue() <= std::numeric_limits<int32_t>::max()) { |
| 195 | return static_cast<int32_t>(int_value->NativeValue()); |
| 196 | } else if (auto uint_value = value.AsUint(); |
| 197 | uint_value && |
| 198 | uint_value->NativeValue() <= std::numeric_limits<int32_t>::max()) { |
| 199 | return static_cast<int32_t>(uint_value->NativeValue()); |
| 200 | } else if (auto double_value = value.AsDouble(); |
| 201 | double_value && |
| 202 | static_cast<double>(static_cast<int32_t>( |
| 203 | double_value->NativeValue())) == double_value->NativeValue()) { |
| 204 | return static_cast<int32_t>(double_value->NativeValue()); |
| 205 | } |
| 206 | return absl::nullopt; |
| 207 | } |
| 208 | |
| 209 | absl::optional<int64_t> ValueAsInt64(const Value& value) { |
| 210 | if (auto int_value = value.AsInt(); int_value) { |
no test coverage detected