15#ifndef ACTIONENGINE_DATA_CONVERSION_H_ 
   16#define ACTIONENGINE_DATA_CONVERSION_H_ 
   18#include <absl/base/nullability.h> 
   19#include <absl/log/log.h> 
   20#include <absl/status/status.h> 
   21#include <absl/status/statusor.h> 
   22#include <absl/strings/str_cat.h> 
   27absl::Status EgltAssignInto(T&& from, std::string* absl_nonnull to) {
 
   28  *to = absl::StrCat(std::forward<T>(from));
 
   29  return absl::OkStatus();
 
   32template <
typename Dst, 
typename Src>
 
   33absl::Status Assign(Src&& from, Dst* absl_nonnull to) {
 
   34  return EgltAssignInto(std::forward<Src>(from), to);
 
   37template <
typename Dst, 
typename Src>
 
   38void AssignOrDie(Src&& from, Dst* absl_nonnull to) {
 
   39  if (
const absl::Status status = Assign(std::forward<Src>(from), to);
 
   41    LOG(FATAL) << 
"Conversion failed: " << status;
 
   46template <
typename Dst, 
typename Src>
 
   47absl::StatusOr<Dst> ConvertTo(Src&& from) {
 
   49  if (
auto status = Assign(std::forward<Src>(from), &result); !status.ok()) {
 
   55template <
typename Dst, 
typename Src>
 
   56Dst ConvertToOrDie(Src&& from) {
 
   57  if (
auto result = ConvertTo<Dst>(std::forward<Src>(from)); !result.ok()) {
 
   58    LOG(FATAL) << 
"Conversion failed: " << result.status();