blob: e95732096bde32fcf37336457a759352e3c6e965 [file] [log] [blame]
// Copyright 2017 The Fuchsia 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 COBALT_SRC_PUBLIC_LIB_CLOCK_INTERFACES_H_
#define COBALT_SRC_PUBLIC_LIB_CLOCK_INTERFACES_H_
#include <chrono>
#include <iomanip>
#include <optional>
#include <queue>
#include <sstream>
#include <string>
namespace cobalt::util {
// Allows us to mock out a clock for tests.
class SystemClockInterface {
public:
virtual ~SystemClockInterface() = default;
virtual std::chrono::system_clock::time_point now() = 0;
};
// Allows us to mock out a clock for tests.
class SteadyClockInterface {
public:
virtual ~SteadyClockInterface() = default;
virtual std::chrono::steady_clock::time_point now() = 0;
};
// An abstract interface to a clock that refuses to provide the time if a quality condition is not
// satisfied; for example, if the clock has not been initialized from a trustworthy source.
class ValidatedClockInterface {
public:
virtual ~ValidatedClockInterface() = default;
// Returns the current time if an accurate clock is avaliable or nullopt otherwise.
virtual std::optional<std::chrono::system_clock::time_point> now() = 0;
};
} // namespace cobalt::util
#endif // COBALT_SRC_PUBLIC_LIB_CLOCK_INTERFACES_H_