blob: 991db1d724e25282c9764bfa260db47c5e919837 [file] [log] [blame]
// 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.
/// Configuration for Fory serialization.
///
/// This struct holds all the configuration options that control how Fory
/// serializes and deserializes data. It is shared between the main `Fory`
/// instance and the `WriteContext`/`ReadContext` to ensure consistent behavior.
#[derive(Clone, Debug)]
pub struct Config {
/// Whether compatible mode is enabled for schema evolution support.
pub compatible: bool,
/// Whether cross-language serialization is enabled.
pub xlang: bool,
/// Whether metadata sharing is enabled.
pub share_meta: bool,
/// Whether meta string compression is enabled.
pub compress_string: bool,
/// Maximum depth for nested dynamic object serialization.
pub max_dyn_depth: u32,
/// Whether class version checking is enabled.
pub check_struct_version: bool,
/// Whether reference tracking is enabled.
/// When enabled, shared references and circular references are tracked
/// and preserved during serialization/deserialization.
pub track_ref: bool,
}
impl Default for Config {
fn default() -> Self {
Config {
compatible: false,
xlang: false,
share_meta: false,
compress_string: false,
max_dyn_depth: 5,
check_struct_version: false,
track_ref: false,
}
}
}
impl Config {
/// Creates a new Config with default values.
pub fn new() -> Self {
Self::default()
}
/// Check if compatible mode is enabled.
#[inline(always)]
pub fn is_compatible(&self) -> bool {
self.compatible
}
/// Check if cross-language mode is enabled.
#[inline(always)]
pub fn is_xlang(&self) -> bool {
self.xlang
}
/// Check if meta sharing is enabled.
#[inline(always)]
pub fn is_share_meta(&self) -> bool {
self.share_meta
}
/// Check if string compression is enabled.
#[inline(always)]
pub fn is_compress_string(&self) -> bool {
self.compress_string
}
/// Get maximum dynamic depth.
#[inline(always)]
pub fn max_dyn_depth(&self) -> u32 {
self.max_dyn_depth
}
/// Check if class version checking is enabled.
#[inline(always)]
pub fn is_check_struct_version(&self) -> bool {
self.check_struct_version
}
/// Check if reference tracking is enabled.
#[inline(always)]
pub fn is_track_ref(&self) -> bool {
self.track_ref
}
}