| // 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 PERIDOT_BIN_LEDGER_STORAGE_IMPL_DB_SERIALIZATION_H_ |
| #define PERIDOT_BIN_LEDGER_STORAGE_IMPL_DB_SERIALIZATION_H_ |
| |
| #include <lib/fxl/strings/string_view.h> |
| |
| #include "peridot/bin/ledger/storage/impl/page_db.h" |
| #include "peridot/bin/ledger/storage/public/types.h" |
| #include "peridot/lib/rng/random.h" |
| |
| namespace storage { |
| |
| class HeadRow { |
| public: |
| static constexpr fxl::StringView kPrefix = "heads/"; |
| |
| static std::string GetKeyFor(CommitIdView head); |
| }; |
| |
| class CommitRow { |
| public: |
| static constexpr fxl::StringView kPrefix = "commits/"; |
| |
| static std::string GetKeyFor(CommitIdView commit_id); |
| }; |
| |
| class ObjectRow { |
| public: |
| static constexpr fxl::StringView kPrefix = "objects/"; |
| |
| static std::string GetKeyFor(const ObjectDigest& object_digest); |
| }; |
| |
| class UnsyncedCommitRow { |
| public: |
| static constexpr fxl::StringView kPrefix = "unsynced/commits/"; |
| |
| static std::string GetKeyFor(const CommitId& commit_id); |
| }; |
| |
| class ObjectStatusRow { |
| public: |
| static constexpr fxl::StringView kTransientPrefix = |
| "transient/object_digests/"; |
| static constexpr fxl::StringView kLocalPrefix = "local/object_digests/"; |
| static constexpr fxl::StringView kSyncedPrefix = "synced/object_digests/"; |
| |
| static std::string GetKeyFor(PageDbObjectStatus object_status, |
| const ObjectIdentifier& object_identifier); |
| |
| private: |
| static fxl::StringView GetPrefixFor(PageDbObjectStatus object_status); |
| }; |
| |
| class ImplicitJournalMetadataRow { |
| public: |
| static constexpr fxl::StringView kPrefix = "journals/implicit_metadata/"; |
| |
| static std::string GetKeyFor(const JournalId& journal_id); |
| }; |
| |
| class SyncMetadataRow { |
| public: |
| static constexpr fxl::StringView kPrefix = "sync_metadata/"; |
| |
| static std::string GetKeyFor(fxl::StringView key); |
| }; |
| |
| class JournalEntryRow { |
| public: |
| // Journal keys |
| static const size_t kJournalIdSize = 16; |
| static constexpr fxl::StringView kPrefix = "journals/"; |
| |
| static constexpr fxl::StringView kJournalEntry = "entry/"; |
| static constexpr char kImplicitPrefix = 'I'; |
| static constexpr char kExplicitPrefix = 'E'; |
| static const size_t kPrefixSize = |
| kPrefix.size() + kJournalIdSize + 1 + kJournalEntry.size(); |
| |
| // Journal values |
| static constexpr char kClear = 'C'; |
| static constexpr char kAddPrefix = 'A'; |
| static constexpr fxl::StringView kDeletePrefix = "D"; |
| static const char kLazyPrefix = 'L'; |
| static const char kEagerPrefix = 'E'; |
| static const size_t kAddPrefixSize = 2; |
| |
| static std::string NewJournalId(rng::Random* random, |
| JournalType journal_type); |
| |
| static std::string GetPrefixFor(const JournalId& journal_id); |
| |
| static std::string GetEntriesPrefixFor(const JournalId& journal_id); |
| |
| static std::string GetKeyFor(const JournalId& id, fxl::StringView key); |
| |
| static std::string GetValueFor(const ObjectIdentifier& object_identifier, |
| KeyPriority priority); |
| |
| static std::string GetClearMarkerKey(const JournalId& id); |
| |
| static Status ExtractObjectIdentifier(fxl::StringView db_value, |
| ObjectIdentifier* object_identifier); |
| }; |
| |
| class PageIsOnlineRow { |
| public: |
| static constexpr fxl::StringView kKey = "page_is_online"; |
| }; |
| |
| } // namespace storage |
| |
| #endif // PERIDOT_BIN_LEDGER_STORAGE_IMPL_DB_SERIALIZATION_H_ |