blob: fe1425e02438152e4a5f122db96ed09e12bd5ff6 [file] [edit]
// Copyright 2026 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/command_line_rust_shim.h"
#include <memory>
#include <string>
#include <string_view>
#include <vector>
#include "base/command_line.h"
#include "base/files/file_path.h"
#include "base/process/launch.h"
#include "base/strings/utf_string_conversions.h"
#include "build/build_config.h"
namespace base::rust {
std::unique_ptr<base::CommandLine> NewForProgram(::rust::Str program) {
#if BUILDFLAG(IS_WIN)
std::wstring wprogram = base::UTF8ToWide(std::string_view{program});
return std::make_unique<base::CommandLine>(base::FilePath(wprogram));
#else
std::string sprogram(program);
return std::make_unique<base::CommandLine>(base::FilePath(sprogram));
#endif
}
bool HasSwitch(const base::CommandLine& cmd, ::rust::Str switch_string) {
return cmd.HasSwitch(std::string_view{switch_string});
}
::rust::String GetSwitchValueASCII(const base::CommandLine& cmd,
::rust::Str switch_string) {
return ::rust::String(
cmd.GetSwitchValueASCII(std::string_view{switch_string}));
}
void AppendSwitch(base::CommandLine& cmd, ::rust::Str switch_string) {
cmd.AppendSwitch(std::string_view{switch_string});
}
void AppendSwitchASCII(base::CommandLine& cmd,
::rust::Str switch_string,
::rust::Str value) {
cmd.AppendSwitchASCII(std::string_view{switch_string},
std::string_view{value});
}
void RemoveSwitch(base::CommandLine& cmd, ::rust::Str switch_string) {
cmd.RemoveSwitch(std::string_view{switch_string});
}
void AppendArg(base::CommandLine& cmd, ::rust::Str value) {
cmd.AppendArg(std::string_view{value});
}
::rust::Vec<::rust::String> GetArgs(const base::CommandLine& cmd) {
::rust::Vec<::rust::String> result;
for (const auto& arg : cmd.GetArgs()) {
#if BUILDFLAG(IS_WIN)
result.push_back(::rust::String(base::WideToUTF8(arg)));
#else
result.push_back(::rust::String(arg));
#endif
}
return result;
}
::rust::String GetProgram(const base::CommandLine& cmd) {
#if BUILDFLAG(IS_WIN)
return ::rust::String(base::WideToUTF8(cmd.GetProgram().value()));
#else
return ::rust::String(cmd.GetProgram().value());
#endif
}
bool GetAppOutput(const base::CommandLine& cmd, ::rust::String& output) {
std::string std_output;
bool result = base::GetAppOutput(cmd, &std_output);
output = ::rust::String(std_output);
return result;
}
} // namespace base::rust