From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gate001.proxmox.com (gate001.proxmox.com [45.144.208.40]) by lore.proxmox.com (Postfix) with ESMTPS id 271FD1FF0B2 for ; Thu, 20 Aug 2026 13:23:58 +0200 (CEST) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id 307A821572; Thu, 20 Aug 2026 13:23:57 +0200 (CEST) Mime-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=UTF-8 Date: Thu, 20 Aug 2026 13:23:51 +0200 Message-Id: Subject: Re: [PATCH proxmox 01/20] router: introduce shared state From: "Lukas Wagner" To: "Lukas Wagner" , X-Mailer: aerc 0.21.0-0-g5549850facc2-dirty References: <20260817125727.454039-1-l.wagner@proxmox.com> <20260817125727.454039-2-l.wagner@proxmox.com> In-Reply-To: <20260817125727.454039-2-l.wagner@proxmox.com> X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1787225006496 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.808 Adjusted score from AWL reputation of From: address DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment (newer systems) RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: ORYXO7JGINSER7QU43N7KFAULTSVXW45 X-Message-ID-Hash: ORYXO7JGINSER7QU43N7KFAULTSVXW45 X-MailFrom: l.wagner@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox Datacenter Manager development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: On Mon Aug 17, 2026 at 2:57 PM CEST, Lukas Wagner wrote: > API handlers often need access to long-lived application data such as > configuration, caches or client handles. So far the only way to get > there is a global static, which hides the actual dependencies of a > handler and makes testing awkward. > > Add a type-keyed registry that a server fills once during startup, > together with an accessor on RpcEnvironment so that handlers can reach > it. The State newtype wraps values that come from the registry, > which allows telling them apart from regular API parameters. > Since the question came up off-list: The reason why this is a type-keyed map is that we can inject multiple types that can later be retrieved by using the State macro. This allows, for example, having API handlers in crates that require their own context type to be set up. For instance, in proxmox-notify, one requires proxmox_notify::Context to be implemented and set up. For passing that along in API handlers, there could be a=20 struct NotifyContext { inner: Box } and then in the API handlers defined in proxmox_notify, the context could then be retrieved as fn add_sendmail_endpoint(context: State, ...) {} This the outcome of a suggestion from Robert from the RFC of this series: https://lore.proxmox.com/pdm-devel/20260129134418.307552-1-l.wagner@proxmox= .com/T/#t In general, this is pretty much identical to how actix-web handles it: https://actix.rs/docs/application/#state Under the hood they also use a type-keyed map with `dyn Any` as a value type.