Skip to content

Commit 5e8b060

Browse files
committed
ref(pbxproj): root object no more deref to objects
1 parent 08dde37 commit 5e8b060

File tree

2 files changed

+29
-14
lines changed

2 files changed

+29
-14
lines changed

src/pbxproj/object/project.rs

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -342,13 +342,13 @@ mod tests {
342342
))
343343
.unwrap();
344344
let objects = PBXRootObject::try_from(file).unwrap();
345-
let inner = objects.clone();
346-
let inner = inner.borrow();
345+
let inner = objects.objects();
347346
let project = inner
348347
.iter()
349348
.find(|s| s.1.is_pbx_project())
350349
.map(|(_, o)| o.as_pbx_project().unwrap().clone())
351350
.unwrap();
351+
drop(inner);
352352
// root must live to next scope
353353
(objects, project)
354354
}
@@ -440,7 +440,7 @@ mod tests {
440440

441441
#[test]
442442
fn test_add_swift_package_with_new_version() {
443-
let (objects, project) = get_project("demo1");
443+
let (root, project) = get_project("demo1");
444444
let mut project = project.borrow_mut();
445445
let new_package = project
446446
.add_swift_package(
@@ -455,18 +455,17 @@ mod tests {
455455
project.packages().unwrap().first().unwrap().1,
456456
"new package should be added to project"
457457
);
458-
let objects = objects.borrow();
459-
println!("{:#?}", objects.build_files());
458+
println!("{:#?}", root.objects().build_files());
460459
assert_eq!(
461460
new_package,
462-
objects.swift_package_references().first().unwrap().1,
461+
root.objects().swift_package_references().first().unwrap().1,
463462
"new package should be added in object collection"
464463
);
465464
}
466465

467466
#[test]
468467
fn test_add_swift_package_new_package() {
469-
let (objects, project) = get_project("demo1");
468+
let (root, project) = get_project("demo1");
470469
let mut project = project.borrow_mut();
471470
let new_package = project
472471
.add_swift_package(
@@ -481,8 +480,7 @@ mod tests {
481480
project.packages().unwrap()[1].1,
482481
"new package should be added to project"
483482
);
484-
let objects = objects.borrow();
485-
let has_new_package = objects.swift_package_references().iter().any(|v| {
483+
let has_new_package = root.objects().swift_package_references().iter().any(|v| {
486484
v.1.borrow()
487485
.repository_url
488486
.eq(&new_package.borrow().repository_url)

src/pbxproj/rep.rs

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
use super::{PBXHashMap, PBXObject, PBXObjectCollection};
22
use anyhow::Result;
33
use std::{
4-
cell::RefCell,
4+
cell::{Ref, RefCell, RefMut},
55
collections::HashMap,
66
path::{Path, PathBuf},
7-
rc::Rc,
7+
rc::{Rc, Weak},
88
};
99
use tap::Pipe;
1010

1111
/// `Main` Representation of project.pbxproj file
12-
#[derive(Debug, derive_new::new, derive_deref_rs::Deref)]
12+
#[derive(Debug, derive_new::new)]
1313
pub struct PBXRootObject {
1414
/// archiveVersion
1515
archive_version: u8,
@@ -18,8 +18,7 @@ pub struct PBXRootObject {
1818
/// classes
1919
classes: PBXHashMap,
2020
/// Objects
21-
#[deref]
22-
pub(crate) objects: Rc<RefCell<PBXObjectCollection>>,
21+
objects: Rc<RefCell<PBXObjectCollection>>,
2322
/// rootObjectReference
2423
root_object_reference: String,
2524
}
@@ -48,6 +47,24 @@ impl PBXRootObject {
4847
pub fn root_object_reference(&self) -> &str {
4948
self.root_object_reference.as_ref()
5049
}
50+
51+
/// Get a reference to the pbxroot object's objects.
52+
#[must_use]
53+
pub fn objects<'a>(&'a self) -> Ref<'a, PBXObjectCollection> {
54+
self.objects.borrow()
55+
}
56+
57+
/// Get a reference to the pbxroot object's objects.
58+
#[must_use]
59+
pub fn objects_mut<'a>(&'a self) -> RefMut<'a, PBXObjectCollection> {
60+
self.objects.borrow_mut()
61+
}
62+
63+
/// Get a weak reference to objects.
64+
#[must_use]
65+
pub fn clone_objects<'a>(&'a self) -> Weak<RefCell<PBXObjectCollection>> {
66+
Rc::downgrade(&self.objects)
67+
}
5168
}
5269

5370
impl TryFrom<PBXHashMap> for PBXRootObject {

0 commit comments

Comments
 (0)