diff --git a/chapter_six/constructing_our_own_python_objects/Cargo.toml b/chapter_six/constructing_our_own_python_objects/Cargo.toml index 9a883d6..4ddbd09 100644 --- a/chapter_six/constructing_our_own_python_objects/Cargo.toml +++ b/chapter_six/constructing_our_own_python_objects/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" [dependencies] [dependencies.pyo3] -version = "0.13.2" +version = "0.16.6" features = ["extension-module"] [lib] diff --git a/chapter_six/constructing_our_own_python_objects/src/class_module/fib_processor.rs b/chapter_six/constructing_our_own_python_objects/src/class_module/fib_processor.rs index ef12eb3..1b32574 100644 --- a/chapter_six/constructing_our_own_python_objects/src/class_module/fib_processor.rs +++ b/chapter_six/constructing_our_own_python_objects/src/class_module/fib_processor.rs @@ -1,9 +1,8 @@ -use pyo3::prelude::{pyclass, pymethods, staticmethod}; +use pyo3::prelude::{pyclass, pymethods}; use crate::fib_calcs::fib_number::fibonacci_number; use crate::fib_calcs::fib_numbers::fibonacci_numbers; - #[pyclass] pub struct FibProcessor { #[pyo3(get, set)] @@ -13,37 +12,33 @@ pub struct FibProcessor { #[pyo3(get)] pub number_results: Vec, #[pyo3(get)] - pub numbers_results: Vec> + pub numbers_results: Vec>, } #[pymethods] impl FibProcessor { - #[new] fn new(number: Vec, numbers: Vec>) -> Self { let input_numbers: Vec> = numbers.clone(); let input_number: Vec = number.clone(); - let number_results: Vec = input_number.iter( - ).map( - |x| fibonacci_number(*x) - ).collect(); + let number_results: Vec = input_number.iter().map(|x| fibonacci_number(*x)).collect(); - let numbers_results: Vec> = Self:: - process_numbers(input_numbers); - return FibProcessor {number, numbers, - number_results, numbers_results} + let numbers_results: Vec> = Self::process_numbers(input_numbers); + return FibProcessor { + number, + numbers, + number_results, + numbers_results, + }; } - #[staticmethod] - fn process_numbers(input_numbers: Vec>) - -> Vec> { + fn process_numbers(input_numbers: Vec>) -> Vec> { let mut buffer: Vec> = Vec::new(); for i in input_numbers { buffer.push(fibonacci_numbers(i)); } - return buffer + return buffer; } } - diff --git a/chapter_six/constructing_our_own_python_objects/src/interface/config.rs b/chapter_six/constructing_our_own_python_objects/src/interface/config.rs index 13aa23e..a13896b 100644 --- a/chapter_six/constructing_our_own_python_objects/src/interface/config.rs +++ b/chapter_six/constructing_our_own_python_objects/src/interface/config.rs @@ -1,65 +1,53 @@ +use pyo3::exceptions::PyTypeError; use pyo3::prelude::{pyfunction, PyResult}; use pyo3::types::{PyDict, PyList}; -use pyo3::exceptions::PyTypeError; use crate::fib_calcs::fib_number::fibonacci_number; use crate::fib_calcs::fib_numbers::fibonacci_numbers; - -fn process_numbers(input_numbers: Vec>) - -> Vec> { +fn process_numbers(input_numbers: Vec>) -> Vec> { let mut buffer: Vec> = Vec::new(); for i in input_numbers { buffer.push(fibonacci_numbers(i)); } - return buffer + return buffer; } - #[pyfunction] pub fn run_config<'a>(config: &'a PyDict) -> PyResult<&'a PyDict> { - match config.get_item("number") { - Some(data) => { - match data.downcast::() { - Ok(raw_data) => { - let processed_results: Vec = - raw_data.extract::>().unwrap(); - let fib_numbers: Vec = - processed_results.iter().map( - |x| fibonacci_number(*x) - ).collect(); - config.set_item( - "NUMBER RESULT", fib_numbers); - }, - Err(_) => Err(PyTypeError::new_err( - "parameter number is not a list - of integers")).unwrap() + Some(data) => match data.downcast::() { + Ok(raw_data) => { + let processed_results: Vec = raw_data.extract::>().unwrap(); + let fib_numbers: Vec = processed_results + .iter() + .map(|x| fibonacci_number(*x)) + .collect(); + config.set_item("NUMBER RESULT", fib_numbers)?; } + Err(_) => Err(PyTypeError::new_err( + "parameter number is not a list + of integers", + )) + .unwrap(), }, - None => println!( - "parameter number is not in the config" - ) + None => println!("parameter number is not in the config"), } match config.get_item("numbers") { - Some(data) => { - match data.downcast::() { - Ok(raw_data) => { - let processed_results_two: Vec> = - raw_data.extract::>>( - ).unwrap(); - config.set_item("NUMBERS RESULT", - process_numbers(processed_results_two)); - }, - Err(_) => Err(PyTypeError::new_err( - "parameter numbers is not a list of lists of - integers")).unwrap() + Some(data) => match data.downcast::() { + Ok(raw_data) => { + let processed_results_two: Vec> = + raw_data.extract::>>().unwrap(); + config.set_item("NUMBERS RESULT", process_numbers(processed_results_two))?; } - + Err(_) => Err(PyTypeError::new_err( + "parameter numbers is not a list of lists of + integers", + )) + .unwrap(), }, - None => println!( - "parameter numbers is not in the config") + None => println!("parameter numbers is not in the config"), } - return Ok(config) -} \ No newline at end of file + return Ok(config); +} diff --git a/chapter_six/constructing_our_own_python_objects/src/lib.rs b/chapter_six/constructing_our_own_python_objects/src/lib.rs index 4a02533..cb354e4 100644 --- a/chapter_six/constructing_our_own_python_objects/src/lib.rs +++ b/chapter_six/constructing_our_own_python_objects/src/lib.rs @@ -1,29 +1,26 @@ use pyo3::prelude::*; use pyo3::wrap_pyfunction; -mod interface; -mod fib_calcs; mod class_module; +mod fib_calcs; +mod interface; -use fib_calcs::fib_number::__pyo3_get_function_fibonacci_number; -use fib_calcs::fib_numbers::__pyo3_get_function_fibonacci_numbers; -use interface::config::__pyo3_get_function_run_config; use class_module::fib_processor::FibProcessor; - - +use fib_calcs::fib_number::fibonacci_number; +use fib_calcs::fib_numbers::fibonacci_numbers; +use interface::config::run_config; #[pyfunction] fn say_hello() { println!("saying hello from Rust!"); } - #[pymodule] fn flitton_fib_rs(_py: Python, m: &PyModule) -> PyResult<()> { - m.add_wrapped(wrap_pyfunction!(say_hello)); - m.add_wrapped(wrap_pyfunction!(fibonacci_number)); - m.add_wrapped(wrap_pyfunction!(fibonacci_numbers)); - m.add_wrapped(wrap_pyfunction!(run_config)); + m.add_wrapped(wrap_pyfunction!(say_hello))?; + m.add_wrapped(wrap_pyfunction!(fibonacci_number))?; + m.add_wrapped(wrap_pyfunction!(fibonacci_numbers))?; + m.add_wrapped(wrap_pyfunction!(run_config))?; m.add_class::()?; Ok(()) } diff --git a/chapter_six/inspecting_python_objects/Cargo.toml b/chapter_six/inspecting_python_objects/Cargo.toml index 9a883d6..4ddbd09 100644 --- a/chapter_six/inspecting_python_objects/Cargo.toml +++ b/chapter_six/inspecting_python_objects/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" [dependencies] [dependencies.pyo3] -version = "0.13.2" +version = "0.16.6" features = ["extension-module"] [lib] diff --git a/chapter_six/inspecting_python_objects/src/interface/config.rs b/chapter_six/inspecting_python_objects/src/interface/config.rs index 13aa23e..a13896b 100644 --- a/chapter_six/inspecting_python_objects/src/interface/config.rs +++ b/chapter_six/inspecting_python_objects/src/interface/config.rs @@ -1,65 +1,53 @@ +use pyo3::exceptions::PyTypeError; use pyo3::prelude::{pyfunction, PyResult}; use pyo3::types::{PyDict, PyList}; -use pyo3::exceptions::PyTypeError; use crate::fib_calcs::fib_number::fibonacci_number; use crate::fib_calcs::fib_numbers::fibonacci_numbers; - -fn process_numbers(input_numbers: Vec>) - -> Vec> { +fn process_numbers(input_numbers: Vec>) -> Vec> { let mut buffer: Vec> = Vec::new(); for i in input_numbers { buffer.push(fibonacci_numbers(i)); } - return buffer + return buffer; } - #[pyfunction] pub fn run_config<'a>(config: &'a PyDict) -> PyResult<&'a PyDict> { - match config.get_item("number") { - Some(data) => { - match data.downcast::() { - Ok(raw_data) => { - let processed_results: Vec = - raw_data.extract::>().unwrap(); - let fib_numbers: Vec = - processed_results.iter().map( - |x| fibonacci_number(*x) - ).collect(); - config.set_item( - "NUMBER RESULT", fib_numbers); - }, - Err(_) => Err(PyTypeError::new_err( - "parameter number is not a list - of integers")).unwrap() + Some(data) => match data.downcast::() { + Ok(raw_data) => { + let processed_results: Vec = raw_data.extract::>().unwrap(); + let fib_numbers: Vec = processed_results + .iter() + .map(|x| fibonacci_number(*x)) + .collect(); + config.set_item("NUMBER RESULT", fib_numbers)?; } + Err(_) => Err(PyTypeError::new_err( + "parameter number is not a list + of integers", + )) + .unwrap(), }, - None => println!( - "parameter number is not in the config" - ) + None => println!("parameter number is not in the config"), } match config.get_item("numbers") { - Some(data) => { - match data.downcast::() { - Ok(raw_data) => { - let processed_results_two: Vec> = - raw_data.extract::>>( - ).unwrap(); - config.set_item("NUMBERS RESULT", - process_numbers(processed_results_two)); - }, - Err(_) => Err(PyTypeError::new_err( - "parameter numbers is not a list of lists of - integers")).unwrap() + Some(data) => match data.downcast::() { + Ok(raw_data) => { + let processed_results_two: Vec> = + raw_data.extract::>>().unwrap(); + config.set_item("NUMBERS RESULT", process_numbers(processed_results_two))?; } - + Err(_) => Err(PyTypeError::new_err( + "parameter numbers is not a list of lists of + integers", + )) + .unwrap(), }, - None => println!( - "parameter numbers is not in the config") + None => println!("parameter numbers is not in the config"), } - return Ok(config) -} \ No newline at end of file + return Ok(config); +} diff --git a/chapter_six/inspecting_python_objects/src/interface/mod.rs b/chapter_six/inspecting_python_objects/src/interface/mod.rs index 5b43afb..d922f48 100644 --- a/chapter_six/inspecting_python_objects/src/interface/mod.rs +++ b/chapter_six/inspecting_python_objects/src/interface/mod.rs @@ -1,2 +1,2 @@ pub mod config; -pub mod config; +pub mod object; diff --git a/chapter_six/inspecting_python_objects/src/lib.rs b/chapter_six/inspecting_python_objects/src/lib.rs index 2e5a89e..580080e 100644 --- a/chapter_six/inspecting_python_objects/src/lib.rs +++ b/chapter_six/inspecting_python_objects/src/lib.rs @@ -1,21 +1,19 @@ use pyo3::prelude::*; use pyo3::wrap_pyfunction; -mod interface; mod fib_calcs; +mod interface; -use fib_calcs::fib_number::__pyo3_get_function_fibonacci_number; -use fib_calcs::fib_numbers::__pyo3_get_function_fibonacci_numbers; -use interface::config::__pyo3_get_function_run_config; -use interface::object::__pyo3_get_function_object_interface; - +use fib_calcs::fib_number::fibonacci_number; +use fib_calcs::fib_numbers::fibonacci_numbers; +use interface::config::run_config; +use interface::object::object_interface; #[pyfunction] fn say_hello() { println!("saying hello from Rust!"); } - #[pymodule] fn flitton_fib_rs(_py: Python, m: &PyModule) -> PyResult<()> { m.add_wrapped(wrap_pyfunction!(say_hello));