11use std:: sync:: OnceLock ;
22
3- use pyo3:: prelude:: * ;
4-
5- use jiter:: { map_json_error, LosslessFloat , PartialMode , PythonParse , StringCacheMode } ;
6-
7- #[ allow( clippy:: fn_params_excessive_bools) ]
8- #[ pyfunction(
9- signature = (
10- json_data,
11- /,
12- * ,
13- allow_inf_nan=true ,
14- cache_mode=StringCacheMode :: All ,
15- partial_mode=PartialMode :: Off ,
16- catch_duplicate_keys=false ,
17- lossless_floats=false ,
18- )
19- ) ]
20- pub fn from_json < ' py > (
21- py : Python < ' py > ,
22- json_data : & [ u8 ] ,
23- allow_inf_nan : bool ,
24- cache_mode : StringCacheMode ,
25- partial_mode : PartialMode ,
26- catch_duplicate_keys : bool ,
27- lossless_floats : bool ,
28- ) -> PyResult < Bound < ' py , PyAny > > {
29- let parse_builder = PythonParse {
30- allow_inf_nan,
31- cache_mode,
32- partial_mode,
33- catch_duplicate_keys,
34- lossless_floats,
35- } ;
36- parse_builder
37- . python_parse ( py, json_data)
38- . map_err ( |e| map_json_error ( json_data, & e) )
39- }
40-
413pub fn get_jiter_version ( ) -> & ' static str {
424 static JITER_VERSION : OnceLock < String > = OnceLock :: new ( ) ;
435
@@ -52,23 +14,63 @@ pub fn get_jiter_version() -> &'static str {
5214 } )
5315}
5416
55- #[ pyfunction ]
56- pub fn cache_clear ( py : Python < ' _ > ) {
57- jiter :: cache_clear ( py ) ;
58- }
17+ #[ pyo3 :: pymodule ]
18+ # [ pyo3 ( name = "jiter" ) ]
19+ mod jiter_python {
20+ use pyo3 :: prelude :: * ;
5921
60- #[ pyfunction]
61- pub fn cache_usage ( py : Python < ' _ > ) -> usize {
62- jiter:: cache_usage ( py)
63- }
22+ use jiter:: { map_json_error, LosslessFloat , PartialMode , PythonParse , StringCacheMode } ;
6423
65- #[ pymodule]
66- #[ pyo3( name = "jiter" ) ]
67- fn jiter_python ( _py : Python , m : & Bound < ' _ , PyModule > ) -> PyResult < ( ) > {
68- m. add ( "__version__" , get_jiter_version ( ) ) ?;
69- m. add_function ( wrap_pyfunction ! ( from_json, m) ?) ?;
70- m. add_function ( wrap_pyfunction ! ( cache_clear, m) ?) ?;
71- m. add_function ( wrap_pyfunction ! ( cache_usage, m) ?) ?;
72- m. add_class :: < LosslessFloat > ( ) ?;
73- Ok ( ( ) )
24+ use super :: get_jiter_version;
25+
26+ #[ allow( clippy:: fn_params_excessive_bools) ]
27+ #[ pyfunction(
28+ signature = (
29+ json_data,
30+ /,
31+ * ,
32+ allow_inf_nan=true ,
33+ cache_mode=StringCacheMode :: All ,
34+ partial_mode=PartialMode :: Off ,
35+ catch_duplicate_keys=false ,
36+ lossless_floats=false ,
37+ )
38+ ) ]
39+ pub fn from_json < ' py > (
40+ py : Python < ' py > ,
41+ json_data : & [ u8 ] ,
42+ allow_inf_nan : bool ,
43+ cache_mode : StringCacheMode ,
44+ partial_mode : PartialMode ,
45+ catch_duplicate_keys : bool ,
46+ lossless_floats : bool ,
47+ ) -> PyResult < Bound < ' py , PyAny > > {
48+ let parse_builder = PythonParse {
49+ allow_inf_nan,
50+ cache_mode,
51+ partial_mode,
52+ catch_duplicate_keys,
53+ lossless_floats,
54+ } ;
55+ parse_builder
56+ . python_parse ( py, json_data)
57+ . map_err ( |e| map_json_error ( json_data, & e) )
58+ }
59+
60+ #[ pyfunction]
61+ pub fn cache_clear ( py : Python < ' _ > ) {
62+ jiter:: cache_clear ( py) ;
63+ }
64+
65+ #[ pyfunction]
66+ pub fn cache_usage ( py : Python < ' _ > ) -> usize {
67+ jiter:: cache_usage ( py)
68+ }
69+
70+ #[ pymodule_init]
71+ fn init_jiter_python ( m : & Bound < ' _ , PyModule > ) -> PyResult < ( ) > {
72+ m. add ( "__version__" , get_jiter_version ( ) ) ?;
73+ m. add_class :: < LosslessFloat > ( ) ?;
74+ Ok ( ( ) )
75+ }
7476}
0 commit comments