1*6777b538SAndroid Build Coastguard Worker // Copyright 2019 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef BASE_JSON_VALUES_UTIL_H_ 6*6777b538SAndroid Build Coastguard Worker #define BASE_JSON_VALUES_UTIL_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <optional> 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Worker #include "base/base_export.h" 11*6777b538SAndroid Build Coastguard Worker #include "base/values.h" 12*6777b538SAndroid Build Coastguard Worker 13*6777b538SAndroid Build Coastguard Worker namespace base { 14*6777b538SAndroid Build Coastguard Worker class FilePath; 15*6777b538SAndroid Build Coastguard Worker class Time; 16*6777b538SAndroid Build Coastguard Worker class TimeDelta; 17*6777b538SAndroid Build Coastguard Worker class UnguessableToken; 18*6777b538SAndroid Build Coastguard Worker 19*6777b538SAndroid Build Coastguard Worker // Simple helper functions for converting between Value and other types. 20*6777b538SAndroid Build Coastguard Worker // The Value representation is stable, suitable for persistent storage 21*6777b538SAndroid Build Coastguard Worker // e.g. as JSON on disk. 22*6777b538SAndroid Build Coastguard Worker // 23*6777b538SAndroid Build Coastguard Worker // It is valid to pass nullptr to the ValueToEtc functions. They will just 24*6777b538SAndroid Build Coastguard Worker // return std::nullopt. 25*6777b538SAndroid Build Coastguard Worker 26*6777b538SAndroid Build Coastguard Worker // Converts between an int64_t and a string-flavored Value (a human 27*6777b538SAndroid Build Coastguard Worker // readable string of that number). 28*6777b538SAndroid Build Coastguard Worker BASE_EXPORT Value Int64ToValue(int64_t integer); 29*6777b538SAndroid Build Coastguard Worker BASE_EXPORT std::optional<int64_t> ValueToInt64(const Value* value); 30*6777b538SAndroid Build Coastguard Worker BASE_EXPORT std::optional<int64_t> ValueToInt64(const Value& value); 31*6777b538SAndroid Build Coastguard Worker 32*6777b538SAndroid Build Coastguard Worker // Converts between a TimeDelta (an int64_t number of microseconds) and a 33*6777b538SAndroid Build Coastguard Worker // string-flavored Value (a human readable string of that number). 34*6777b538SAndroid Build Coastguard Worker BASE_EXPORT Value TimeDeltaToValue(TimeDelta time_delta); 35*6777b538SAndroid Build Coastguard Worker BASE_EXPORT std::optional<TimeDelta> ValueToTimeDelta(const Value* value); 36*6777b538SAndroid Build Coastguard Worker BASE_EXPORT std::optional<TimeDelta> ValueToTimeDelta(const Value& value); 37*6777b538SAndroid Build Coastguard Worker 38*6777b538SAndroid Build Coastguard Worker // Converts between a Time (an int64_t number of microseconds since the 39*6777b538SAndroid Build Coastguard Worker // Windows epoch) and a string-flavored Value (a human readable string of 40*6777b538SAndroid Build Coastguard Worker // that number). 41*6777b538SAndroid Build Coastguard Worker BASE_EXPORT Value TimeToValue(Time time); 42*6777b538SAndroid Build Coastguard Worker BASE_EXPORT std::optional<Time> ValueToTime(const Value* value); 43*6777b538SAndroid Build Coastguard Worker BASE_EXPORT std::optional<Time> ValueToTime(const Value& value); 44*6777b538SAndroid Build Coastguard Worker 45*6777b538SAndroid Build Coastguard Worker // Converts between a FilePath (a std::string or std::u16string) and a 46*6777b538SAndroid Build Coastguard Worker // string-flavored Value (the UTF-8 representation). 47*6777b538SAndroid Build Coastguard Worker BASE_EXPORT Value FilePathToValue(FilePath file_path); 48*6777b538SAndroid Build Coastguard Worker BASE_EXPORT std::optional<FilePath> ValueToFilePath(const Value* value); 49*6777b538SAndroid Build Coastguard Worker BASE_EXPORT std::optional<FilePath> ValueToFilePath(const Value& value); 50*6777b538SAndroid Build Coastguard Worker 51*6777b538SAndroid Build Coastguard Worker // Converts between a UnguessableToken (128 bits) and a string-flavored 52*6777b538SAndroid Build Coastguard Worker // Value (32 hexadecimal digits). 53*6777b538SAndroid Build Coastguard Worker BASE_EXPORT Value UnguessableTokenToValue(UnguessableToken token); 54*6777b538SAndroid Build Coastguard Worker BASE_EXPORT std::optional<UnguessableToken> ValueToUnguessableToken( 55*6777b538SAndroid Build Coastguard Worker const Value* value); 56*6777b538SAndroid Build Coastguard Worker BASE_EXPORT std::optional<UnguessableToken> ValueToUnguessableToken( 57*6777b538SAndroid Build Coastguard Worker const Value& value); 58*6777b538SAndroid Build Coastguard Worker 59*6777b538SAndroid Build Coastguard Worker } // namespace base 60*6777b538SAndroid Build Coastguard Worker 61*6777b538SAndroid Build Coastguard Worker #endif // BASE_JSON_VALUES_UTIL_H_ 62