/workspaces/astro/sol3-sdk/cpp/sol3/core/message_schema.h Source File

Space-ng SDK: /workspaces/astro/sol3-sdk/cpp/sol3/core/message_schema.h Source File
Space-ng SDK
message_schema.h
Go to the documentation of this file.
1 // Copyright (c) Space-ng, inc. All rights reserved.
2 #pragma once
3 
4 #include "sol3/core/fb_json.h"
5 
6 #include <flatbuffers/idl.h>
7 #include <flatbuffers/reflection.h>
8 #include <flatbuffers/stl_emulation.h>
9 
10 namespace sol3::core {
11 
13  public:
15  enum class EvolutionPolicy {
19  ALWAYS,
24  };
25 
26  MessageSchema() = default;
28  flatbuffers::span<uint8_t const> schema_buffer, EvolutionPolicy policy);
29 
30  flatbuffers::span<uint8_t const> schemaBufferSpan() const {
31  return flatbuffers::span<uint8_t const>(
32  schema_buffer_->data(), schema_buffer_->size());
33  }
34 
35  reflection::Schema const* table() const;
36 
37  bool verify(flatbuffers::span<uint8_t const> buffer) const;
38 
39  operator bool() const;
40 
43  flatbuffers::Parser const& parser(
44  JsonFormat format = JsonFormat::SINGLE_LINE) const;
45 
47  std::string toJson(
48  flatbuffers::span<uint8_t const> buffer,
49  JsonFormat format = JsonFormat::SINGLE_LINE) const;
50 
52  bool operator==(MessageSchema const& schema) const;
53  bool operator!=(MessageSchema const& schema) const {
54  return !(*this == schema);
55  }
56 
63  std::string conformsTo(MessageSchema const& previous_schema) const;
64 
70  void evolve(MessageSchema const& new_schema);
71 
72  EvolutionPolicy policy() const { return policy_; }
73 
75  std::string fileIdentifierString() const;
76 
78  uint32_t fileIdentifier() const;
79 
80  private:
81  std::shared_ptr<std::vector<uint8_t>> schema_buffer_;
82  std::shared_ptr<flatbuffers::Parser> parser_;
84 };
85 } // namespace sol3::core
Definition: message_schema.h:12
reflection::Schema const * table() const
uint32_t fileIdentifier() const
Returns the flatbuffer file identifier, or 0 if not set.
void evolve(MessageSchema const &new_schema)
std::string fileIdentifierString() const
Returns the flatbuffer file identifier string, or empty if not set.
EvolutionPolicy policy() const
Definition: message_schema.h:72
std::string conformsTo(MessageSchema const &previous_schema) const
MessageSchema(flatbuffers::span< uint8_t const > schema_buffer, EvolutionPolicy policy)
flatbuffers::span< uint8_t const > schemaBufferSpan() const
Definition: message_schema.h:30
bool verify(flatbuffers::span< uint8_t const > buffer) const
flatbuffers::Parser const & parser(JsonFormat format=JsonFormat::SINGLE_LINE) const
std::string toJson(flatbuffers::span< uint8_t const > buffer, JsonFormat format=JsonFormat::SINGLE_LINE) const
Convert a verified buffer to JSON using this schema.
bool operator==(MessageSchema const &schema) const
Tests if the schema is byte for byte equivalent to the current schema.
bool operator!=(MessageSchema const &schema) const
Definition: message_schema.h:53
EvolutionPolicy
How should this schema evolve.
Definition: message_schema.h:15
Definition: any_message_input.h:15
JsonFormat
Definition: fb_json.h:14