rsciter

Crates.iorsciter
lib.rsrsciter
version0.0.11
sourcesrc
created_at2023-07-09 11:42:52.378165
updated_at2024-09-19 15:43:52.793119
descriptionUnofficial Rust bindings for Sciter
homepage
repositoryhttps://github.com/vsrs/rsciter
max_upload_size
id912011
size299,683
(vsrs)

documentation

README

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:

Commit count: 86

cargo fmt