|  | //===- RemarkFormat.cpp --------------------------------------------------===// | 
|  | // | 
|  | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | 
|  | // See https://llvm.org/LICENSE.txt for license information. | 
|  | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  | // | 
|  | // Implementation of utilities to handle the different remark formats. | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | #include "llvm/Remarks/RemarkFormat.h" | 
|  | #include "llvm/ADT/StringSwitch.h" | 
|  | #include "llvm/Remarks/BitstreamRemarkContainer.h" | 
|  |  | 
|  | using namespace llvm; | 
|  | using namespace llvm::remarks; | 
|  |  | 
|  | Expected<Format> llvm::remarks::parseFormat(StringRef FormatStr) { | 
|  | auto Result = StringSwitch<Format>(FormatStr) | 
|  | .Cases("", "yaml", Format::YAML) | 
|  | .Case("yaml-strtab", Format::YAMLStrTab) | 
|  | .Case("bitstream", Format::Bitstream) | 
|  | .Default(Format::Unknown); | 
|  |  | 
|  | if (Result == Format::Unknown) | 
|  | return createStringError(std::make_error_code(std::errc::invalid_argument), | 
|  | "Unknown remark format: '%s'", | 
|  | FormatStr.data()); | 
|  |  | 
|  | return Result; | 
|  | } | 
|  |  | 
|  | Expected<Format> llvm::remarks::magicToFormat(StringRef MagicStr) { | 
|  | auto Result = | 
|  | StringSwitch<Format>(MagicStr) | 
|  | .StartsWith("--- ", Format::YAML) // This is only an assumption. | 
|  | .StartsWith(remarks::Magic, Format::YAMLStrTab) | 
|  | .StartsWith(remarks::ContainerMagic, Format::Bitstream) | 
|  | .Default(Format::Unknown); | 
|  |  | 
|  | if (Result == Format::Unknown) | 
|  | return createStringError(std::make_error_code(std::errc::invalid_argument), | 
|  | "Unknown remark magic: '%s'", MagicStr.data()); | 
|  | return Result; | 
|  | } |