pyo3_stub_gen/stub_type/
pyo3.rs1use crate::stub_type::*;
2use ::pyo3::{
3 basic::CompareOp,
4 pybacked::{PyBackedBytes, PyBackedStr},
5 pyclass::boolean_struct::False,
6 types::*,
7 Bound, Py, PyClass, PyRef, PyRefMut,
8};
9use maplit::hashset;
10
11impl PyStubType for PyAny {
12 fn type_output() -> TypeInfo {
13 TypeInfo {
14 name: "typing.Any".to_string(),
15 import: hashset! { "typing".into() },
16 }
17 }
18}
19
20impl<T: PyStubType> PyStubType for Py<T> {
21 fn type_input() -> TypeInfo {
22 T::type_input()
23 }
24 fn type_output() -> TypeInfo {
25 T::type_output()
26 }
27}
28
29impl<T: PyStubType + PyClass> PyStubType for PyRef<'_, T> {
30 fn type_input() -> TypeInfo {
31 T::type_input()
32 }
33 fn type_output() -> TypeInfo {
34 T::type_output()
35 }
36}
37
38impl<T: PyStubType + PyClass<Frozen = False>> PyStubType for PyRefMut<'_, T> {
39 fn type_input() -> TypeInfo {
40 T::type_input()
41 }
42 fn type_output() -> TypeInfo {
43 T::type_output()
44 }
45}
46
47impl<T: PyStubType> PyStubType for Bound<'_, T> {
48 fn type_input() -> TypeInfo {
49 T::type_input()
50 }
51 fn type_output() -> TypeInfo {
52 T::type_output()
53 }
54}
55
56macro_rules! impl_builtin {
57 ($ty:ty, $pytype:expr) => {
58 impl PyStubType for $ty {
59 fn type_output() -> TypeInfo {
60 TypeInfo {
61 name: $pytype.to_string(),
62 import: HashSet::new(),
63 }
64 }
65 }
66 };
67}
68
69impl_builtin!(PyInt, "int");
70impl_builtin!(PyFloat, "float");
71impl_builtin!(PyList, "list");
72impl_builtin!(PyTuple, "tuple");
73impl_builtin!(PySlice, "slice");
74impl_builtin!(PyDict, "dict");
75impl_builtin!(PySet, "set");
76impl_builtin!(PyString, "str");
77impl_builtin!(PyBackedStr, "str");
78impl_builtin!(PyByteArray, "bytearray");
79impl_builtin!(PyBytes, "bytes");
80impl_builtin!(PyBackedBytes, "bytes");
81impl_builtin!(PyType, "type");
82impl_builtin!(CompareOp, "int");
83
84macro_rules! impl_simple {
85 ($ty:ty, $mod:expr, $pytype:expr) => {
86 impl PyStubType for $ty {
87 fn type_output() -> TypeInfo {
88 TypeInfo {
89 name: concat!($mod, ".", $pytype).to_string(),
90 import: hashset! { $mod.into() },
91 }
92 }
93 }
94 };
95}
96
97impl_simple!(PyDate, "datetime", "date");
98impl_simple!(PyDateTime, "datetime", "datetime");
99impl_simple!(PyDelta, "datetime", "timedelta");
100impl_simple!(PyTime, "datetime", "time");
101impl_simple!(PyTzInfo, "datetime", "tzinfo");