lance_jni/
lib.rs

1// Copyright 2024 Lance Developers.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
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#[macro_export]
16macro_rules! ok_or_throw {
17    ($env:expr, $result:expr) => {
18        match $result {
19            Ok(value) => value,
20            Err(err) => {
21                err.throw(&mut $env);
22                return JObject::null();
23            }
24        }
25    };
26}
27
28macro_rules! ok_or_throw_without_return {
29    ($env:expr, $result:expr) => {
30        match $result {
31            Ok(value) => value,
32            Err(err) => {
33                err.throw(&mut $env);
34                return;
35            }
36        }
37    };
38}
39
40#[macro_export]
41macro_rules! ok_or_throw_with_return {
42    ($env:expr, $result:expr, $ret:expr) => {
43        match $result {
44            Ok(value) => value,
45            Err(err) => {
46                err.throw(&mut $env);
47                return $ret;
48            }
49        }
50    };
51}
52
53mod blocking_dataset;
54mod blocking_scanner;
55pub mod error;
56pub mod ffi;
57mod file_reader;
58mod file_writer;
59mod fragment;
60pub mod traits;
61pub mod utils;
62
63pub use error::Error;
64pub use error::Result;
65pub use ffi::JNIEnvExt;
66
67use env_logger::{Builder, Env};
68use std::sync::Arc;
69
70use std::sync::LazyLock;
71
72pub static RT: LazyLock<tokio::runtime::Runtime> = LazyLock::new(|| {
73    tokio::runtime::Builder::new_multi_thread()
74        .enable_all()
75        .build()
76        .expect("Failed to create tokio runtime")
77});
78
79#[no_mangle]
80pub extern "system" fn Java_com_lancedb_lance_JniLoader_initLanceLogger() {
81    let env = Env::new()
82        .filter_or("LANCE_LOG", "warn")
83        .write_style("LANCE_LOG_STYLE");
84    let mut log_builder = Builder::from_env(env);
85    let logger = Arc::new(log_builder.build());
86    let max_level = logger.filter();
87    log::set_boxed_logger(Box::new(logger.clone())).unwrap();
88    log::set_max_level(max_level);
89    // todo: add tracing
90}