applin-rust
======
[](https://crates.io/crates/applin)
[](https://github.com/rust-secure-code/safety-dance/)
[](https://github.com/leonhard-llc/applin-rust/actions)
You can use the Applinβ’ Server-Driven UI framework to build a mobile app
with only server-side code.
<https://www.applin.dev/>
Use a provided boilerplate app for the frontend.
Use this library for the backend.
Documentation: <https://www.applin.dev/docs/>
Example and live demo: <https://github.com/leonhard-llc/applin-rust-demo>
# Cargo Geiger Safety Report
```
Metric output format: x/y
x = unsafe code used by the build
y = total unsafe code found in the crate
Symbols:
π = No `unsafe` usage found, declares #![forbid(unsafe_code)]
β = No `unsafe` usage found, missing #![forbid(unsafe_code)]
β’οΈ = `unsafe` usage found
Functions Expressions Impls Traits Methods Dependency
0/0 0/0 0/0 0/0 0/0 π applin 0.2.5
0/0 7/20 0/0 0/0 0/0 β’οΈ βββ nanorand 0.7.0
3/7 47/225 0/1 0/0 1/3 β’οΈ β βββ getrandom 0.2.12
0/0 0/0 0/0 0/0 0/0 β β βββ cfg-if 1.0.0
1/90 10/582 0/2 0/0 5/63 β’οΈ β βββ libc 0.2.152
0/0 75/121 5/9 0/0 2/4 β’οΈ βββ once_cell 1.19.0
0/0 5/5 0/0 0/0 0/0 β’οΈ βββ serde 1.0.195
0/0 0/0 0/0 0/0 0/0 β β βββ serde_derive 1.0.195
0/0 15/15 0/0 0/0 3/3 β’οΈ β βββ proc-macro2 1.0.78
0/0 4/4 0/0 0/0 0/0 β’οΈ β β βββ unicode-ident 1.0.12
0/0 0/0 0/0 0/0 0/0 β β βββ quote 1.0.35
0/0 15/15 0/0 0/0 3/3 β’οΈ β β βββ proc-macro2 1.0.78
0/0 80/80 3/3 0/0 2/2 β’οΈ β βββ syn 2.0.48
0/0 15/15 0/0 0/0 3/3 β’οΈ β βββ proc-macro2 1.0.78
0/0 0/0 0/0 0/0 0/0 β β βββ quote 1.0.35
0/0 4/4 0/0 0/0 0/0 β’οΈ β βββ unicode-ident 1.0.12
0/0 0/0 0/0 0/0 0/0 π βββ servlin 0.4.3
0/0 4/4 0/0 0/0 2/2 β’οΈ βββ async-fs 1.6.0
4/4 230/230 40/40 0/0 12/12 β’οΈ β βββ async-lock 2.8.0
0/0 106/116 4/8 0/0 0/0 β’οΈ β β βββ event-listener 2.5.3
0/0 0/0 0/0 0/0 0/0 π β βββ blocking 1.5.1
0/0 0/0 0/0 0/0 0/0 π β β βββ async-channel 2.1.1
0/0 170/170 2/2 0/0 1/1 β’οΈ β β β βββ concurrent-queue 2.4.0
4/4 12/76 4/16 0/0 0/3 β’οΈ β β β β βββ crossbeam-utils 0.8.19
0/0 59/87 6/12 0/0 0/0 β’οΈ β β β βββ event-listener 4.0.3
0/0 170/170 2/2 0/0 1/1 β’οΈ β β β β βββ concurrent-queue 2.4.0
0/0 0/0 0/0 0/0 0/0 π β β β β βββ parking 2.2.0
0/0 11/191 0/0 0/0 2/2 β’οΈ β β β β βββ pin-project-lite 0.2.13
0/0 2/2 0/0 0/0 0/0 β’οΈ β β β βββ event-listener-strategy 0.4.0
0/0 59/87 6/12 0/0 0/0 β’οΈ β β β β βββ event-listener 4.0.3
0/0 11/191 0/0 0/0 2/2 β’οΈ β β β β βββ pin-project-lite 0.2.13
0/0 37/37 2/2 0/0 0/0 β’οΈ β β β βββ futures-core 0.3.30
0/0 11/191 0/0 0/0 2/2 β’οΈ β β β βββ pin-project-lite 0.2.13
4/4 228/228 40/40 0/0 13/13 β’οΈ β β βββ async-lock 3.3.0
0/0 59/87 6/12 0/0 0/0 β’οΈ β β β βββ event-listener 4.0.3
0/0 2/2 0/0 0/0 0/0 β’οΈ β β β βββ event-listener-strategy 0.4.0
0/0 11/191 0/0 0/0 2/2 β’οΈ β β β βββ pin-project-lite 0.2.13
1/1 860/866 4/4 0/0 13/13 β’οΈ β β βββ async-task 4.7.0
0/0 0/0 0/0 0/0 0/0 π β β βββ fastrand 2.0.1
0/0 0/0 0/0 0/0 0/0 β β β βββ futures-io 0.3.30
0/0 0/0 0/0 0/0 0/0 β β β βββ futures-lite 2.2.0
0/0 0/0 0/0 0/0 0/0 π β β β βββ fastrand 2.0.1
0/0 37/37 2/2 0/0 0/0 β’οΈ β β β βββ futures-core 0.3.30
0/0 0/0 0/0 0/0 0/0 β β β β βββ futures-io 0.3.30
27/41 2047/2495 2/2 0/0 109/147 β’οΈ β β β βββ memchr 2.7.1
2/2 18/20 1/1 0/0 0/0 β’οΈ β β β β βββ log 0.4.20
0/0 5/5 0/0 0/0 0/0 β’οΈ β β β β βββ serde 1.0.195
0/0 0/0 0/0 0/0 0/0 π β β β βββ parking 2.2.0
0/0 11/191 0/0 0/0 2/2 β’οΈ β β β βββ pin-project-lite 0.2.13
0/0 28/28 2/2 0/0 0/0 β’οΈ β β βββ piper 0.2.1
0/0 33/33 2/2 0/0 0/0 β’οΈ β β β βββ atomic-waker 1.1.2
0/0 0/0 0/0 0/0 0/0 π β β β βββ fastrand 2.0.1
0/0 0/0 0/0 0/0 0/0 β β β β βββ futures-io 0.3.30
0/0 14/14 1/1 0/0 0/0 β’οΈ β β βββ tracing 0.1.40
2/2 18/20 1/1 0/0 0/0 β’οΈ β β βββ log 0.4.20
0/0 11/191 0/0 0/0 2/2 β’οΈ β β βββ pin-project-lite 0.2.13
0/0 96/96 5/5 0/0 2/2 β’οΈ β β βββ tracing-core 0.1.32
0/0 75/121 5/9 0/0 2/4 β’οΈ β β βββ once_cell 1.19.0
0/0 0/0 0/0 0/0 0/0 β β βββ futures-lite 1.13.0
0/0 0/0 0/0 0/0 0/0 π β βββ fastrand 1.9.0
0/0 37/37 2/2 0/0 0/0 β’οΈ β βββ futures-core 0.3.30
0/0 0/0 0/0 0/0 0/0 β β βββ futures-io 0.3.30
27/41 2047/2495 2/2 0/0 109/147 β’οΈ β βββ memchr 2.7.1
0/0 0/0 0/0 0/0 0/0 π β βββ parking 2.2.0
0/0 11/191 0/0 0/0 2/2 β’οΈ β βββ pin-project-lite 0.2.13
0/0 0/0 0/0 0/0 0/0 π β βββ waker-fn 1.1.1
β [build-dependencies]
0/0 0/0 0/0 0/0 0/0 β β βββ autocfg 1.1.0
0/0 0/0 0/0 0/0 0/0 π βββ async-net 1.8.0
0/0 2/4 0/0 0/0 0/0 β’οΈ β βββ async-io 1.13.0
β β [build-dependencies]
0/0 0/0 0/0 0/0 0/0 β β β βββ autocfg 1.1.0
4/4 230/230 40/40 0/0 12/12 β’οΈ β β βββ async-lock 2.8.0
0/0 0/0 0/0 0/0 0/0 β β β βββ cfg-if 1.0.0
0/0 170/170 2/2 0/0 1/1 β’οΈ β β βββ concurrent-queue 2.4.0
0/0 0/0 0/0 0/0 0/0 β β β βββ futures-lite 1.13.0
2/2 18/20 1/1 0/0 0/0 β’οΈ β β βββ log 0.4.20
0/0 0/0 0/0 0/0 0/0 π β β βββ parking 2.2.0
0/1 11/250 5/16 1/4 0/5 β’οΈ β β βββ polling 2.8.0
0/0 0/0 0/0 0/0 0/0 β β β β βββ cfg-if 1.0.0
1/90 10/582 0/2 0/0 5/63 β’οΈ β β β βββ libc 0.2.152
2/2 18/20 1/1 0/0 0/0 β’οΈ β β β βββ log 0.4.20
β β β [build-dependencies]
0/0 0/0 0/0 0/0 0/0 β β β β βββ autocfg 1.1.0
44/371 1847/6661 1/2 0/0 6/22 β’οΈ β β βββ rustix 0.37.27
0/0 0/0 0/0 0/0 0/0 β β β β βββ bitflags 1.3.2
0/0 35/103 0/0 0/0 0/0 β’οΈ β β β βββ errno 0.3.8
1/90 10/582 0/2 0/0 5/63 β’οΈ β β β β βββ libc 0.2.152
0/0 24/666 27/36 2/2 6/14 β’οΈ β β β βββ io-lifetimes 1.0.11
1/90 10/582 0/2 0/0 5/63 β’οΈ β β β β βββ libc 0.2.152
3/6 542/675 2/4 0/0 3/4 β’οΈ β β β β βββ socket2 0.4.10
1/90 10/582 0/2 0/0 5/63 β’οΈ β β β β βββ libc 0.2.152
0/0 7/7 0/0 0/0 0/0 β’οΈ β β β βββ itoa 1.0.10
1/90 10/582 0/2 0/0 5/63 β’οΈ β β β βββ libc 0.2.152
0/0 24/24 0/0 0/0 3/3 β’οΈ β β βββ slab 0.4.9
β β β [build-dependencies]
0/0 0/0 0/0 0/0 0/0 β β β β βββ autocfg 1.1.0
0/0 5/5 0/0 0/0 0/0 β’οΈ β β β βββ serde 1.0.195
3/6 542/675 2/4 0/0 3/4 β’οΈ β β βββ socket2 0.4.10
0/0 0/0 0/0 0/0 0/0 π β β βββ waker-fn 1.1.1
0/0 0/0 0/0 0/0 0/0 π β βββ blocking 1.5.1
0/0 0/0 0/0 0/0 0/0 β β βββ futures-lite 1.13.0
0/0 0/0 0/0 0/0 0/0 π βββ fixed-buffer 0.5.0
0/0 0/0 0/0 0/0 0/0 β β βββ futures-io 0.3.30
0/0 0/0 0/0 0/0 0/0 β βββ futures-io 0.3.30
0/0 0/0 0/0 0/0 0/0 β βββ futures-lite 1.13.0
0/0 75/121 5/9 0/0 2/4 β’οΈ βββ once_cell 1.19.0
0/0 0/0 0/0 0/0 0/0 π βββ permit 0.2.1
0/0 32/32 0/0 0/0 0/0 β’οΈ βββ rand 0.8.5
1/90 10/582 0/2 0/0 5/63 β’οΈ β βββ libc 0.2.152
2/2 18/20 1/1 0/0 0/0 β’οΈ β βββ log 0.4.20
0/0 0/0 0/0 0/0 0/0 β β βββ rand_chacha 0.3.1
2/2 636/712 0/0 0/0 17/25 β’οΈ β β βββ ppv-lite86 0.2.17
0/0 2/2 0/0 0/0 0/0 β’οΈ β β βββ rand_core 0.6.4
3/7 47/225 0/1 0/0 1/3 β’οΈ β β β βββ getrandom 0.2.12
0/0 5/5 0/0 0/0 0/0 β’οΈ β β β βββ serde 1.0.195
0/0 5/5 0/0 0/0 0/0 β’οΈ β β βββ serde 1.0.195
0/0 2/2 0/0 0/0 0/0 β’οΈ β βββ rand_core 0.6.4
0/0 5/5 0/0 0/0 0/0 β’οΈ β βββ serde 1.0.195
0/0 0/0 0/0 0/0 0/0 π βββ safe-regex 0.2.5
0/0 0/0 0/0 0/0 0/0 π β βββ safe-regex-macro 0.2.5
0/0 0/0 0/0 0/0 0/0 π β βββ safe-proc-macro2 1.0.67
0/0 4/4 0/0 0/0 0/0 β’οΈ β β βββ unicode-ident 1.0.12
0/0 0/0 0/0 0/0 0/0 π β βββ safe-regex-compiler 0.2.5
0/0 0/0 0/0 0/0 0/0 π β βββ safe-proc-macro2 1.0.67
0/0 0/0 0/0 0/0 0/0 π β βββ safe-quote 1.0.15
0/0 0/0 0/0 0/0 0/0 π β βββ safe-proc-macro2 1.0.67
0/0 0/0 0/0 0/0 0/0 π βββ safina-executor 0.3.3
0/0 0/0 0/0 0/0 0/0 π β βββ safina-sync 0.2.4
0/0 0/0 0/0 0/0 0/0 π β βββ safina-threadpool 0.2.4
0/0 0/0 0/0 0/0 0/0 π βββ safina-sync 0.2.4
0/0 0/0 0/0 0/0 0/0 π βββ safina-timer 0.1.11
0/0 75/121 5/9 0/0 2/4 β’οΈ β βββ once_cell 1.19.0
0/0 5/5 0/0 0/0 0/0 β’οΈ βββ serde 1.0.195
0/0 4/7 0/0 0/0 0/0 β’οΈ βββ serde_json 1.0.111
0/0 7/7 0/0 0/0 0/0 β’οΈ β βββ itoa 1.0.10
7/9 579/715 0/0 0/0 2/2 β’οΈ β βββ ryu 1.0.16
0/0 5/5 0/0 0/0 0/0 β’οΈ β βββ serde 1.0.195
0/0 0/0 0/0 0/0 0/0 π βββ temp-dir 0.1.12
0/0 0/0 0/0 0/0 0/0 π βββ temp-file 0.1.8
0/0 0/0 0/0 0/0 0/0 β βββ url 2.5.0
0/0 2/2 0/0 0/0 0/0 β’οΈ βββ form_urlencoded 1.2.1
0/0 8/8 0/0 0/0 0/0 β’οΈ β βββ percent-encoding 2.3.1
0/0 0/0 0/0 0/0 0/0 β βββ idna 0.5.0
0/0 5/5 0/0 0/0 0/0 β’οΈ β βββ unicode-bidi 0.3.15
0/0 5/5 0/0 0/0 0/0 β’οΈ β β βββ serde 1.0.195
0/0 20/20 0/0 0/0 0/0 β’οΈ β βββ unicode-normalization 0.1.22
0/0 0/0 0/0 0/0 0/0 π β βββ tinyvec 1.6.0
0/0 5/5 0/0 0/0 0/0 β’οΈ β βββ serde 1.0.195
0/0 0/0 0/0 0/0 0/0 π β βββ tinyvec_macros 0.1.1
0/0 8/8 0/0 0/0 0/0 β’οΈ βββ percent-encoding 2.3.1
0/0 5/5 0/0 0/0 0/0 β’οΈ βββ serde 1.0.195
102/542 7978/15638 158/210 3/6 204/345
```
# Changelog
- v0.2.5
- Add `WidgetList::push` and `WidgetList::new`.
- v0.2.4
- Support `ApplinIos` 0.36.0.
- Add `reset_var` and `stop_actions` actions.
- v0.2.3 - Add `id` field to `Action` and `ModalButton`, for testing.
- v0.2.2 - Add `with_validated` to input widgets. Supports `ApplinIos` 0.33.0.
- v0.2.1
- Add `id` fields for testing.
- Make `Action` fields public.
- Make `Real32` and enums `Copy`.
- v0.2.0
- Support `ApplinIos` 0.32.0.
- Remove `on_user_error_poll` action and make it a parameter of the `rpc` action.
- v0.1.7
- Support `ApplinIos` 0.31.0.
- Add `modal` action.
- Add `aspect_ratio` to `choose_photo` and `take_photo` actions.
- v0.1.6
- Support `ApplinIos` 0.28.0.
- Add `logout` action.
- Add `selector` widget.
- v0.1.5
- Support `ApplinIos` 0.25.0.
- Add `poll_delay_ms` to checkbox and textfield.
- Replace checkbox `rpc` field with `actions`.
- v0.1.4
- Add `From<Option<Into<Widget>>>` for `Widget` for use with `error_text`.
- Add `SessionCookie`, `Id`, and `Secret`.
- Organize into modules for easier discovery.
- v0.1.3 - Add `on_user_error_poll` action.
- v0.1.2 - Bugfixes
- v0.1.1 - Update documentation.
- v0.1.0 - First published version