xref: /aosp_15_r20/external/cronet/base/json/values_util.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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