@@ -30,6 +30,10 @@ public class {{ impl_class_name }}:
30
30
self . pointer = pointer
31
31
}
32
32
33
+ public func uniffiClonePointer( ) -> UnsafeMutableRawPointer {
34
+ return try ! rustCall { { { obj. ffi_object_clone ( ) . name ( ) } } ( self . pointer, $0) }
35
+ }
36
+
33
37
{ %- match obj. primary_constructor( ) % }
34
38
{ %- when Some with ( cons) % }
35
39
{ %- call swift: : docstring ( cons, 4 ) % }
@@ -59,7 +63,7 @@ public class {{ impl_class_name }}:
59
63
return { % call swift: : try ( meth) % } await uniffiRustCallAsync (
60
64
rustFutureFunc: {
61
65
{ { meth. ffi_func ( ) . name ( ) } } (
62
- self . pointer
66
+ self . uniffiClonePointer ( )
63
67
{ %- for arg in meth. arguments ( ) -% }
64
68
,
65
69
{ { arg|lower_fn } } ( { { arg. name ( ) |var_name } } )
@@ -92,14 +96,14 @@ public class {{ impl_class_name }}:
92
96
{ %- call swift: : docstring ( meth, 4 ) % }
93
97
public func { { meth. name ( ) |fn_name } } ( { % call swift: : arg_list_decl ( meth) % } ) { % call swift: : throws( meth) % } - > { { return_type|type_name } } {
94
98
return { % call swift: : try ( meth) % } { { return_type|lift_fn } } (
95
- { % call swift: : to_ffi_call_with_prefix( " self.pointer " , meth) % }
99
+ { % call swift: : to_ffi_call_with_prefix( " self.uniffiClonePointer() " , meth) % }
96
100
)
97
101
}
98
102
99
103
{ %- when None % }
100
104
{ %- call swift: : docstring ( meth, 4 ) % }
101
105
public func { { meth. name ( ) |fn_name } } ( { % call swift: : arg_list_decl ( meth) % } ) { % call swift: : throws( meth) % } {
102
- { % call swift: : to_ffi_call_with_prefix( " self.pointer " , meth) % }
106
+ { % call swift: : to_ffi_call_with_prefix( " self.uniffiClonePointer() " , meth) % }
103
107
}
104
108
105
109
{ %- endmatch -% }
@@ -111,25 +115,25 @@ public class {{ impl_class_name }}:
111
115
{ %- when UniffiTrait: : Display { fmt } % }
112
116
public var description : String {
113
117
return { % call swift: : try ( fmt) % } { { fmt. return_type ( ) . unwrap ( ) |lift_fn } } (
114
- { % call swift: : to_ffi_call_with_prefix ( " self.pointer " , fmt) % }
118
+ { % call swift: : to_ffi_call_with_prefix ( " self.uniffiClonePointer() " , fmt) % }
115
119
)
116
120
}
117
121
{ %- when UniffiTrait: : Debug { fmt } % }
118
122
public var debugDescription : String {
119
123
return { % call swift: : try ( fmt) % } { { fmt. return_type ( ) . unwrap ( ) |lift_fn } } (
120
- { % call swift: : to_ffi_call_with_prefix ( " self.pointer " , fmt) % }
124
+ { % call swift: : to_ffi_call_with_prefix ( " self.uniffiClonePointer() " , fmt) % }
121
125
)
122
126
}
123
127
{ %- when UniffiTrait: : Eq { eq, ne } % }
124
128
public static func == ( lhs: { { impl_class_name } } , other: { { impl_class_name } } ) - > Bool {
125
129
return { % call swift: : try ( eq) % } { { eq. return_type ( ) . unwrap ( ) |lift_fn } } (
126
- { % call swift: : to_ffi_call_with_prefix( " lhs.pointer " , eq) % }
130
+ { % call swift: : to_ffi_call_with_prefix( " lhs.uniffiClonePointer() " , eq) % }
127
131
)
128
132
}
129
133
{ %- when UniffiTrait: : Hash { hash } % }
130
134
public func hash( into hasher: inout Hasher ) {
131
135
let val = { % call swift: : try ( hash) % } { { hash. return_type ( ) . unwrap ( ) |lift_fn } } (
132
- { % call swift: : to_ffi_call_with_prefix ( " self.pointer " , hash) % }
136
+ { % call swift: : to_ffi_call_with_prefix ( " self.uniffiClonePointer() " , hash) % }
133
137
)
134
138
hasher. combine ( val)
135
139
}
@@ -161,7 +165,7 @@ public struct {{ ffi_converter_name }}: FfiConverter {
161
165
public static func lower( _ value: { { type_name } } ) - > UnsafeMutableRawPointer {
162
166
{ %- match obj. imp( ) % }
163
167
{ %- when ObjectImpl: : Struct % }
164
- return value. pointer
168
+ return value. uniffiClonePointer ( )
165
169
{ %- when ObjectImpl: : Trait % }
166
170
guard let ptr = UnsafeMutableRawPointer ( bitPattern: UInt ( truncatingIfNeeded: handleMap. insert ( obj: value) ) ) else {
167
171
fatalError ( " Cast to UnsafeMutableRawPointer failed " )
0 commit comments