Skip to content

Commit 018ba15

Browse files
committed
FileSource cleanups
- Add documentation - Use `std::string_view` rather than `std::string` - Expose formatting operations with abseil, libfmt, and ostream Bug: b/464085167
1 parent 411f757 commit 018ba15

File tree

4 files changed

+55
-22
lines changed

4 files changed

+55
-22
lines changed

base/cvd/cuttlefish/host/libs/config/BUILD.bazel

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,11 @@ cf_cc_library(
219219
name = "file_source",
220220
srcs = ["file_source.cc"],
221221
hdrs = ["file_source.h"],
222+
deps = [
223+
"@abseil-cpp//absl/strings",
224+
"@abseil-cpp//absl/strings:str_format",
225+
"@fmt",
226+
],
222227
)
223228

224229
cf_cc_library(

base/cvd/cuttlefish/host/libs/config/fetcher_config.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ CvdFile JsonToCvdFile(const std::string& file_path, const Json::Value& json) {
165165

166166
Json::Value CvdFileToJson(const CvdFile& cvd_file) {
167167
Json::Value json;
168-
json[kCvdFileSource] = SourceEnumToString(cvd_file.source);
168+
json[kCvdFileSource] = std::string(SourceEnumToString(cvd_file.source));
169169
json[kCvdFileBuildId] = cvd_file.build_id;
170170
json[kCvdFileBuildTarget] = cvd_file.build_target;
171171
json[kCvdFileArchiveSource] = cvd_file.archive_source;

base/cvd/cuttlefish/host/libs/config/file_source.cc

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,41 +16,40 @@
1616

1717
#include "cuttlefish/host/libs/config/file_source.h"
1818

19-
#include <cctype>
20-
#include <string>
19+
#include <ostream>
20+
#include <string_view>
21+
22+
#include "absl/strings/match.h"
2123

2224
namespace cuttlefish {
2325

24-
FileSource SourceStringToEnum(std::string source) {
25-
for (auto& c : source) {
26-
c = std::tolower(c);
27-
}
28-
if (source == "default_build") {
26+
FileSource SourceStringToEnum(std::string_view source) {
27+
if (absl::EqualsIgnoreCase(source, "default_build")) {
2928
return FileSource::DEFAULT_BUILD;
30-
} else if (source == "system_build") {
29+
} else if (absl::EqualsIgnoreCase(source, "system_build")) {
3130
return FileSource::SYSTEM_BUILD;
32-
} else if (source == "kernel_build") {
31+
} else if (absl::EqualsIgnoreCase(source, "kernel_build")) {
3332
return FileSource::KERNEL_BUILD;
34-
} else if (source == "local_file") {
33+
} else if (absl::EqualsIgnoreCase(source, "local_file")) {
3534
return FileSource::LOCAL_FILE;
36-
} else if (source == "generated") {
35+
} else if (absl::EqualsIgnoreCase(source, "generated")) {
3736
return FileSource::GENERATED;
38-
} else if (source == "bootloader_build") {
37+
} else if (absl::EqualsIgnoreCase(source, "bootloader_build")) {
3938
return FileSource::BOOTLOADER_BUILD;
40-
} else if (source == "android_efi_loader_build") {
39+
} else if (absl::EqualsIgnoreCase(source, "android_efi_loader_build")) {
4140
return FileSource::ANDROID_EFI_LOADER_BUILD;
42-
} else if (source == "boot_build") {
41+
} else if (absl::EqualsIgnoreCase(source, "boot_build")) {
4342
return FileSource::BOOT_BUILD;
44-
} else if (source == "host_package_build") {
43+
} else if (absl::EqualsIgnoreCase(source, "host_package_build")) {
4544
return FileSource::HOST_PACKAGE_BUILD;
46-
} else if (source == "chrome_os_build") {
45+
} else if (absl::EqualsIgnoreCase(source, "chrome_os_build")) {
4746
return FileSource::CHROME_OS_BUILD;
4847
} else {
4948
return FileSource::UNKNOWN_PURPOSE;
5049
}
5150
}
5251

53-
std::string SourceEnumToString(const FileSource& source) {
52+
std::string_view SourceEnumToString(FileSource source) {
5453
if (source == FileSource::DEFAULT_BUILD) {
5554
return "default_build";
5655
} else if (source == FileSource::SYSTEM_BUILD) {
@@ -76,4 +75,8 @@ std::string SourceEnumToString(const FileSource& source) {
7675
}
7776
}
7877

78+
std::ostream& operator<<(std::ostream& out, FileSource source) {
79+
return out << SourceEnumToString(source);
80+
}
81+
7982
} // namespace cuttlefish

base/cvd/cuttlefish/host/libs/config/file_source.h

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,22 @@
1515
*/
1616
#pragma once
1717

18-
#include <string>
18+
#include <ostream>
19+
#include <string_view>
20+
21+
#include "absl/strings/str_format.h"
22+
#include "fmt/ostream.h"
1923

2024
namespace cuttlefish {
2125

22-
// Order in enum is not guaranteed to be stable, serialized as a string.
26+
/**
27+
* When a file is downloaded from `cvd fetch`, this is the "reason" the file is
28+
* downloaded. More specifically, whether it corresponds to the
29+
* `--default_build` argument, the `--system_build` argument, `--kernel_build`,
30+
* et cetera.
31+
*
32+
* Order in enum is not guaranteed to be stable, serialized as a string.
33+
*/
2334
enum class FileSource {
2435
UNKNOWN_PURPOSE = 0,
2536
DEFAULT_BUILD,
@@ -34,7 +45,21 @@ enum class FileSource {
3445
CHROME_OS_BUILD,
3546
};
3647

37-
FileSource SourceStringToEnum(std::string source);
38-
std::string SourceEnumToString(const FileSource& source);
48+
FileSource SourceStringToEnum(std::string_view source);
49+
std::string_view SourceEnumToString(FileSource source);
50+
51+
std::ostream& operator<<(std::ostream&, FileSource);
52+
53+
template <typename Sink>
54+
void AbslStringify(Sink& sink, FileSource file_source) {
55+
sink.Append(SourceEnumToString(file_source));
56+
}
3957

4058
} // namespace cuttlefish
59+
60+
namespace fmt {
61+
62+
template <>
63+
struct formatter<::cuttlefish::FileSource> : ostream_formatter {};
64+
65+
} // namespace fmt

0 commit comments

Comments
 (0)