#sciter #macro #bindings #rsciter

macro rsciter_macro

rsciter macros implementation

11 releases

0.0.11 Sep 19, 2024
0.0.10 Sep 2, 2024
0.0.6 Apr 8, 2024
0.0.5 Aug 6, 2023
0.0.4 Jul 30, 2023

#1605 in Procedural macros

Download history 2/week @ 2024-07-04 22/week @ 2024-07-25 5/week @ 2024-08-01 424/week @ 2024-08-29 70/week @ 2024-09-05 70/week @ 2024-09-12 121/week @ 2024-09-19

685 downloads per month
Used in rsciter

Apache-2.0

41KB
1K SLoC

Description

Work in Progress License

This is unofficial Rust bindings for Sciter

Disclaimer

This is a work in progress library and is not yet ready for production use.

Differencies from rust-sciter

  • Never panics
  • Uses bindgen instead of hand-written code.
  • Utilizes Sciter's own functions for windows/application management.
  • The primary goal is not to provide a complete Sciter API, but to simplify the interaction between the backend (in Rust) and the frontend (Sciter.JS UI).

Exporting xfunctions (e.g. functions available via window.xcall)

#[rsciter::xmod] // mark the module, that's it!
mod NativeModule {
    pub fn append_log(id: u64, message: &str) { ... }
    pub fn user_name() -> String { ... }
}

JS side:

const sum = Window.this.xcall("sum", 12, 12);

For details, see this samples:

Sciter Object Model support

You can export entire backend module with a single #[rsciter::asset_ns] macro:

#[rsciter::asset_ns]
mod Db {
    // exported Db.open function
    pub fn open(path: &str, flags: u64) -> Object {...}

    // exported struct with fields
    pub struct Object {
        path: String,
        flags: u64,
    }

    // additionally export update method
    impl Object {
        pub fn update(&self, value: &str) -> UpdateRes {...}
    }

    // exported struct with `message` method
    struct UpdateRes(String);
    impl UpdateRes {
        pub fn message(&self) -> &str {
            &self.0
        }
    }
}

JS side:

const obj = Db.open("test.db", 4);
console.log(`open result: "${obj}, ${obj.path}, ${obj.flags}"`);
// open result: "[asset Object], test.db, 4"

const updateRes = obj.update("new data");
console.log(updateRes, updateRes.message);
// [asset UpdateRes] function () {
//    [native code]
// }

console.log(`Update result: "${updateRes.message()}"`);
// Update result: "Updating: `new data` for `test.db` with `4`"

SOM samples:

Dependencies

~325–790KB
~18K SLoC