#[non_exhaustive]pub struct EcosystemRuntime {
pub policy: Arc<RegistryAccessPolicy>,
pub nuget_user_profile_sources: Arc<AtomicBool>,
pub gitlab_instance_host: Arc<RwLock<Option<String>>>,
pub lockfile_cache: Arc<LockFileCache>,
}Expand description
Live-updatable settings register_ecosystems threads into every ecosystem that needs them.
Bundled into one struct (issue #561, M3) rather than growing that function’s arity again for each new cross-ecosystem live flag.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.policy: Arc<RegistryAccessPolicy>Gates every workspace-declared registry index host (spec #443,
registries.workspace_registries).
nuget_user_profile_sources: Arc<AtomicBool>registries.nuget_user_profile_sources (issue #561, FR-006) — whether a NuGet
user-profile-tier NuGet.Config source with no repo-declared counterpart becomes a
routing hop, not just a credential source. Default false.
gitlab_instance_host: Arc<RwLock<Option<String>>>registries.gitlab_instance_host (issue #466, spec FR-005a/FR-011a) — the raw
configured GitLab instance host string, or None when unset. A feature-agnostic
Arc<RwLock<Option<String>>> (not a deps-gitlab-ci type) since this struct is
un-cfg’d — see deps_gitlab_ci::host::GitlabInstanceHost’s docs for why host
validation lives in that crate instead, applied on read.
lockfile_cache: Arc<LockFileCache>composer.lock memoization cache (#1212 impl-critic follow-up) register_ecosystems
hands ComposerEcosystem::with_context — unlike the three fields above, this has a
sensible default (a fresh, private cache), so it is not a Self::new parameter; set
explicitly via Self::with_lockfile_cache so an adapter with its own long-lived
cache (e.g. deps-lsp’s ServerState::lockfile_cache, also read by its own
in-use-version resolution) can share that exact instance instead of Composer
classification parsing the same composer.lock independently.
Implementations§
Source§impl EcosystemRuntime
impl EcosystemRuntime
Sourcepub fn new(
policy: Arc<RegistryAccessPolicy>,
nuget_user_profile_sources: Arc<AtomicBool>,
gitlab_instance_host: Arc<RwLock<Option<String>>>,
) -> Self
pub fn new( policy: Arc<RegistryAccessPolicy>, nuget_user_profile_sources: Arc<AtomicBool>, gitlab_instance_host: Arc<RwLock<Option<String>>>, ) -> Self
Constructs the runtime from its three live-updatable settings handles.
Needed because Self is #[non_exhaustive]: a struct literal only works inside
this crate, so every other crate — including anything embedding register_ecosystems,
this module’s advertised entry point — must use this constructor instead. Unlike some
config-DTO builders elsewhere in this workspace (e.g. deps_lsp::config::InlayHintsConfig::new),
all three fields are required here: none has a sensible default, so there is no
accompanying with_* chain — a future field can still add one without breaking this
signature.
§Examples
use deps_core::net_policy::RegistryAccessPolicy;
use deps_engine::setup::EcosystemRuntime;
use std::sync::atomic::AtomicBool;
use std::sync::{Arc, RwLock};
let runtime = EcosystemRuntime::new(
Arc::new(RegistryAccessPolicy::default()),
Arc::new(AtomicBool::new(false)),
Arc::new(RwLock::new(None)),
);
assert!(!runtime.nuget_user_profile_sources.load(std::sync::atomic::Ordering::Relaxed));Sourcepub fn with_lockfile_cache(self, lockfile_cache: Arc<LockFileCache>) -> Self
pub fn with_lockfile_cache(self, lockfile_cache: Arc<LockFileCache>) -> Self
Overrides Self::lockfile_cache’s default (a fresh, private cache) with an existing
instance — see that field’s own doc for why an adapter with its own long-lived cache
wants to do this.
§Examples
use deps_core::lockfile::LockFileCache;
use deps_core::policy_config::PolicyConfig;
use deps_engine::setup::EcosystemRuntime;
use std::sync::Arc;
let shared = Arc::new(LockFileCache::new());
let runtime =
EcosystemRuntime::from_policy(&PolicyConfig::default()).with_lockfile_cache(Arc::clone(&shared));
assert!(Arc::ptr_eq(&runtime.lockfile_cache, &shared));Sourcepub fn from_policy(policy: &PolicyConfig) -> Self
pub fn from_policy(policy: &PolicyConfig) -> Self
Builds the runtime’s three live-updatable handles from a PolicyConfig snapshot.
Construction only — this does not touch any adapter-side state (e.g. deps-lsp’s
ServerState::cache/cold_start_limiter, or its
warn_if_gitlab_instance_host_invalid notification call): those remain the caller’s
responsibility, since they carry their own ordering constraints relative to the
adapter’s own config-reload lifecycle (issue #1058; see
specs/062-cli-check-mode/architecture-decision.md §8, PR 1b-ii).
The three values themselves come from
RegistriesConfig::resolve,
shared with deps-lsp’s initialize/did_change_configuration config-reload sites so
this derivation exists in exactly one place (issue #1058, T009).
§Examples
use deps_core::policy_config::PolicyConfig;
use deps_engine::setup::EcosystemRuntime;
let runtime = EcosystemRuntime::from_policy(&PolicyConfig::default());
assert!(!runtime.nuget_user_profile_sources.load(std::sync::atomic::Ordering::Relaxed));