Skip to content

Commit 4cfa03b

Browse files
committed
Move serialization to ser.rs and add tests
1 parent c442594 commit 4cfa03b

File tree

2 files changed

+90
-22
lines changed

2 files changed

+90
-22
lines changed

crates/turborepo-lockfiles/src/bun/mod.rs

+8-22
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@ use biome_json_formatter::context::JsonFormatOptions;
44
use biome_json_parser::JsonParserOptions;
55
use id::PossibleKeyIter;
66
use itertools::Itertools as _;
7-
use serde::{ser::SerializeTuple, Deserialize, Serialize};
7+
use serde::{Deserialize, Serialize};
88
use serde_json::Value;
99
use turborepo_errors::ParseDiagnostic;
1010

1111
use crate::Lockfile;
1212

1313
mod de;
1414
mod id;
15+
mod ser;
1516

1617
type Map<K, V> = std::collections::BTreeMap<K, V>;
1718

@@ -99,25 +100,6 @@ struct RootInfo {
99100
bin_dir: Option<String>,
100101
}
101102

102-
impl Serialize for PackageEntry {
103-
fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
104-
let mut tuple = serializer.serialize_tuple(4)?;
105-
tuple.serialize_element(&self.ident)?;
106-
107-
let Some(info) = &self.info else {
108-
return tuple.end();
109-
};
110-
111-
tuple.serialize_element(&self.registry.as_deref().unwrap_or(""))?;
112-
tuple.serialize_element(info)?;
113-
tuple.serialize_element(&self.checksum)?;
114-
if let Some(root) = &self.root {
115-
tuple.serialize_element(root)?;
116-
}
117-
tuple.end()
118-
}
119-
}
120-
121103
impl Lockfile for BunLockfile {
122104
#[tracing::instrument(skip(self, workspace_path))]
123105
fn resolve_package(
@@ -252,13 +234,16 @@ impl BunLockfile {
252234
let mut new_patched_dependencies = Map::new();
253235

254236
for package in packages {
255-
let package_key = self.key_to_entry.get(package).expect("package key");
237+
let package_key = self
238+
.key_to_entry
239+
.get(package)
240+
.expect("package key should exist");
256241
if let Some((key, entry)) = self.package_entry(&package_key) {
257242
new_packages.insert(key.to_string(), entry.clone());
258243
}
259244
}
260245

261-
// Add root workspace
246+
// The root workspace is "" in the lockfile
262247
let root_workspace = self
263248
.data
264249
.workspaces
@@ -364,6 +349,7 @@ impl PackageInfo {
364349
#[cfg(test)]
365350
mod test {
366351
use pretty_assertions::assert_eq;
352+
use serde_json::json;
367353
use test_case::test_case;
368354

369355
use super::*;
+82
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
use serde::{ser::SerializeTuple, Serialize};
2+
3+
use super::PackageEntry;
4+
5+
impl Serialize for PackageEntry {
6+
fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7+
let mut tuple = serializer.serialize_tuple(4)?;
8+
tuple.serialize_element(&self.ident)?;
9+
10+
if let Some(info) = &self.info {
11+
tuple.serialize_element(&self.registry.as_deref().unwrap_or(""))?;
12+
tuple.serialize_element(info)?;
13+
tuple.serialize_element(&self.checksum)?;
14+
if let Some(root) = &self.root {
15+
tuple.serialize_element(root)?;
16+
}
17+
};
18+
19+
tuple.end()
20+
}
21+
}
22+
23+
#[cfg(test)]
24+
mod test {
25+
use serde_json::json;
26+
27+
use super::*;
28+
use crate::bun::PackageInfo;
29+
30+
#[test]
31+
fn test_serialize_registry_package() {
32+
let package = PackageEntry {
33+
ident: "[email protected]".into(),
34+
registry: Some("registry".into()),
35+
info: Some(PackageInfo {
36+
dependencies: [("is-number".into(), "^6.0.0".into())]
37+
.into_iter()
38+
.collect(),
39+
..Default::default()
40+
}),
41+
checksum: Some("sha".into()),
42+
root: None,
43+
};
44+
45+
let expected =
46+
json!(["[email protected]", "registry", {"dependencies": {"is-number": "^6.0.0"}}, "sha"]);
47+
let actual = serde_json::to_value(&package).unwrap();
48+
assert_eq!(actual, expected);
49+
}
50+
51+
#[test]
52+
fn test_serialize_registry_package_no_deps() {
53+
let package = PackageEntry {
54+
ident: "[email protected]".into(),
55+
registry: Some("registry".into()),
56+
info: Some(PackageInfo {
57+
..Default::default()
58+
}),
59+
checksum: Some("sha".into()),
60+
root: None,
61+
};
62+
63+
let expected = json!(["[email protected]", "registry", {}, "sha"]);
64+
let actual = serde_json::to_value(&package).unwrap();
65+
assert_eq!(actual, expected);
66+
}
67+
68+
#[test]
69+
fn test_serialize_workspace_package() {
70+
let package = PackageEntry {
71+
ident: "@workspace/package".into(),
72+
registry: None,
73+
info: None,
74+
checksum: None,
75+
root: None,
76+
};
77+
78+
let expected = json!(["@workspace/package"]);
79+
let actual = serde_json::to_value(&package).unwrap();
80+
assert_eq!(actual, expected);
81+
}
82+
}

0 commit comments

Comments
 (0)