| // Copyright 2019 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "base/util/values/values_util.h" |
| |
| #include "base/strings/string_number_conversions.h" |
| |
| namespace util { |
| |
| base::Value Int64ToValue(int64_t integer) { |
| return base::Value(base::NumberToString(integer)); |
| } |
| |
| base::Optional<int64_t> ValueToInt64(const base::Value* value) { |
| return value ? ValueToInt64(*value) : base::nullopt; |
| } |
| |
| base::Optional<int64_t> ValueToInt64(const base::Value& value) { |
| if (!value.is_string()) |
| return base::nullopt; |
| |
| int64_t integer; |
| if (!base::StringToInt64(value.GetString(), &integer)) |
| return base::nullopt; |
| |
| return integer; |
| } |
| |
| base::Value TimeDeltaToValue(base::TimeDelta time_delta) { |
| return Int64ToValue(time_delta.InMicroseconds()); |
| } |
| |
| base::Optional<base::TimeDelta> ValueToTimeDelta(const base::Value* value) { |
| return value ? ValueToTimeDelta(*value) : base::nullopt; |
| } |
| |
| base::Optional<base::TimeDelta> ValueToTimeDelta(const base::Value& value) { |
| base::Optional<int64_t> integer = ValueToInt64(value); |
| if (!integer) |
| return base::nullopt; |
| return base::TimeDelta::FromMicroseconds(*integer); |
| } |
| |
| base::Value TimeToValue(base::Time time) { |
| return TimeDeltaToValue(time.ToDeltaSinceWindowsEpoch()); |
| } |
| |
| base::Optional<base::Time> ValueToTime(const base::Value* value) { |
| return value ? ValueToTime(*value) : base::nullopt; |
| } |
| |
| base::Optional<base::Time> ValueToTime(const base::Value& value) { |
| base::Optional<base::TimeDelta> time_delta = ValueToTimeDelta(value); |
| if (!time_delta) |
| return base::nullopt; |
| return base::Time::FromDeltaSinceWindowsEpoch(*time_delta); |
| } |
| |
| } // namespace util |