11use anyhow:: Result ;
2- use colored:: * ;
3- use rayon:: prelude:: * ;
42
53use crate :: {
64 file_manager:: save_file_with_content,
75 licenses:: license_str,
8- package_version:: { LatestVersion , RustPackageVersion } ,
96 project_info:: { LicenseType , ProjectInfo } ,
107} ;
118
12- fn build_latest_dependencies ( ) -> String {
13- let mut version_string = String :: new ( ) ;
14- let mut packages = vec ! [ RustPackageVersion {
15- name: "pyo3" . to_string( ) ,
16- version: "0.27.1" . to_string( ) ,
17- features: Some ( vec![ "extension-module" . to_string( ) ] ) ,
18- } ] ;
19-
20- packages. par_iter_mut ( ) . for_each ( |package| {
21- if package. get_latest_version ( ) . is_err ( ) {
22- let error_message = format ! (
23- "Error retrieving latest crate version for {}. Using default." ,
24- package. name
25- ) ;
26- println ! ( "\n {}" , error_message. yellow( ) ) ;
27- }
28- } ) ;
29-
30- for package in packages {
31- if let Some ( features) = & package. features {
32- let mut feature_str = "[" . to_string ( ) ;
33- for feature in features {
34- feature_str. push_str ( & format ! ( r#""{feature}", "# ) ) ;
35- }
36-
37- feature_str. truncate ( feature_str. len ( ) - 2 ) ;
38- feature_str. push ( ']' ) ;
39-
40- version_string. push_str ( & format ! (
41- "{} = {{ version = \" {}\" , features = {} }}\n " ,
42- package. name, package. version, feature_str
43- ) ) ;
44- } else {
45- version_string. push_str ( & format ! (
46- "{} = {{ version = \" {}\" }}\n " ,
47- package. name, package. version
48- ) ) ;
49- }
50- }
51-
52- version_string. trim ( ) . to_string ( )
53- }
54-
559fn create_cargo_toml_file (
5610 project_slug : & str ,
5711 project_description : & str ,
5812 source_dir : & str ,
5913 license_type : & LicenseType ,
6014) -> String {
61- let versions = build_latest_dependencies ( ) ;
6215 let license = license_str ( license_type) ;
6316 let name = source_dir. replace ( [ ' ' , '-' ] , "_" ) ;
6417
@@ -76,7 +29,6 @@ name = "_{name}"
7629crate-type = ["cdylib"]
7730
7831[dependencies]
79- {versions}
8032"#
8133 )
8234}
@@ -95,6 +47,22 @@ pub fn save_cargo_toml_file(project_info: &ProjectInfo) -> Result<()> {
9547 Ok ( ( ) )
9648}
9749
50+ pub fn cargo_add_pyo3 ( project_info : & ProjectInfo ) -> Result < ( ) > {
51+ use anyhow:: bail;
52+
53+ let output = std:: process:: Command :: new ( "cargo" )
54+ . args ( [ "add" , "pyo3" , "--features" , "extension-module" ] )
55+ . current_dir ( project_info. base_dir ( ) )
56+ . output ( ) ?;
57+
58+ if !output. status . success ( ) {
59+ let stderr = String :: from_utf8_lossy ( & output. stderr ) ;
60+ bail ! ( "Failed to add pyo3 dependency: {stderr}" ) ;
61+ }
62+
63+ Ok ( ( ) )
64+ }
65+
9866fn create_lib_file ( project_info : & ProjectInfo ) -> String {
9967 let module = project_info. module_name ( ) ;
10068 format ! (
0 commit comments