reorganize module
This commit is contained in:
69
_archive/rhai_engine/rhaibook/rust/packages/crate.md
Normal file
69
_archive/rhai_engine/rhaibook/rust/packages/crate.md
Normal file
@@ -0,0 +1,69 @@
|
||||
Create a Custom Package as an Independent Crate
|
||||
===============================================
|
||||
|
||||
{{#include ../../links.md}}
|
||||
|
||||
Creating a custom [package] as an independent crate allows it to be shared by multiple projects.
|
||||
|
||||
```admonish abstract.small "Key concepts"
|
||||
|
||||
* Create a Rust crate that specifies [`rhai`](https://crates.io/crates/rhai) as dependency.
|
||||
|
||||
* The main `lib.rs` module can contain the [package] being constructed.
|
||||
```
|
||||
|
||||
```admonish example.small
|
||||
The projects [`rhai-rand`] and [`rhai-sci`] show simple examples of creating a custom [package]
|
||||
as an independent crate.
|
||||
```
|
||||
|
||||
|
||||
Implementation
|
||||
--------------
|
||||
|
||||
`Cargo.toml`:
|
||||
|
||||
```toml
|
||||
[package]
|
||||
name = "my-package" # 'my-package' crate
|
||||
|
||||
[dependencies]
|
||||
rhai = "{{version}}" # assuming {{version}} is the latest version
|
||||
```
|
||||
|
||||
`lib.rs`:
|
||||
|
||||
```rust
|
||||
use rhai::def_package;
|
||||
use rhai::plugin::*;
|
||||
|
||||
// This is a plugin module
|
||||
#[export_module]
|
||||
mod my_module {
|
||||
// Constants are ignored when used as a package
|
||||
pub const MY_NUMBER: i64 = 42;
|
||||
|
||||
pub fn greet(name: &str) -> String {
|
||||
format!("hello, {}!", name)
|
||||
}
|
||||
pub fn get_num() -> i64 {
|
||||
42
|
||||
}
|
||||
|
||||
// This is a sub-module, but if using combine_with_exported_module!, it will
|
||||
// be flattened and all functions registered at the top level.
|
||||
pub mod my_sub_module {
|
||||
pub fn get_sub_num() -> i64 {
|
||||
0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Define the package 'MyPackage' which is exported for the crate.
|
||||
def_package! {
|
||||
/// My own personal super package in a new crate!
|
||||
pub MyPackage(module) {
|
||||
combine_with_exported_module!(module, "my-functions", my_module);
|
||||
}
|
||||
}
|
||||
```
|
Reference in New Issue
Block a user