Libraries/ConfigDB/src/include/ConfigDB/Format.h
Go to the documentation of this file.
1 /****
2  * ConfigDB/Format.h
3  *
4  * Copyright 2024 mikee47 <mike@sillyhouse.net>
5  *
6  * This file is part of the ConfigDB Library
7  *
8  * This library is free software: you can redistribute it and/or modify it under the terms of the
9  * GNU General Public License as published by the Free Software Foundation, version 3 or later.
10  *
11  * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
12  * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13  * See the GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along with this library.
16  * If not, see <https://www.gnu.org/licenses/>.
17  *
18  ****/
19 
20 #pragma once
21 
23 #include "Status.h"
24 #include "StoreRef.h"
25 
26 namespace ConfigDB
27 {
28 class Database;
29 class Store;
30 class Object;
31 
36 {
37 public:
41  virtual Status getStatus() const = 0;
42 };
43 
47 struct ExportOptions {
51  bool useName{false};
52 
58  bool asObject{false};
59 
63  bool pretty{false};
64 };
65 
70 {
71 public:
75  virtual Status getStatus() const = 0;
76 };
77 
81 class Format
82 {
83 public:
91  virtual std::unique_ptr<ExportStream> createExportStream(Database& db, const ExportOptions& options = {}) const = 0;
92 
101  virtual std::unique_ptr<ExportStream> createExportStream(StoreRef store, const Object& object,
102  const ExportOptions& options = {}) const = 0;
103 
111  virtual size_t exportToStream(const Object& object, Print& output, const ExportOptions& options = {}) const = 0;
112 
120  virtual size_t exportToStream(Database& database, Print& output, const ExportOptions& options = {}) const = 0;
121 
126  virtual std::unique_ptr<ImportStream> createImportStream(Database& db) const = 0;
127 
135  virtual std::unique_ptr<ImportStream> createImportStream(StoreUpdateRef& store, Object& object) const = 0;
136 
140  virtual Status importFromStream(Object& object, Stream& source) const = 0;
141 
147  virtual Status importFromStream(Database& database, Stream& source) const = 0;
148 
152  virtual String getFileExtension() const = 0;
153 
157  virtual MimeType getMimeType() const = 0;
158 };
159 
160 } // namespace ConfigDB
Definition: Database.h:30
Interface for formatted export stream.
Definition: Libraries/ConfigDB/src/include/ConfigDB/Format.h:70
virtual Status getStatus() const =0
Get current status of export.
virtual MimeType getMimeType() const =0
Get the MIME type for this reader format.
virtual std::unique_ptr< ExportStream > createExportStream(Database &db, const ExportOptions &options={}) const =0
Create a stream to serialize the entire database.
virtual size_t exportToStream(const Object &object, Print &output, const ExportOptions &options={}) const =0
Print object.
virtual Status importFromStream(Object &object, Stream &source) const =0
De-serialise content from stream into object (RAM)
virtual std::unique_ptr< ExportStream > createExportStream(StoreRef store, const Object &object, const ExportOptions &options={}) const =0
Create a stream to serialize an Object.
virtual size_t exportToStream(Database &database, Print &output, const ExportOptions &options={}) const =0
Serialise entire database directly to an output stream.
virtual std::unique_ptr< ImportStream > createImportStream(StoreUpdateRef &store, Object &object) const =0
Create a stream for de-serialising (writing) into a store.
virtual std::unique_ptr< ImportStream > createImportStream(Database &db) const =0
Create a stream for de-serialising (writing) into the database Used when updating a database from a r...
virtual String getFileExtension() const =0
Get the standard file extension for the reader implementation.
virtual Status importFromStream(Database &database, Stream &source) const =0
De-serialise content from stream into database Each store is overwritten as it is loadded....
Interface for formatted import stream.
Definition: Libraries/ConfigDB/src/include/ConfigDB/Format.h:36
virtual Status getStatus() const =0
Get current status of import.
An object can contain other objects, properties and arrays.
Definition: Libraries/ConfigDB/src/include/ConfigDB/Object.h:37
Holds a strong reference to a store instance for reading.
Definition: StoreRef.h:32
Holds a strong reference to a store instance for writing (updating)
Definition: StoreRef.h:52
Base class for read-only stream.
Definition: DataSourceStream.h:46
Provides formatted output to stream.
Definition: Print.h:37
Base class for read/write stream.
Definition: ReadWriteStream.h:20
Base Stream class.
Definition: Wiring/Stream.h:33
The String class.
Definition: WString.h:133
MimeType
Definition: WebConstants.h:53
Definition: Array.h:26
Definition: Formatter.h:20
Options for streaming object output.
Definition: Libraries/ConfigDB/src/include/ConfigDB/Format.h:47
bool useName
Include the object name in output.
Definition: Libraries/ConfigDB/src/include/ConfigDB/Format.h:51
bool pretty
Set compact (default) or prettified output.
Definition: Libraries/ConfigDB/src/include/ConfigDB/Format.h:63
bool asObject
Wrap everything as an object definition.
Definition: Libraries/ConfigDB/src/include/ConfigDB/Format.h:58
Stores import/export stream status information.
Definition: Status.h:57