Avro C++

Schema.hh
Go to the documentation of this file.
1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * https://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18
19 #ifndef avro_Schema_hh__
20 #define avro_Schema_hh__
21
22 #include "Config.hh"
23 #include "NodeImpl.hh"
24 #include "CustomAttributes.hh"
25 #include <string>
26
32
33 namespace avro {
34
36
37 class AVRO_DECL Schema {
38 public:
39 virtual ~Schema() = default;
40
41 Type type() const {
42 return node_->type();
43 }
44
45 const NodePtr &root() const {
46 return node_;
47 }
48
49 NodePtr &root() {
50 return node_;
51 }
52
53 protected:
54 explicit Schema(NodePtr node) : node_(std::move(node)) {}
55 explicit Schema(Node *node) : node_(node) {}
56
57 NodePtr node_;
58 };
59
60 class AVRO_DECL NullSchema : public Schema {
61 public:
62 NullSchema() : Schema(new NodePrimitive(AVRO_NULL)) {}
63 };
64
65 class AVRO_DECL BoolSchema : public Schema {
66 public:
67 BoolSchema() : Schema(new NodePrimitive(AVRO_BOOL)) {}
68 };
69
70 class AVRO_DECL IntSchema : public Schema {
71 public:
72 IntSchema() : Schema(new NodePrimitive(AVRO_INT)) {}
73 };
74
75 class AVRO_DECL LongSchema : public Schema {
76 public:
77 LongSchema() : Schema(new NodePrimitive(AVRO_LONG)) {}
78 };
79
80 class AVRO_DECL FloatSchema : public Schema {
81 public:
82 FloatSchema() : Schema(new NodePrimitive(AVRO_FLOAT)) {}
83 };
84
85 class AVRO_DECL DoubleSchema : public Schema {
86 public:
87 DoubleSchema() : Schema(new NodePrimitive(AVRO_DOUBLE)) {}
88 };
89
90 class AVRO_DECL StringSchema : public Schema {
91 public:
92 StringSchema() : Schema(new NodePrimitive(AVRO_STRING)) {}
93 };
94
95 class AVRO_DECL BytesSchema : public Schema {
96 public:
97 BytesSchema() : Schema(new NodePrimitive(AVRO_BYTES)) {}
98 };
99
100 class AVRO_DECL RecordSchema : public Schema {
101 public:
102 explicit RecordSchema(const std::string &name);
103 void addField(const std::string &name, const Schema &fieldSchema);
104 // Add a field with custom attributes
105 void addField(const std::string &name, const Schema &fieldSchema,
106 const CustomAttributes &customAttributes);
107
108 std::string getDoc() const;
109 void setDoc(const std::string &);
110 };
111
112 class AVRO_DECL EnumSchema : public Schema {
113 public:
114 explicit EnumSchema(const std::string &name);
115 void addSymbol(const std::string &symbol);
116 };
117
118 class AVRO_DECL ArraySchema : public Schema {
119 public:
120 explicit ArraySchema(const Schema &itemsSchema);
121 ArraySchema(const ArraySchema &itemsSchema);
122 };
123
124 class AVRO_DECL MapSchema : public Schema {
125 public:
126 explicit MapSchema(const Schema &valuesSchema);
127 MapSchema(const MapSchema &itemsSchema);
128 };
129
130 class AVRO_DECL UnionSchema : public Schema {
131 public:
132 UnionSchema();
133 void addType(const Schema &typeSchema);
134 };
135
136 class AVRO_DECL FixedSchema : public Schema {
137 public:
138 FixedSchema(int size, const std::string &name);
139 };
140
141 class AVRO_DECL SymbolicSchema : public Schema {
142 public:
143 SymbolicSchema(const Name &name, const NodePtr &link);
144 };
145 } // namespace avro
146
147 #endif
avro::AVRO_NULL
@ AVRO_NULL
Definition: Types.hh:40
avro::ArraySchema
Definition: Schema.hh:118
avro::UnionSchema
Definition: Schema.hh:130
avro::Node
Node is the building block for parse trees.
Definition: Node.hh:91
avro::AVRO_LONG
@ AVRO_LONG
Definition: Types.hh:36
avro::FixedSchema
Definition: Schema.hh:136
avro::StringSchema
Definition: Schema.hh:90
avro::AVRO_FLOAT
@ AVRO_FLOAT
Definition: Types.hh:37
avro::AVRO_BOOL
@ AVRO_BOOL
Definition: Types.hh:39
avro::NullSchema
Definition: Schema.hh:60
avro::AVRO_STRING
@ AVRO_STRING
Definition: Types.hh:33
avro::Name
Definition: Node.hh:42
avro::IntSchema
Definition: Schema.hh:70
avro::BoolSchema
Definition: Schema.hh:65
avro::AVRO_BYTES
@ AVRO_BYTES
Definition: Types.hh:34
avro::SymbolicSchema
Definition: Schema.hh:141
avro::CustomAttributes
Definition: CustomAttributes.hh:33
avro::RecordSchema
Definition: Schema.hh:100
avro::NodePrimitive
Definition: NodeImpl.hh:242
avro::AVRO_INT
@ AVRO_INT
Definition: Types.hh:35
avro
A bunch of templates and specializations for encoding and decoding specific types.
Definition: AvroParse.hh:30
avro::DoubleSchema
Definition: Schema.hh:85
avro::AVRO_DOUBLE
@ AVRO_DOUBLE
Definition: Types.hh:38
avro::Schema
The root Schema object is a base class. Nobody constructs this class directly.
Definition: Schema.hh:37
avro::MapSchema
Definition: Schema.hh:124
avro::Type
Type
The "type" for the schema.
Definition: Types.hh:31
avro::FloatSchema
Definition: Schema.hh:80
avro::BytesSchema
Definition: Schema.hh:95
avro::EnumSchema
Definition: Schema.hh:112
avro::LongSchema
Definition: Schema.hh:75