// Copyright 2021 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "missive/util/statusor.h"

#include <base/logging.h>
#include <base/no_destructor.h>

namespace reporting {
namespace internal {

// static
const Status& StatusOrHelper::NotInitializedStatus() {
  static base::NoDestructor<Status> status_not_initialized(error::UNKNOWN,
                                                           "Not initialized");
  return *status_not_initialized;
}

// static
const Status& StatusOrHelper::MovedOutStatus() {
  static base::NoDestructor<Status> status_moved_out(error::UNKNOWN,
                                                     "Value moved out");
  return *status_moved_out;
}

// static
void StatusOrHelper::Crash(const Status& status) {
  LOG(FATAL) << "Attempting to fetch value instead of handling error "
             << status.ToString();
}

}  // namespace internal
}  // namespace reporting
