Skip to content

Commit 8cf26da

Browse files
committed
refactoring: move c4log_setRustCallback to our code
1 parent 6f85036 commit 8cf26da

File tree

5 files changed

+51
-2
lines changed

5 files changed

+51
-2
lines changed

couchbase-lite-core-sys/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@ edition = "2018"
99
[build-dependencies]
1010
cmake = "0.1.42"
1111
bindgen = "0.53.2"
12-
cc = "1.0.48"
12+
cc = "1.0.53"

couchbase-lite-core-sys/build.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ fn main() {
8080
.join("fleece")
8181
.join("API"),
8282
Path::new("couchbase-lite-core").into(),
83+
Path::new(".").into(),
8384
];
8485
let target = getenv_unwrap("TARGET");
8586
let mut framework_dirs = vec![];
@@ -100,10 +101,23 @@ fn main() {
100101
"c4Document+Fleece.h",
101102
"fleece/Fleece.h",
102103
"Replicator/CivetWebSocket.hh",
104+
"couch_lite_log_retrans.hpp",
103105
],
104106
&out_dir.join("c4_header.rs"),
105107
)
106108
.expect("bindgen failed");
109+
110+
let mut cc_builder = cc::Build::new();
111+
112+
for inc in &includes {
113+
cc_builder.include(inc);
114+
}
115+
116+
cc_builder
117+
.cpp(true)
118+
.flag_if_supported("-std=c++11")
119+
.file("couch_lite_log_retrans.cpp")
120+
.compile("couch_lite_log_retrans");
107121
}
108122

109123
/// Convert something like
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#include <atomic>
2+
3+
#include "couch_lite_log_retrans.hpp"
4+
5+
6+
static std::atomic<C4LogCallbackR> g_rust_log_callback{nullptr};
7+
8+
static void rust_log_callback(C4LogDomain d, C4LogLevel l,
9+
const char *fmt C4NONNULL, va_list) {
10+
C4LogCallbackR rust_log_callback = g_rust_log_callback.load(std::memory_order_relaxed);
11+
if (rust_log_callback != nullptr) {
12+
rust_log_callback(d, l, fmt);
13+
}
14+
}
15+
16+
void c4log_setRustCallback(C4LogLevel level, C4LogCallbackR callback) noexcept {
17+
g_rust_log_callback.store(callback, std::memory_order_relaxed);
18+
c4log_writeToCallback(level, rust_log_callback, true);
19+
}
20+
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#pragma once
2+
3+
#include "c4Base.h"
4+
5+
#ifdef __cplusplus
6+
extern "C" {
7+
#endif
8+
9+
typedef void (*C4LogCallbackR)(C4LogDomain, C4LogLevel, const char *msg C4NONNULL);
10+
11+
void c4log_setRustCallback(C4LogLevel level, C4LogCallbackR callback) C4API;
12+
13+
#ifdef __cplusplus
14+
}
15+
#endif

0 commit comments

Comments
 (0)