blob: eafafc23c1dd1053bc909fb4c020e2180a55cae0 [file] [log] [blame]
// Copyright (c) 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROMEOS_COMPONENTS_NEARBY_LIBRARY_EXCEPTION_H_
#define CHROMEOS_COMPONENTS_NEARBY_LIBRARY_EXCEPTION_H_
namespace location {
namespace nearby {
// TODO(kyleqian): Remove this file pending Nearby library import. This is a
// temporary placeholder for exception.h from the Nearby library. See bug
// #861813 -> https://crbug.com/861813.
struct Exception {
enum Value {
NONE,
IO,
INTERRUPTED,
INVALID_PROTOCOL_BUFFER,
EXECUTION,
};
};
// ExceptionOr models the concept of the return value of a function that might
// throw an exception.
//
// If ok() returns true, result() is a usable return value. Otherwise,
// exception() explains why such a value is not present.
//
// A typical pattern of usage is as follows:
//
// if (!e.ok()) {
// if (Exception::EXCEPTION_TYPE_1 == e.exception()) {
// // Handle Exception::EXCEPTION_TYPE_1.
// } else if (Exception::EXCEPTION_TYPE_2 == e.exception()) {
// // Handle Exception::EXCEPTION_TYPE_2.
// }
//
// return;
// }
//
// // Use e.result().
template <typename T>
class ExceptionOr {
public:
explicit ExceptionOr(T result);
explicit ExceptionOr(Exception::Value exception);
bool ok() const;
T result() const;
Exception::Value exception() const;
private:
T result_;
Exception::Value exception_;
};
} // namespace nearby
} // namespace location
#include "chromeos/components/nearby/library/exception.cc"
#endif // CHROMEOS_COMPONENTS_NEARBY_LIBRARY_EXCEPTION_H_