1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
[]
= "frust-devtools"
= true
= true
= true
= true
= "In-app debug service for Frust apps: a loopback, token-authenticated NDJSON JSON-RPC server backed by a shell-supplied trait."
= true
= true
= true
= true
= "README.md"
[]
# The wire contract, and the ONLY frust-* dependency this crate may ever have.
# This is a framework-side crate: it must not depend on frust-core, a shell, or
# any tooling crate, and no tooling crate may depend on it — the two sides meet
# at the protocol crate and nowhere else (docs/ARCHITECTURE.md's Tooling
# isolation rule). `serde_json` reaches this crate through the protocol crate's
# whole-crate valve (`frust_devtools_protocol::serde_json`) rather than a
# re-declared dependency, so the `Value`s built here are the same crate version
# the protocol's own public API speaks (docs/CODE_STANDARDS.md's whole-crate
# valve rule).
= { = "../frust-devtools-protocol", = "0.5.1" }
# The workspace `tokio` pin is `default-features = false`; enable exactly what
# the loopback service needs and nothing more:
# rt — the small internal current-thread runtime the service owns, so a
# shell embedding it needs no tokio knowledge of its own
# net — `TcpListener`/`TcpStream` (also what satisfies `enable_io()`)
# io-util — `AsyncReadExt`/`AsyncWriteExt` for the NDJSON line framing
# sync — `broadcast` (frame-stats fan-out), `mpsc`/`oneshot` (the backend
# hand-off), `watch` (shutdown), `Semaphore` (client cap)
# time — the per-request backend timeout and the shutdown grace window
# macros — `tokio::select!` in the accept/connection loops (proc-macro only:
# `tokio-macros`, compile-time weight, nothing at runtime). Without
# it a cancellable accept loop would need a sleep-poll or a
# self-connect wakeup trick, both worse than the macro.
# Deliberately NOT enabled: `rt-multi-thread` (one IO-bound thread is enough,
# and a shell should not pay for a worker pool), `fs`, `process`, `signal`.
= { = true, = [
"rt",
"net",
"io-util",
"sync",
"time",
"macros",
] }
# The discovery line (see `service`'s module doc) and diagnostics. A shell's
# logger is the only output sink this crate has — it never prints.
= { = true }