This is an automated email from the ASF dual-hosted git repository.
mgrigorov pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/avro-rs.git
The following commit(s) were added to refs/heads/main by this push:
new 5dd5536 chore: Extract RecordSchema into its own module
(src/schema/record/schema.rs) (#410)
5dd5536 is described below
commit 5dd5536966515b13e01473e2fa83108b576799e6
Author: Martin Grigorov <[email protected]>
AuthorDate: Mon Jan 19 11:47:16 2026 +0200
chore: Extract RecordSchema into its own module
(src/schema/record/schema.rs) (#410)
---
avro/src/schema/mod.rs | 36 ++++------------------------
avro/src/schema/record/mod.rs | 4 ++++
avro/src/schema/record/schema.rs | 51 ++++++++++++++++++++++++++++++++++++++++
3 files changed, 59 insertions(+), 32 deletions(-)
diff --git a/avro/src/schema/mod.rs b/avro/src/schema/mod.rs
index 184e2c9..25319f7 100644
--- a/avro/src/schema/mod.rs
+++ b/avro/src/schema/mod.rs
@@ -41,7 +41,10 @@ use std::{
use strum_macros::{Display, EnumDiscriminants};
mod record;
-pub use crate::schema::record::{RecordField, RecordFieldBuilder,
RecordFieldOrder};
+use crate::schema::record::RecordSchemaParseLocation;
+pub use crate::schema::record::{
+ RecordField, RecordFieldBuilder, RecordFieldOrder, RecordSchema,
RecordSchemaBuilder,
+};
/// Represents an Avro schema fingerprint
/// More information about Avro schema fingerprints can be found in the
@@ -640,27 +643,6 @@ pub(crate) fn resolve_names_with_schemata(
Ok(())
}
-/// A description of a Record schema.
-#[derive(bon::Builder, Debug, Clone)]
-pub struct RecordSchema {
- /// The name of the schema
- pub name: Name,
- /// The aliases of the schema
- #[builder(default)]
- pub aliases: Aliases,
- /// The documentation of the schema
- #[builder(default)]
- pub doc: Documentation,
- /// The set of fields of the schema
- pub fields: Vec<RecordField>,
- /// The `lookup` table maps field names to their position in the `Vec`
- /// of `fields`.
- pub lookup: BTreeMap<String, usize>,
- /// The custom attributes of the schema
- #[builder(default = BTreeMap::new())]
- pub attributes: BTreeMap<String, Value>,
-}
-
/// A description of an Enum schema.
#[derive(bon::Builder, Debug, Clone)]
pub struct EnumSchema {
@@ -915,16 +897,6 @@ fn parse_json_integer_for_decimal(value:
&serde_json::Number) -> Result<DecimalM
})
}
-#[derive(Debug, Default)]
-enum RecordSchemaParseLocation {
- /// When the parse is happening at root level
- #[default]
- Root,
-
- /// When the parse is happening inside a record field
- FromField,
-}
-
#[derive(Default)]
pub(crate) struct Parser {
input_schemas: HashMap<Name, Value>,
diff --git a/avro/src/schema/record/mod.rs b/avro/src/schema/record/mod.rs
index 9ba59f5..0d1c5a1 100644
--- a/avro/src/schema/record/mod.rs
+++ b/avro/src/schema/record/mod.rs
@@ -17,3 +17,7 @@
mod field;
pub use field::{RecordField, RecordFieldBuilder, RecordFieldOrder};
+
+mod schema;
+pub(crate) use schema::RecordSchemaParseLocation;
+pub use schema::{RecordSchema, RecordSchemaBuilder};
diff --git a/avro/src/schema/record/schema.rs b/avro/src/schema/record/schema.rs
new file mode 100644
index 0000000..28a30a6
--- /dev/null
+++ b/avro/src/schema/record/schema.rs
@@ -0,0 +1,51 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+use crate::schema::{Aliases, Documentation, Name, RecordField};
+use serde_json::Value;
+use std::collections::BTreeMap;
+
+/// A description of a Record schema.
+#[derive(bon::Builder, Debug, Clone)]
+pub struct RecordSchema {
+ /// The name of the schema
+ pub name: Name,
+ /// The aliases of the schema
+ #[builder(default)]
+ pub aliases: Aliases,
+ /// The documentation of the schema
+ #[builder(default)]
+ pub doc: Documentation,
+ /// The set of fields of the schema
+ pub fields: Vec<RecordField>,
+ /// The `lookup` table maps field names to their position in the `Vec`
+ /// of `fields`.
+ pub lookup: BTreeMap<String, usize>,
+ /// The custom attributes of the schema
+ #[builder(default = BTreeMap::new())]
+ pub attributes: BTreeMap<String, Value>,
+}
+
+#[derive(Debug, Default)]
+pub(crate) enum RecordSchemaParseLocation {
+ /// When the parse is happening at root level
+ #[default]
+ Root,
+
+ /// When the parse is happening inside a record field
+ FromField,
+}