| // 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 |