1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255
#[cfg(feature = "use_pyo3")]
use pyo3::{proc_macro::pymodule, types::PyModule, PyResult, Python};
#[macro_use]
mod macros;
mod datetime;
#[cfg(feature = "use_m")]
mod more_error;
pub mod textsearcher;
#[cfg(feature = "use_pyo3")]
pub mod types;
/// to use AsDefaultStruct
///
/// ## Usage
///
/// ```
/// use python_comm::as_default_struct_use::*;
///
/// #[derive(AsDefaultStruct, Default)]
/// struct Class1 {
/// f1: i32,
/// f2: String,
/// f3: String,
/// }
///
/// let _ = Class1::default().f1(1).f2("2".to_string());
/// ```
///
pub mod as_default_struct_use {
pub use python_comm_macros::AsDefaultStruct;
}
/// to use AsPythonDict
///
/// ## Usage
///
/// ```
/// use python_comm::{as_python_dict_use::*, use_pyo3::*};
/// use rust_decimal_macros::dec;
///
/// #[derive(AsPythonDict)]
/// struct ClassDict {
/// f1: i32,
/// f2: String,
/// f3: Decimal,
/// f4: NaiveDate,
/// f5: NaiveDateTime,
/// }
///
/// #[pyfunction]
/// fn func(a: ClassDict) -> Result<ClassDict, PyErr> {
/// Ok(ClassDict{
/// f1: 2,
/// f2: "2".to_string(),
/// f3: dec!(2),
/// f4: NaiveDate::from_ymd(2002, 2, 2),
/// f5: NaiveDate::from_ymd(2002, 2, 2).and_hms(2, 2, 2)
/// })
/// }
///
/// // In Python:
/// // b = func (
/// // {
/// // "f1": 1,
/// // "f2": "1",
/// // "f3": Decimal(1),
/// // "f4": datetime.datetime(2001, 1, 1).date(),
/// // "f5": datetime.datetime(2001, 1, 1, 1, 1, 1)
/// // }
/// // )
/// // b["f1"]
/// ```
///
pub mod as_python_dict_use {
pub use crate::raise_error_use::*;
pub use python_comm_macros::AsPythonDict;
}
/// to use AsPythonObject
///
/// ## Usage
///
/// ```
/// use python_comm::{as_python_object_use::*, use_pyo3::*};
/// use rust_decimal_macros::dec;
///
/// #[derive(AsPythonObject)]
/// struct ClassObject {
/// f1: i32,
/// f2: String,
/// f3: Decimal,
/// f4: NaiveDate,
/// f5: NaiveDateTime,
/// }
///
/// #[pyfunction]
/// fn func(a: ClassObject) -> Result<ClassObject, PyErr> {
/// Ok(ClassObject{
/// f1: 2,
/// f2: "2".to_string(),
/// f3: dec!(2),
/// f4: NaiveDate::from_ymd(2002, 2, 2),
/// f5: NaiveDate::from_ymd(2002, 2, 2).and_hms(2, 2, 2)
/// })
/// }
///
/// // In Python:
/// // class C():
/// // def __init__(self, f1, f2, f3, f4, f5):
/// // self.f1 = f1
/// // ...
/// //
/// // b = func (C(
/// // 1,
/// // "1",
/// // Decimal(1),
/// // datetime.datetime(2001, 1, 1).date(),
/// // datetime.datetime(2001, 1, 1, 1, 1, 1)
/// // )
/// // )
/// // b.f1
/// ```
///
pub mod as_python_object_use {
pub use crate::raise_error_use::*;
pub use python_comm_macros::AsPythonObject;
}
/// to use AsSqlTable
pub mod as_sql_table_use {
pub use crate::raise_error_use::*;
pub use mysql::{
params,
prelude::{ConvIr, FromValue, Queryable},
};
pub use python_comm_macros::AsSqlTable;
}
/// Raise anyhow::Error or pyo3::PyErr with file_name/line/function_name.
///
/// # Usage
///
/// ```
/// use python_comm::raise_error_use::*;
/// ```
///
pub mod raise_error_use {
pub use crate::raise_error;
pub use python_comm_macros::auto_func_name;
}
/// common basic functions.
///
/// # Usage
///
/// ```
/// use python_comm::use_basic::*;
/// ```
///
pub mod use_basic {
pub use crate::{
crate_version,
datetime::{
bj_date, bj_dates, bj_time, bj_times, bj_timestamp, bj_timestamp_millis, bjtc_df, bjtc_dn, bjtc_ds,
bjtc_dt, bjtc_fd, bjtc_from_duration, bjtc_fs, bjtc_ft, bjtc_nd, bjtc_ns, bjtc_nt, bjtc_sd, bjtc_st,
bjtc_td, bjtc_tf, bjtc_tn, bjtc_to_duration, bjtc_ts,
},
textsearcher::TextSearcher,
};
pub use python_comm_macros::build_time;
pub use rust_decimal::{prelude::FromPrimitive, Decimal};
}
/// ## Usage
///
/// ```
/// use python_comm::{raise_error_use::*, use_m::*};
/// use std::fs::File;
///
/// #[auto_func_name]
/// #[auto_func_name]
/// fn has_error(n: i32) -> Result<(), MoreError> {
/// File::open("not exist").m(m!(__func__))?;
///
/// Ok(())
/// }
///
/// fn main() {
/// if let Err(err) = has_error(0) {
/// println!("{}", err);
/// }
/// }
/// ```
///
#[cfg(feature = "use_m")]
pub mod use_m {
pub use crate::{
m,
more_error::{AddMore, MoreError},
};
}
/// to use pyo3::pyfunction
///
/// ## Usage
///
/// ```
/// use python_comm::{use_pyo3::*};
///
/// #[pyfunction]
/// fn func() -> Result<(), PyErr> {
/// Ok(())
/// }
/// ```
///
#[cfg(feature = "use_pyo3")]
pub mod use_pyo3 {
pub use chrono::{NaiveDate, NaiveDateTime, NaiveTime};
pub use pyo3::{
proc_macro::{pyfunction, pymodule},
types::PyModule,
wrap_pyfunction, PyErr, Python,
};
pub use rust_decimal::Decimal;
}
#[cfg(feature = "use_pyo3")]
fn initialize(module: &PyModule) -> PyResult<()> {
textsearcher::initialize(module)?;
Ok(())
}
/// 函数名必须和目标 xxx.pyd / xxx.so 相同, 和 cargo.toml 中 [lib].name 字段不要求(?)同名
/// 注意, 当前的注释作为 xxx.__doc__ 出现
#[cfg(feature = "use_pyo3")]
#[cfg(debug_assertions)]
#[pymodule]
fn python_commd(_python: Python, module: &PyModule) -> PyResult<()> {
initialize(module)
}
/// 函数名必须和目标 xxx.pyd / xxx.so 相同, 和 cargo.toml 中 [lib].name 字段不要求(?)同名
/// 注意, 当前的注释作为 xxx.__doc__ 出现
#[cfg(feature = "use_pyo3")]
#[cfg(not(debug_assertions))]
#[pymodule]
fn python_comm(_python: Python, module: &PyModule) -> PyResult<()> {
initialize(module)
}