[Java] Upgrade Android deterministic build to Debian bookworm
[ldk-java] / bindingstypes.py
1 class TypeInfo:
2     def __init__(self, is_native_primitive, rust_obj, java_ty, java_fn_ty_arg, java_hu_ty, c_ty, is_const, passed_as_ptr, is_ptr, nonnull_ptr, var_name, arr_len, arr_access, subty=None, contains_trait=False):
3         self.is_native_primitive = is_native_primitive
4         self.rust_obj = rust_obj
5         self.java_ty = java_ty
6         self.java_hu_ty = java_hu_ty
7         self.java_fn_ty_arg = java_fn_ty_arg
8         self.c_ty = c_ty
9         self.is_const = is_const
10         self.passed_as_ptr = passed_as_ptr
11         self.is_ptr = is_ptr
12         self.nonnull_ptr = nonnull_ptr
13         self.var_name = var_name
14         self.arr_len = arr_len
15         self.arr_access = arr_access
16         self.subty = subty
17         self.pass_by_ref = is_ptr
18         self.requires_clone = None
19         self.contains_trait = contains_trait
20
21     def get_full_rust_ty(self):
22         ret = ""
23         if self.is_const:
24             ret = "const "
25         if self.rust_obj is not None:
26             ret = ret + self.rust_obj
27         if self.is_ptr:
28             ret = ret + " *"
29
30         if self.arr_len is not None and self.arr_len.isnumeric():
31             if self.rust_obj is not None:
32                 return (ret, "")
33             assert self.c_ty.endswith("Array")
34             if self.is_const:
35                 return ("const u" + self.c_ty[:-5] + " (*", ")[" + self.arr_len + "]")
36             else:
37                 return ("u" + self.c_ty[:-5] + " (*", ")[" + self.arr_len + "]")
38         if self.rust_obj is None:
39             if self.c_ty.startswith("int"):
40                 # Ironically the entire API uses no signed integers. We really should handle this better, but for now just always add a u
41                 return ("u" + self.c_ty, "")
42             if self.c_ty == "jboolean":
43                 return ("bool", "")
44             return (self.c_ty, "")
45         return (ret, "")
46
47 class ConvInfo:
48     def __init__(self, ty_info, arg_name, arg_conv, arg_conv_name, arg_conv_cleanup, ret_conv, ret_conv_name, to_hu_conv, to_hu_conv_name, from_hu_conv):
49         assert(ty_info.c_ty is not None)
50         assert(ty_info.java_ty is not None)
51         assert(arg_name is not None)
52         self.passed_as_ptr = ty_info.passed_as_ptr
53         self.rust_obj = ty_info.rust_obj
54         self.c_ty = ty_info.c_ty
55         self.java_ty = ty_info.java_ty
56         self.java_hu_ty = ty_info.java_hu_ty
57         self.java_fn_ty_arg = ty_info.java_fn_ty_arg
58         self.is_native_primitive = ty_info.is_native_primitive
59         self.ty_info = ty_info
60         self.arg_name = arg_name
61         self.arg_conv = arg_conv
62         self.arg_conv_name = arg_conv_name
63         self.arg_conv_cleanup = arg_conv_cleanup
64         self.ret_conv = ret_conv
65         self.ret_conv_name = ret_conv_name
66         self.to_hu_conv = to_hu_conv
67         self.to_hu_conv_name = to_hu_conv_name
68         self.from_hu_conv = from_hu_conv
69         # This is set based on docstrings in various contexts:
70         self.nullable = False
71
72 class TraitMethInfo:
73     def __init__(self, fn_name, self_is_const, ret_ty_info, args_ty, docs):
74         self.fn_name = fn_name
75         self.self_is_const = self_is_const
76         self.ret_ty_info = ret_ty_info
77         self.args_ty = args_ty
78         self.docs = docs
79
80 class ComplexEnumVariantInfo:
81     def __init__(self, var_name, var_docs, fields, tuple_variant):
82         self.var_name = var_name
83         self.var_docs = var_docs
84         self.fields = fields
85         self.tuple_variant = tuple_variant