nautilus-persistence 0.61.0

Data persistence and storage for the Nautilus trading engine
Documentation
// -------------------------------------------------------------------------------------------------
//  Copyright (C) 2015-2026 Nautech Systems Pty Ltd. All rights reserved.
//  https://nautechsystems.io
//
//  Licensed under the GNU Lesser General Public License Version 3.0 (the "License");
//  You may not use this file except in compliance with the License.
//  You may obtain a copy of the License at https://www.gnu.org/licenses/lgpl-3.0.en.html
//
//  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.
// -------------------------------------------------------------------------------------------------

//! Provides an Apache Parquet backend powered by [DataFusion](https://arrow.apache.org/datafusion).

use std::future::Future;

use tokio::runtime::Handle;

pub mod binary_heap;
pub mod catalog;
pub mod catalog_operations;
pub mod compare;
pub mod custom;
pub mod feather;
pub mod kmerge_batch;
pub mod session;

/// Runs an async operation from a synchronous persistence API.
///
/// `block_in_place` permits re-entering the shared multi-thread Nautilus runtime and executes the
/// closure directly when called outside a Tokio runtime.
///
/// # Panics
///
/// Panics when called from a Tokio `current_thread` runtime. The shared Nautilus runtime is
/// required to be multi-threaded.
pub(crate) fn block_on<F>(runtime: &Handle, future: F) -> F::Output
where
    F: Future,
{
    tokio::task::block_in_place(|| runtime.block_on(future))
}