aboutsummaryrefslogtreecommitdiff
path: root/examples/example-resources
diff options
context:
space:
mode:
Diffstat (limited to 'examples/example-resources')
-rw-r--r--examples/example-resources/Cargo.lock91
-rw-r--r--examples/example-resources/Cargo.toml7
-rw-r--r--examples/example-resources/src/main.rs57
3 files changed, 155 insertions, 0 deletions
diff --git a/examples/example-resources/Cargo.lock b/examples/example-resources/Cargo.lock
new file mode 100644
index 0000000..78c3cac
--- /dev/null
+++ b/examples/example-resources/Cargo.lock
@@ -0,0 +1,91 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 4
+
+[[package]]
+name = "example-resources"
+version = "0.0.1"
+dependencies = [
+ "mingling",
+]
+
+[[package]]
+name = "just_fmt"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5454cda0d57db59778608d7a47bff5b16c6705598265869fb052b657f66cf05e"
+
+[[package]]
+name = "mingling"
+version = "0.1.8"
+dependencies = [
+ "mingling_core",
+ "mingling_macros",
+ "size",
+]
+
+[[package]]
+name = "mingling_core"
+version = "0.1.8"
+dependencies = [
+ "just_fmt",
+ "once_cell",
+]
+
+[[package]]
+name = "mingling_macros"
+version = "0.1.8"
+dependencies = [
+ "just_fmt",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.21.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.106"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "size"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b6709c7b6754dca1311b3c73e79fcce40dd414c782c66d88e8823030093b02b"
+
+[[package]]
+name = "syn"
+version = "2.0.117"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
diff --git a/examples/example-resources/Cargo.toml b/examples/example-resources/Cargo.toml
new file mode 100644
index 0000000..ca783f3
--- /dev/null
+++ b/examples/example-resources/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "example-resources"
+version = "0.0.1"
+edition = "2024"
+
+[dependencies]
+mingling = { path = "../../mingling", features = ["parser"] }
diff --git a/examples/example-resources/src/main.rs b/examples/example-resources/src/main.rs
new file mode 100644
index 0000000..63ebfe6
--- /dev/null
+++ b/examples/example-resources/src/main.rs
@@ -0,0 +1,57 @@
+//! `Mingling` Example - Global Resource Injection
+//!
+//! This example demonstrates how to use global resource injection in `#[chain]` functions.
+//! You can inject both immutable (`&T`) and mutable (`&mut T`) references to global resources.
+//!
+//! # How to Run
+//! ```bash
+//! cargo run --manifest-path ./examples/example-resources/Cargo.toml -- setup
+//! ```
+
+use mingling::prelude::*;
+use std::{env::current_dir, path::PathBuf};
+
+// Define a resource for storing global state
+#[derive(Default, Clone)]
+pub struct MyResource {
+ current_dir: PathBuf,
+}
+
+fn main() {
+ let mut program = ThisProgram::new();
+
+ // Add the resource to the program
+ program.with_resource(MyResource::default());
+
+ program.with_dispatcher(SetupCommand);
+ program.exec_and_exit();
+}
+
+dispatcher!("setup", SetupCommand => SetupEntry);
+pack!(StateRead = ());
+pack!(ResultCurrentDir = PathBuf);
+
+#[chain]
+fn setup(
+ _prev: SetupEntry,
+ resource: &mut MyResource, // Import the resource into `setup`
+) -> NextProcess {
+ // Set the global resource
+ resource.current_dir = current_dir().unwrap();
+
+ StateRead::default()
+}
+
+#[chain]
+fn read(_prev: StateRead, resource: &MyResource) -> NextProcess {
+ // Read the global resource
+ let current_dir = resource.current_dir.clone();
+ ResultCurrentDir::new(current_dir).to_render()
+}
+
+#[renderer]
+fn render_current_dir(dir: ResultCurrentDir) {
+ r_println!("Current dir: {}", dir.to_string_lossy())
+}
+
+gen_program!();