Skip to content

Rework ffi with new logging, error handling and some improvements in arch and safe #10

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 77 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
77 commits
Select commit Hold shift + click to select a range
7333525
Remove ffi with new `logging` and some improvements in arch and safe
uselessgoddess Aug 14, 2022
4d59bae
Improve logging (via `instrument`s) and naming
uselessgoddess Aug 14, 2022
e0edd83
Add ffi context to callbacks
uselessgoddess Aug 14, 2022
e8691c2
Add ffi `examples` crate
uselessgoddess Aug 15, 2022
63be554
Fix too long ptr cast
uselessgoddess Aug 17, 2022
b1a3d77
Improve safety docs
uselessgoddess Aug 17, 2022
f4c7cb4
Improve error handling:
uselessgoddess Aug 18, 2022
a40e21e
Use `thread_local` attribute for `ERROR_PLACE`
uselessgoddess Aug 19, 2022
7dd3cd9
Improve `warn` message in `query_from_raw`
uselessgoddess Aug 19, 2022
4600061
Improvements list:
uselessgoddess Aug 19, 2022
4f6b95b
Improvements list:
uselessgoddess Aug 19, 2022
a11188f
Update outdated data
uselessgoddess Aug 19, 2022
edd0b87
Use `NonNull` instead of raw pointer
uselessgoddess Aug 22, 2022
646f1ae
`cargo fix` unused imports
uselessgoddess Aug 23, 2022
6d7c353
`cargo fix` unused imports
uselessgoddess Aug 23, 2022
abee06b
Improve `ffi-attributes`:
uselessgoddess Aug 23, 2022
8420a12
Remove forgotten comment
uselessgoddess Aug 23, 2022
4ec685a
Fix type `lit` => `ty`
uselessgoddess Aug 23, 2022
6c71760
Add `attributes` keyword to delegate some attrs to parent function im…
uselessgoddess Aug 24, 2022
cc2eee1
Fix some externs
uselessgoddess Aug 24, 2022
2c10ab3
Add some doc comments to `Range`
uselessgoddess Aug 24, 2022
fdc90c9
Fix brackets in `error-handling` example
uselessgoddess Aug 24, 2022
f48486c
Use `usize` instead of `c_size_t`
uselessgoddess Aug 24, 2022
b7e8a25
Use modern `StoreHandle` without `Box::from_raw/into_raw`
uselessgoddess Aug 24, 2022
7454ec0
Add error handling without bottleneck (`ERROR_PLACE`) and `take_last_…
uselessgoddess Aug 24, 2022
d54db5d
Improve `OpaqueSlice` in favor of `OwnedSlice`
uselessgoddess Aug 24, 2022
fba6e78
Fix some typos in readme
uselessgoddess Aug 25, 2022
d5025c0
Revert changes in README.md
uselessgoddess Aug 26, 2022
0890293
Fix some typos in readme
uselessgoddess Aug 26, 2022
56ae6bc
Use `Box` instead of raw ptrs
uselessgoddess Aug 26, 2022
7061c37
Stop logging if channel is disconnected
uselessgoddess Aug 26, 2022
2de822a
Remove useless `todo` message
uselessgoddess Aug 26, 2022
0f4d4fa
Improve repr of `StoreHandle`
uselessgoddess Aug 26, 2022
9c58bb0
Fix macro error message
uselessgoddess Aug 28, 2022
f570601
Change pair from Ident => Ident to Type => Ident
Mitron57 Aug 28, 2022
a2ba506
Make code more cleaned and self-doc+friendly for parsing
uselessgoddess Aug 28, 2022
4752904
Some improvements:
uselessgoddess Aug 30, 2022
18ed088
Fix useless `.clone` in `ffi-attributes`
uselessgoddess Aug 31, 2022
6a7a90f
Fix imports and useless in examples
uselessgoddess Aug 31, 2022
a57cec3
Add `backtrace` feature and make `doublets-ffi` features-free:
uselessgoddess Aug 31, 2022
67afd89
Update building guide
uselessgoddess Aug 31, 2022
367b05a
Fix copy typo in readme
uselessgoddess Aug 31, 2022
74fbc82
Install stable rust in readme
uselessgoddess Aug 31, 2022
804823b
Add `Off` for `Level` and simplify `EnvFilter` to `match`
uselessgoddess Sep 1, 2022
056c7e2
Add colored shows to `log-context` example
uselessgoddess Sep 1, 2022
4adab77
Fix typo in example
uselessgoddess Sep 1, 2022
6b1345a
Improve colors and reset
uselessgoddess Sep 3, 2022
3338ba8
Start queries reworking
uselessgoddess Sep 4, 2022
78cf083
Merge remote-tracking branch 'origin/ffi-rework' into ffi-rework
uselessgoddess Sep 4, 2022
97c2640
Revert queries reworking
uselessgoddess Sep 4, 2022
918d255
Forbid dynamic lib to ffi
uselessgoddess Sep 4, 2022
26927a7
Add docs to `FFICallbackContextWrapper`
uselessgoddess Sep 4, 2022
8561b07
Improve `Range` and add `Maybe` to simplify constants conversion
uselessgoddess Sep 4, 2022
903d07e
Fix typo
uselessgoddess Sep 4, 2022
ae182b5
Improve `backtrace` feature in favor of `unstable_backtrace`
uselessgoddess Sep 4, 2022
3eb54ef
Fix `if-else-let` lint
uselessgoddess Sep 4, 2022
d6de95a
Add marker<Box<[T]>> to `OwnedSlice`
uselessgoddess Sep 6, 2022
c2a4813
allow(clippy::borrowed_box) for `assume_ref`
uselessgoddess Sep 6, 2022
766df15
Use `while let` instead of `loop { if let }` in logging loop
uselessgoddess Sep 6, 2022
2e7e592
Use slice as queries
uselessgoddess Sep 6, 2022
155f475
Add error handling to store creation
uselessgoddess Sep 7, 2022
d619560
explain `if let` to `.is_ok`
uselessgoddess Sep 7, 2022
af3fef0
Use shortest error messages
uselessgoddess Sep 7, 2022
722094c
Shortest ptr cast
uselessgoddess Sep 7, 2022
8da33d5
Improve error handling in favor of Rust looks like
uselessgoddess Sep 9, 2022
3bf0a7e
Fix priv `utils` mod
uselessgoddess Sep 9, 2022
0e71c0e
Disable clippy with bug
uselessgoddess Sep 9, 2022
8433376
Fix fallible example
uselessgoddess Sep 9, 2022
a5156ed
Really disable clippy
uselessgoddess Sep 9, 2022
a95d580
Use shortest names
uselessgoddess Sep 9, 2022
fb70b9c
Improve code for future readers
uselessgoddess Sep 9, 2022
9042ce8
Improve code for future readers - two-step
uselessgoddess Sep 9, 2022
3754990
Add `cbindgen` config for cxx (but with problems):
uselessgoddess Sep 10, 2022
3b272d9
Cosmetic improvements
uselessgoddess Sep 12, 2022
fb2aad6
Remove unused imports
uselessgoddess Nov 27, 2022
ce9449a
Improve `Fallible` messages and idioms
uselessgoddess Nov 27, 2022
97e12b2
Remove type - useless import
uselessgoddess Nov 27, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 18 additions & 17 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ jobs:
needs:
- test
- miri
- clippy
# temporary ignore bug in clippy
# - clippy
steps:
- run: exit 0

Expand Down Expand Up @@ -51,22 +52,22 @@ jobs:
- name: Run tests
run: cargo test ${{ matrix.features }} --release -- --nocapture

clippy:
name: clippy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Install Rust clippy
uses: actions-rs/toolchain@v1
with:
toolchain: nightly
override: true
components: clippy
- uses: Swatinem/rust-cache@v1
- name: "clippy --all"
run: cargo clippy --all --tests --all-features
# clippy:
# name: clippy
# runs-on: ubuntu-latest
# steps:
# - uses: actions/checkout@v3
# with:
# submodules: true
# - name: Install Rust clippy
# uses: actions-rs/toolchain@v1
# with:
# toolchain: nightly
# override: true
# components: clippy
# - uses: Swatinem/rust-cache@v1
# - name: "clippy --all"
# run: cargo clippy --all --tests --all-features

miri:
runs-on: ubuntu-latest
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
.cargo
/target
3 changes: 2 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
[workspace]

members = [
"doublets-ffi",
"doublets",
"doublets-ffi",
"doublets-ffi/examples/rust",

# dev
"dev-deps/mem-rs",
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,15 @@ later
A basic operations in doublets:

```rust
use doublets::{data, mem, unit, Doublets, Links};
use doublets::{data, mem, unit, Doublets, DoubletsExt, Links};

fn main() -> Result<(), doublets::Error<usize>> {
// use file as memory for doublets
let mem = mem::FileMapped::from_path("db.links")?;
let mut store = unit::Store::<usize, _>::new(mem)?;

// create 1: 1 1 - it's point: link where source and target it self
let mut point = store.create_link(1, 1)?;
let point = store.create_link(1, 1)?;

// `any` constant denotes any link
let any = store.constants().any;
Expand Down
112 changes: 112 additions & 0 deletions cbindgen-cxx.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
language = "C++"

############## Options for Wrapping the Contents of the Header #################

# header = "/* Text to put at the beginning of the generated file. Probably a license. */"
# trailer = "/* Text to put at the end of the generated file */"
# include_guard = "my_bindings_h"
pragma_once = true
# autogen_warning = "/* Warning, this file is autogenerated by cbindgen. Don't modify this manually. */"
include_version = false
# namespace = "my_namespace"
namespaces = []
using_namespaces = []
sys_includes = []
includes = []
no_includes = false
after_includes = """

template<typename T>
using Box = T*;

template<typename T>
using ManuallyDrop = T;

"""

braces = "SameLine"
line_length = 100
tab_width = 2
documentation = true
documentation_style = "auto"
documentation_length = "full"
line_endings = "LF" # also "CR", "CRLF", "Native"

style = "both"
sort_by = "Name" # default for `fn.sort_by` and `const.sort_by`
usize_is_size_t = true

[defines]
unstable_backtrace = "UNSTABLE_BACKTRACE"
# "target_os = freebsd" = "DEFINE_FREEBSD"
# "feature = serde" = "DEFINE_SERDE"

[export]
include = []
exclude = [
"Box", "ManuallyDrop"
]
# prefix = "CAPI_"
item_types = []
renaming_overrides_prefixing = false

[export.rename]

[export.body]

[export.mangle]

[fn]
rename_args = "None"
# must_use = "MUST_USE_FUNC"
# no_return = "NO_RETURN"
# prefix = "START_FUNC"
# postfix = "END_FUNC"
args = "auto"
sort_by = "Name"

[struct]
rename_fields = "None"
# must_use = "MUST_USE_STRUCT"
derive_constructor = false
derive_eq = false
derive_neq = false
derive_lt = false
derive_lte = false
derive_gt = false
derive_gte = false

[enum]
rename_variants = "None"
# must_use = "MUST_USE_ENUM"
add_sentinel = false
prefix_with_name = false
derive_helper_methods = false
derive_const_casts = false
derive_mut_casts = false
# cast_assert_name = "ASSERT"
derive_tagged_enum_destructor = false
derive_tagged_enum_copy_constructor = false
enum_class = true
private_default_tagged_enum_constructor = false

[const]
allow_static_const = true
allow_constexpr = true
sort_by = "Name"

[macro_expansion]
# bitflags = false

[parse]
parse_deps = true
include = ["doublets", "platform-data"]
exclude = []
clean = false
extra_bindings = []

[parse.expand]
crates = ["doublets-ffi"]
all_features = true
default_features = true
features = []
2 changes: 1 addition & 1 deletion dev-deps/data-rs
15 changes: 8 additions & 7 deletions doublets-ffi/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,18 @@ version = "0.1.0"
edition = "2021"

[lib]
crate-type = ["cdylib", "staticlib"]
crate-type = ["staticlib", "lib"]

[dependencies]
log = "0.4.14"
libc = "0.2.100"
tracing-subscriber = "0.3.3"
tracing-log = "0.1.2"
tracing = "0.1.29"
doublets = { path = "../doublets" }
ffi-attributes = { path = "ffi-attributes" }
env-decorators = { path = "env-decorators" }

tap = { version = "1.0.1" }
log-panics = { version = "2.1.0" }

crossbeam-channel = { version = "0.5.6" }
tracing = { version = "0.1.36" }
tracing-subscriber = { version = "0.3.15", features = ["env-filter", "json"] }

[package.log]
features = ["release_max_level_error"]
12 changes: 0 additions & 12 deletions doublets-ffi/env-decorators/Cargo.toml

This file was deleted.

78 changes: 0 additions & 78 deletions doublets-ffi/env-decorators/src/lib.rs

This file was deleted.

12 changes: 12 additions & 0 deletions doublets-ffi/examples/rust/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
[package]
name = "doublets-ffi-examples"
version = "0.0.0"
edition = "2021"
publish = false

[dependencies]
doublets-ffi = { path = "../../../doublets-ffi" }
doublets = { path = "../../../doublets" }
tracing = { version = "0.1.36" }
# dev
termcolor = { version = "1.1.3" }
45 changes: 45 additions & 0 deletions doublets-ffi/examples/rust/examples/all-logs.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
#![feature(const_option_ext)]

use doublets_ffi::{
export::{doublets_create_log_handle, doublets_free_log_handle},
logging::{Format, Level},
FFIContext,
};
use std::{
ffi::{c_char, CStr},
ptr,
};

unsafe extern "C" fn callback(_: FFIContext, ptr: *const c_char) {
let cstr = CStr::from_ptr(ptr);
print!("{}", cstr.to_str().unwrap());
Comment on lines +14 to +15
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
let cstr = CStr::from_ptr(ptr);
print!("{}", cstr.to_str().unwrap());
let cstr = CStr::from_ptr(ptr).to_str().unwrap();
print!("{}", cstr);

}

const FORMAT: &str = option_env!("RUST_EXAMPLES_FORMAT").unwrap_or("virgin");

fn main() {
let ctx = ptr::null_mut();
let level = Level::Trace;
let use_ansi = true;

let format = match &FORMAT.to_ascii_lowercase()[..] {
"virgin" => Format::Virgin,
"pretty" => Format::Pretty,
"json" => Format::Json,
_ => {
panic!("allow only: `virgin`, `pretty`, `json`")
}
};

unsafe {
let handle = doublets_create_log_handle(ctx, callback, level, format, use_ansi);

tracing::error!("SOMETHING IS SERIOUSLY WRONG!!!");
tracing::warn!("important informational messages; might indicate an error");
tracing::info!("general informational messages relevant to users");
tracing::debug!("diagnostics used for internal debugging of a library or application");
tracing::trace!("very verbose diagnostic events");
Comment on lines +37 to +41
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Move logs out unsafe context. It's confusing


doublets_free_log_handle(handle);
}
}
Loading