blob: 1ae0e8c7bfe4c19b170e415b5fc674b92e164810 [file] [log] [blame]
// Copyright 2016 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 SRC_LEDGER_BIN_STORAGE_PUBLIC_COMMIT_H_
#define SRC_LEDGER_BIN_STORAGE_PUBLIC_COMMIT_H_
#include <lib/zx/time.h>
#include <memory>
#include <string>
#include <vector>
#include "src/ledger/bin/storage/public/types.h"
#include "src/lib/fxl/macros.h"
namespace storage {
class Commit {
public:
Commit() {}
virtual ~Commit() {}
// Returns a copy of the commit.
virtual std::unique_ptr<const Commit> Clone() const = 0;
// Returns the id of this commit.
virtual const CommitId& GetId() const = 0;
// Returns the ids of this commit's parents.
virtual std::vector<CommitIdView> GetParentIds() const = 0;
// Returns the creation timestamp of this commit in nanoseconds since epoch.
virtual zx::time_utc GetTimestamp() const = 0;
// Returns the generation of this commit (ie. the number of commits to the
// root).
virtual uint64_t GetGeneration() const = 0;
// Returns the id of the root node of this commit.
virtual ObjectIdentifier GetRootIdentifier() const = 0;
// Returns the byte representation of this |Commit| as they will be synced to
// the cloud.
virtual fxl::StringView GetStorageBytes() const = 0;
static bool TimestampOrdered(const std::unique_ptr<const Commit>& commit1,
const std::unique_ptr<const Commit>& commit2);
private:
FXL_DISALLOW_COPY_AND_ASSIGN(Commit);
};
} // namespace storage
#endif // SRC_LEDGER_BIN_STORAGE_PUBLIC_COMMIT_H_