cargo-container 0.0.0

package rlibs in several containing frontends
# Example: Multiplatform


This demonstrates using `cargo container` to wrap `apps` in multiple `platforms`,
displaying a "dialog".



<h2 name="quickstart">Quickstart</h2>

```cmd
cargo install --path .

cd example\multiplatform
cargo container build
cargo container test

:: Run the debug platforms\console generated executable
target\debug\alpha.exe

:: Run the debug platforms\windows generated executable
target\x86_64-pc-windows-msvc\debug\alpha.exe
```



<h2 name="overview">Overview</h2>

| Source File       | Description                               |
| ----------------- | ----------------------------------------- |
| `app-common/`     | Multiplatform library consumed by apps
| `apps/*/`         | Example crates to wrap
| `platforms/*/`    | Example generators of platform specific boilerplate
| `Container.toml`  | "Workspace" defining what to build



<h2 name="apps">Apps</h2>

In this example, each "app" (alpha, beta, delta) exposes:
```rust
pub fn init(ctx: impl app_common::DialogProvider) { ... }
```

There is nothing special about this function signature - it only needs to match
whatever the accompanying generated packages expect.  This might be pub fns,
this might be [inventory](https://docs.rs/inventory/)-registered flags... anything!



<h2 name="platforms">Platforms</h2>

Each of these generates Cargo.toml `[package]`s wrapping the aforementioned apps.

### console


Displays the 'dialog' via stdout, waits for response via stdin

```rust
fn main() { app::init(app_common::ConsoleDialogProvider) }
```

### stdweb


Displays the dialog as a javascript alert in the browser, via [stdweb](https://docs.rs/stdweb/).

```rust
fn main() { app::init(app_common::StdWebDialogProvider) }
```

### web-sys


Displays the dialog as a javascript alert in the browser, via [web-sys](https://docs.rs/web-sys/).

```rust
#[wasm_bindgen(start)] pub fn start() { app::init(app_common::WebSysDialogProvider) }

```

### windows


Displays the dialog as a message box.  Will cross-compile to windows on non-windows platforms.

```rust
#![windows_subsystem="windows"] fn main() { app::init(app_common::WindowsDialogProvider) }

```



<h2 name="generated-files">Generated Files</h2>

| Generated File                                                    | Config | Platform     | Host      | Target |
| ----------------------------------------------------------------- | ------ | ------------ | --------- | ------ |
| `Cargo.lock`                                                      | \*    | \*            | \*        | \*
| `Cargo.toml`                                                      | \*    | \*            | \*        | \*
| `target/debug/alpha.exe`                                          | debug | console       | windows   | windows
| `target/debug/alpha`                                              | debug | console       | linux     | linux
| `target/x86_64-pc-windows-msvc/debug/alpha.exe`                   | debug | windows       | windows   | windows
| `target/x86_64-pc-windows-gnu/debug/alpha.exe`                    | debug | windows       | linux     | **windows**
| `target/wasm32-unknown-unknown/debug/alpha-stdweb.html`           | debug | stdweb        | \*        | browser
| `target/wasm32-unknown-unknown/debug/alpha-web-sys/index.html`    | debug | web-sys       | \*        | browser
| `target/release/...`                                              | release
| `target/*/release/...`                                            | release