features,
yanked,
links,
- } = super::DEFAULT_ID.set(&self.source_id, || {
- serde_json::from_str::<RegistryPackage>(line)
+ } = super::DEFAULT_ID.with(|slot| {
+ *slot.borrow_mut() = Some(self.source_id.clone());
+ let res = serde_json::from_str::<RegistryPackage>(line);
+ drop(slot.borrow_mut().take());
+ res
})?;
let pkgid = PackageId::new(&name, &vers, &self.source_id)?;
let summary = Summary::new(pkgid, deps.inner, features, links)?;
//! ```
use std::borrow::Cow;
+use std::cell::RefCell;
use std::collections::BTreeMap;
use std::fmt;
use std::fs::File;
//
// If you're reading this and find this thread local funny, check to see if that
// PR is merged. If it is then let's ditch this thread local!
-scoped_thread_local!(static DEFAULT_ID: SourceId);
+thread_local!(static DEFAULT_ID: RefCell<Option<SourceId>> = Default::default());
impl<'de> de::Deserialize<'de> for DependencyList {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
let id = if let Some(registry) = registry {
SourceId::for_registry(®istry.to_url()?)?
} else {
- DEFAULT_ID.with(|id| id.clone())
+ DEFAULT_ID.with(|id| id.borrow().as_ref().unwrap().clone())
};
let mut dep = Dependency::parse_no_deprecated(&name, Some(&req), &id)?;