1- use super :: { PBXObject , PBXTarget , XCRemoteSwiftPackageReference } ;
1+ use super :: * ;
22use std:: {
33 cell:: RefCell ,
44 collections:: HashMap ,
@@ -30,19 +30,75 @@ impl PBXObjectCollection {
3030 self . get ( reference) ?. as_pbx_target ( ) . map ( |r| r. clone ( ) )
3131 }
3232
33- /// Get XCRemoteSwiftPackageReference from a vec of references
34- pub fn get_packages_from_references < ' a > (
33+ /// Get PBXBuildPhase by reference
34+ pub fn get_build_phase < ' a > ( & ' a self , reference : & str ) -> Option < Rc < RefCell < PBXBuildPhase > > > {
35+ self . get ( reference) ?. as_pbx_build_phase ( ) . map ( |r| r. clone ( ) )
36+ }
37+
38+ /// Get PBXBuildFile by reference
39+ pub fn get_build_file < ' a > ( & ' a self , reference : & str ) -> Option < Rc < RefCell < PBXBuildFile > > > {
40+ self . get ( reference) ?. as_pbx_build_file ( ) . map ( |r| r. clone ( ) )
41+ }
42+
43+ /// Get all PBXBuildPhase
44+ pub fn build_phases < ' a > ( & ' a self ) -> Vec < ( String , Rc < RefCell < PBXBuildPhase > > ) > {
45+ self . iter ( )
46+ . filter ( |o| o. 1 . is_pbx_build_phase ( ) )
47+ . map ( |( k, o) | ( k. clone ( ) , o. as_pbx_build_phase ( ) . unwrap ( ) . clone ( ) ) )
48+ . collect ( )
49+ }
50+
51+ /// Get all PBXBuildFile
52+ pub fn build_files < ' a > ( & ' a self ) -> Vec < ( String , Rc < RefCell < PBXBuildFile > > ) > {
53+ self . iter ( )
54+ . filter ( |o| o. 1 . is_pbx_build_file ( ) )
55+ . map ( |( k, o) | ( k. clone ( ) , o. as_pbx_build_file ( ) . unwrap ( ) . clone ( ) ) )
56+ . collect ( )
57+ }
58+
59+ /// Get All XCSwiftPackageProductDependency Objects
60+ pub fn swift_package_product_dependencies < ' a > (
3561 & ' a self ,
36- references : & Vec < String > ,
37- ) -> Vec < ( String , Rc < RefCell < XCRemoteSwiftPackageReference > > ) > {
38- references
39- . iter ( )
40- . map ( |id| {
41- let package = self . get ( id ) ?. as_xc_remote_swift_package_reference ( ) ? ;
42- Some ( ( id . clone ( ) , package . clone ( ) ) )
62+ ) -> Vec < ( String , Rc < RefCell < XCSwiftPackageProductDependency > > ) > {
63+ self . iter ( )
64+ . map ( | ( k , v ) | {
65+ Some ( (
66+ k . clone ( ) ,
67+ v . as_xc_swift_package_product_dependency ( ) ?. clone ( ) ,
68+ ) )
4369 } )
4470 . flatten ( )
45- . collect ( )
71+ . collect :: < Vec < _ > > ( )
72+ }
73+
74+ /// Get All XCRemoteSwiftPackageReference Objects
75+ pub fn swift_package_references < ' a > (
76+ & ' a self ,
77+ ) -> Vec < ( String , Rc < RefCell < XCRemoteSwiftPackageReference > > ) > {
78+ self . iter ( )
79+ . map ( |( k, v) | Some ( ( k. clone ( ) , v. as_xc_remote_swift_package_reference ( ) ?. clone ( ) ) ) )
80+ . flatten ( )
81+ . collect :: < Vec < _ > > ( )
82+ }
83+
84+ /// Get XCSwiftPackageProductDependency by reference
85+ pub fn get_swift_package_product_dependency < ' a > (
86+ & ' a self ,
87+ object_reference : & str ,
88+ ) -> Option < Rc < RefCell < XCSwiftPackageProductDependency > > > {
89+ self . get ( object_reference) ?
90+ . as_xc_swift_package_product_dependency ( )
91+ . map ( |r| r. clone ( ) )
92+ }
93+
94+ /// Get XCSwiftPackageProductDependency by reference
95+ pub fn get_swift_package_reference < ' a > (
96+ & ' a self ,
97+ object_reference : & str ,
98+ ) -> Option < Rc < RefCell < XCRemoteSwiftPackageReference > > > {
99+ self . get ( object_reference) ?
100+ . as_xc_remote_swift_package_reference ( )
101+ . map ( |r| r. clone ( ) )
46102 }
47103
48104 /// Get PBXTarget from a vec of references
@@ -52,10 +108,7 @@ impl PBXObjectCollection {
52108 ) -> Vec < ( String , Rc < RefCell < PBXTarget > > ) > {
53109 references
54110 . iter ( )
55- . map ( |id| {
56- let target = self . get_target ( id) ?;
57- Some ( ( id. clone ( ) , target. clone ( ) ) )
58- } )
111+ . map ( |id| Some ( ( id. clone ( ) , self . get_target ( id) ?) ) )
59112 . flatten ( )
60113 . collect ( )
61114 }
@@ -79,4 +132,48 @@ impl PBXObjectCollection {
79132 } )
80133 . map ( |( key, o) | ( key. clone ( ) , o. as_pbx_target ( ) . unwrap ( ) . clone ( ) ) )
81134 }
135+
136+ /// Get XCRemoteSwiftPackageReference from a vec of references
137+ pub fn get_swift_package_reference_from_references < ' a > (
138+ & ' a self ,
139+ references : & Vec < String > ,
140+ ) -> Vec < ( String , Rc < RefCell < XCRemoteSwiftPackageReference > > ) > {
141+ references
142+ . iter ( )
143+ . map ( |reference| {
144+ Some ( (
145+ reference. clone ( ) ,
146+ self . get_swift_package_reference ( reference) ?,
147+ ) )
148+ } )
149+ . flatten ( )
150+ . collect ( )
151+ }
152+
153+ /// Get PBXBuildPhase from a vec of references
154+ pub fn get_build_phases_from_reference < ' a > (
155+ & ' a self ,
156+ references : & Vec < String > ,
157+ ) -> Vec < ( String , Rc < RefCell < PBXBuildPhase > > ) > {
158+ references
159+ . iter ( )
160+ . map ( |reference| Some ( ( reference. clone ( ) , self . get_build_phase ( reference) ?) ) )
161+ . flatten ( )
162+ . collect ( )
163+ }
164+
165+ /// Get XCSwiftPackageProductDependency form a given target reference
166+ pub fn get_product_dependency_from_target_reference < ' a > (
167+ & ' a self ,
168+ target_reference : & str ,
169+ ) -> Option < ( String , Rc < RefCell < XCSwiftPackageProductDependency > > ) > {
170+ self . swift_package_product_dependencies ( )
171+ . into_iter ( )
172+ . find ( |( _, p) | {
173+ p. borrow ( )
174+ . package_reference ( )
175+ . map ( |v| v == target_reference)
176+ . unwrap_or_default ( )
177+ } )
178+ }
82179}
0 commit comments