Skip to main content

nautilus_persistence/backend/
mod.rs

1// -------------------------------------------------------------------------------------------------
2//  Copyright (C) 2015-2026 Nautech Systems Pty Ltd. All rights reserved.
3//  https://nautechsystems.io
4//
5//  Licensed under the GNU Lesser General Public License Version 3.0 (the "License");
6//  You may not use this file except in compliance with the License.
7//  You may obtain a copy of the License at https://www.gnu.org/licenses/lgpl-3.0.en.html
8//
9//  Unless required by applicable law or agreed to in writing, software
10//  distributed under the License is distributed on an "AS IS" BASIS,
11//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12//  See the License for the specific language governing permissions and
13//  limitations under the License.
14// -------------------------------------------------------------------------------------------------
15
16//! Provides an Apache Parquet backend powered by [DataFusion](https://arrow.apache.org/datafusion).
17
18use std::future::Future;
19
20use tokio::runtime::Handle;
21
22pub mod binary_heap;
23pub mod catalog;
24pub mod catalog_operations;
25pub mod compare;
26pub mod custom;
27pub mod feather;
28pub mod kmerge_batch;
29pub mod session;
30
31/// Runs an async operation from a synchronous persistence API.
32///
33/// `block_in_place` permits re-entering the shared multi-thread Nautilus runtime and executes the
34/// closure directly when called outside a Tokio runtime.
35///
36/// # Panics
37///
38/// Panics when called from a Tokio `current_thread` runtime. The shared Nautilus runtime is
39/// required to be multi-threaded.
40pub(crate) fn block_on<F>(runtime: &Handle, future: F) -> F::Output
41where
42    F: Future,
43{
44    tokio::task::block_in_place(|| runtime.block_on(future))
45}