You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@avro.apache.org by kr...@apache.org on 2026/02/25 20:59:24 UTC
(avro-rs) 04/07: fix: Change default of `SER_BYTES_TYPE` to `BytesType::Unset`
This is an automated email from the ASF dual-hosted git repository.
kriskras99 pushed a commit to branch fix/small_things
in repository https://gitbox.apache.org/repos/asf/avro-rs.git
commit b7d475703d66ac9c3798ebff1e36aaac6de40e84
Author: Kriskras99 <gi...@kriskras99.nl>
AuthorDate: Wed Feb 25 21:41:24 2026 +0100
fix: Change default of `SER_BYTES_TYPE` to `BytesType::Unset`
This is not used yet, but will be used for improving `SchemaAwareWriteSerializer`.
---
avro/src/serde/ser.rs | 2 +-
avro/src/serde/with.rs | 17 ++++++++++++++++-
2 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/avro/src/serde/ser.rs b/avro/src/serde/ser.rs
index 76c6579..efd6fe8 100644
--- a/avro/src/serde/ser.rs
+++ b/avro/src/serde/ser.rs
@@ -182,7 +182,7 @@ impl ser::Serializer for Serializer {
fn serialize_bytes(self, v: &[u8]) -> Result<Self::Ok, Self::Error> {
match SER_BYTES_TYPE.get() {
- BytesType::Bytes => Ok(Value::Bytes(v.to_owned())),
+ BytesType::Unset | BytesType::Bytes => Ok(Value::Bytes(v.to_owned())),
BytesType::Fixed => Ok(Value::Fixed(v.len(), v.to_owned())),
}
}
diff --git a/avro/src/serde/with.rs b/avro/src/serde/with.rs
index d5da690..9d236d1 100644
--- a/avro/src/serde/with.rs
+++ b/avro/src/serde/with.rs
@@ -22,7 +22,7 @@ thread_local! {
/// [`Value::Bytes`] or [`Value::Fixed`].
///
/// Relies on the fact that serde's serialization process is single-threaded.
- pub(crate) static SER_BYTES_TYPE: Cell<BytesType> = const { Cell::new(BytesType::Bytes) };
+ pub(crate) static SER_BYTES_TYPE: Cell<BytesType> = const { Cell::new(BytesType::Unset) };
/// A thread local that is used to decide if a [`Value::Bytes`] needs to be deserialized to
/// a [`Vec`] or slice.
@@ -33,6 +33,7 @@ thread_local! {
#[derive(Debug, Clone, Copy)]
pub(crate) enum BytesType {
+ Unset,
Bytes,
Fixed,
}
@@ -92,6 +93,7 @@ impl Drop for BorrowedGuard {
///
/// [`apache_avro::serde::bytes_opt`]: bytes_opt
pub mod bytes {
+ use super::BytesType;
use std::collections::HashSet;
use serde::{Deserializer, Serializer};
@@ -119,6 +121,7 @@ pub mod bytes {
where
S: Serializer,
{
+ let _guard = super::BytesTypeGuard::set(BytesType::Bytes);
serde_bytes::serialize(bytes, serializer)
}
@@ -126,6 +129,7 @@ pub mod bytes {
where
D: Deserializer<'de>,
{
+ let _guard = super::BytesTypeGuard::set(BytesType::Bytes);
serde_bytes::deserialize(deserializer)
}
}
@@ -155,6 +159,7 @@ pub mod bytes {
///
/// [`apache_avro::serde::bytes`]: bytes
pub mod bytes_opt {
+ use super::BytesType;
use serde::{Deserializer, Serializer};
use std::{borrow::Borrow, collections::HashSet};
@@ -184,6 +189,7 @@ pub mod bytes_opt {
S: Serializer,
B: Borrow<[u8]> + serde_bytes::Serialize,
{
+ let _guard = super::BytesTypeGuard::set(BytesType::Bytes);
serde_bytes::serialize(bytes, serializer)
}
@@ -191,6 +197,7 @@ pub mod bytes_opt {
where
D: Deserializer<'de>,
{
+ let _guard = super::BytesTypeGuard::set(BytesType::Bytes);
serde_bytes::deserialize(deserializer)
}
}
@@ -268,6 +275,7 @@ pub mod fixed {
where
D: Deserializer<'de>,
{
+ let _guard = super::BytesTypeGuard::set(BytesType::Fixed);
serde_bytes::deserialize(deserializer)
}
}
@@ -342,6 +350,7 @@ pub mod fixed_opt {
where
D: Deserializer<'de>,
{
+ let _guard = super::BytesTypeGuard::set(BytesType::Fixed);
serde_bytes::deserialize(deserializer)
}
}
@@ -373,6 +382,7 @@ pub mod fixed_opt {
/// [`Value::Fixed`]: crate::types::Value::Fixed
/// [`apache_avro::serde::slice_opt`]: slice_opt
pub mod slice {
+ use super::BytesType;
use std::collections::HashSet;
use serde::{Deserializer, Serializer};
@@ -400,6 +410,7 @@ pub mod slice {
where
S: Serializer,
{
+ let _guard = super::BytesTypeGuard::set(BytesType::Bytes);
serde_bytes::serialize(bytes, serializer)
}
@@ -407,6 +418,7 @@ pub mod slice {
where
D: Deserializer<'de>,
{
+ let _bytes_guard = super::BytesTypeGuard::set(BytesType::Bytes);
let _guard = super::BorrowedGuard::set(true);
serde_bytes::deserialize(deserializer)
}
@@ -439,6 +451,7 @@ pub mod slice {
/// [`Value::Fixed`]: crate::types::Value::Fixed
/// [`apache_avro::serde::slice`]: mod@slice
pub mod slice_opt {
+ use super::BytesType;
use serde::{Deserializer, Serializer};
use std::{borrow::Borrow, collections::HashSet};
@@ -468,6 +481,7 @@ pub mod slice_opt {
S: Serializer,
B: Borrow<[u8]> + serde_bytes::Serialize,
{
+ let _guard = super::BytesTypeGuard::set(BytesType::Bytes);
serde_bytes::serialize(&bytes, serializer)
}
@@ -475,6 +489,7 @@ pub mod slice_opt {
where
D: Deserializer<'de>,
{
+ let _bytes_guard = super::BytesTypeGuard::set(BytesType::Bytes);
let _guard = super::BorrowedGuard::set(true);
serde_bytes::deserialize(deserializer)
}