update_uniffi_to_0.21.1.patch 121 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237
  1. # HG changeset patch
  2. # User Mike Hommey <mh+mozilla@glandium.org>
  3. # Date 1671490349 0
  4. # Node ID 42d532d3de54ece48fd29b0b07d160f0ec957b21
  5. # Parent 0a143142f96de8d71c894c0aa28300c5afc731bb
  6. Bug 1805809 - Update uniffi to 0.21.1 for more determinism across platforms. r=janerik,supply-chain-reviewers a=RyanVM
  7. Differential Revision: https://phabricator.services.mozilla.com/D164896
  8. diff --git a/Cargo.lock b/Cargo.lock
  9. --- a/Cargo.lock
  10. +++ b/Cargo.lock
  11. @@ -5764,19 +5764,19 @@ checksum = "3ed742d4ea2bd1176e236172c842
  12. [[package]]
  13. name = "unicode-xid"
  14. version = "0.2.3"
  15. source = "registry+https://github.com/rust-lang/crates.io-index"
  16. checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04"
  17. [[package]]
  18. name = "uniffi"
  19. -version = "0.21.0"
  20. -source = "registry+https://github.com/rust-lang/crates.io-index"
  21. -checksum = "f54af5ada67d1173457a99a7bb44a7917f63e7466764cb4714865c7a6678b830"
  22. +version = "0.21.1"
  23. +source = "registry+https://github.com/rust-lang/crates.io-index"
  24. +checksum = "b983553c0d1ad73547c65fa0c399aa800bee4a70ad330198e1c7a523212da5ee"
  25. dependencies = [
  26. "anyhow",
  27. "bytes 1.2.1",
  28. "camino",
  29. "cargo_metadata",
  30. "log",
  31. "once_cell",
  32. "paste",
  33. @@ -5874,19 +5874,17 @@ dependencies = [
  34. "uniffi",
  35. "uniffi-example-geometry",
  36. "uniffi_build",
  37. "uniffi_macros",
  38. ]
  39. [[package]]
  40. name = "uniffi_bindgen"
  41. -version = "0.21.0"
  42. -source = "registry+https://github.com/rust-lang/crates.io-index"
  43. -checksum = "12cc4af3c0180c7e86c4a3acf2b6587af04ba2567b1e948993df10f421796621"
  44. +version = "0.21.1"
  45. dependencies = [
  46. "anyhow",
  47. "askama",
  48. "bincode",
  49. "camino",
  50. "clap",
  51. "fs-err",
  52. "goblin 0.5.4",
  53. @@ -5897,51 +5895,63 @@ dependencies = [
  54. "serde_json",
  55. "toml",
  56. "uniffi_meta",
  57. "weedle2",
  58. ]
  59. [[package]]
  60. name = "uniffi_build"
  61. -version = "0.21.0"
  62. -source = "registry+https://github.com/rust-lang/crates.io-index"
  63. -checksum = "510287c368a9386eb731ebe824a6fc6c82a105e20d020af1aa20519c1c1561db"
  64. +version = "0.21.1"
  65. +source = "registry+https://github.com/rust-lang/crates.io-index"
  66. +checksum = "d035e50433ee3d52ab0dcdcf3b9b26f2cc2ec39294b3c07d95865a518709455f"
  67. dependencies = [
  68. "anyhow",
  69. "camino",
  70. "uniffi_bindgen",
  71. ]
  72. [[package]]
  73. +name = "uniffi_checksum_derive"
  74. +version = "0.21.1"
  75. +source = "registry+https://github.com/rust-lang/crates.io-index"
  76. +checksum = "78b6e16d46caf942016997af8bbdf4b163bf8ae3deb0b667d9643de7b7ffd4c9"
  77. +dependencies = [
  78. + "quote",
  79. + "syn",
  80. +]
  81. +
  82. +[[package]]
  83. name = "uniffi_macros"
  84. -version = "0.21.0"
  85. -source = "registry+https://github.com/rust-lang/crates.io-index"
  86. -checksum = "5c8604503caa2cbcf271578dc51ca236d40e3b22e1514ffa2e638e2c39f6ad10"
  87. +version = "0.21.1"
  88. +source = "registry+https://github.com/rust-lang/crates.io-index"
  89. +checksum = "c96a574677566f83ea8458dac1dd7792fd63e7c3f9dbcd865f0e8d6f8057b127"
  90. dependencies = [
  91. "bincode",
  92. "camino",
  93. "fs-err",
  94. "once_cell",
  95. "proc-macro2",
  96. "quote",
  97. "serde",
  98. "syn",
  99. "toml",
  100. "uniffi_build",
  101. "uniffi_meta",
  102. ]
  103. [[package]]
  104. name = "uniffi_meta"
  105. -version = "0.21.0"
  106. -source = "registry+https://github.com/rust-lang/crates.io-index"
  107. -checksum = "cd9417cc653937681436b93838d8c5f97a5b8c58697813982ee8810bd1dc3b57"
  108. +version = "0.21.1"
  109. +source = "registry+https://github.com/rust-lang/crates.io-index"
  110. +checksum = "729835442da829c9b6f7c111c76cf87b2498e129101203bec94f0c39a3296a38"
  111. dependencies = [
  112. "serde",
  113. + "siphasher",
  114. + "uniffi_checksum_derive",
  115. ]
  116. [[package]]
  117. name = "unix_path"
  118. version = "1.0.1"
  119. source = "registry+https://github.com/rust-lang/crates.io-index"
  120. checksum = "af8e291873ae77c4c8d9c9b34d0bee68a35b048fb39c263a5155e0e353783eaf"
  121. dependencies = [
  122. diff --git a/Cargo.toml b/Cargo.toml
  123. --- a/Cargo.toml
  124. +++ b/Cargo.toml
  125. @@ -175,13 +175,17 @@ path = "third_party/rust/mio-0.6.23"
  126. # These are used to test UniFFI functionality. We haven't figured out how we
  127. # want to publish these yet, so they are only accessible via git. This works
  128. # okay, but it means that their dependencies on UniFFI crates will normally
  129. # also be the git versions. Patch them to use the published versions to avoid
  130. # duplicate crates.
  131. [patch."https://github.com/mozilla/uniffi-rs.git"]
  132. -uniffi = "=0.21.0"
  133. -uniffi_bindgen = "=0.21.0"
  134. -uniffi_build = "=0.21.0"
  135. -uniffi_macros = "=0.21.0"
  136. +uniffi = "=0.21.1"
  137. +#uniffi_bindgen = "=0.21.1"
  138. +uniffi_build = "=0.21.1"
  139. +uniffi_macros = "=0.21.1"
  140. weedle2 = "=4.0.0"
  141. +
  142. +# Patched to use uniffi_version = 0.21.0 for checksums.
  143. +[patch.crates-io.uniffi_bindgen]
  144. +path = "third_party/rust/uniffi_bindgen"
  145. diff --git a/supply-chain/audits.toml b/supply-chain/audits.toml
  146. --- a/supply-chain/audits.toml
  147. +++ b/supply-chain/audits.toml
  148. @@ -1469,16 +1469,22 @@ criteria = "safe-to-deploy"
  149. delta = "0.19.6 -> 0.20.0"
  150. [[audits.uniffi]]
  151. who = "Jan-Erik Rediger <jrediger@mozilla.com>"
  152. criteria = "safe-to-deploy"
  153. delta = "0.20.0 -> 0.21.0"
  154. notes = "Maintained by the Glean and Application Services team."
  155. +[[audits.uniffi]]
  156. +who = "Mike Hommey <mh+mozilla@glandium.org>"
  157. +criteria = "safe-to-deploy"
  158. +delta = "0.21.0 -> 0.21.1"
  159. +notes = "No changes."
  160. +
  161. [[audits.uniffi_bindgen]]
  162. who = "Travis Long <tlong@mozilla.com>"
  163. criteria = "safe-to-deploy"
  164. version = "0.19.3"
  165. notes = "Maintained by the Glean and Application Services teams."
  166. [[audits.uniffi_bindgen]]
  167. who = "Jan-Erik Rediger <jrediger@mozilla.com>"
  168. @@ -1492,16 +1498,22 @@ criteria = "safe-to-deploy"
  169. delta = "0.19.6 -> 0.20.0"
  170. [[audits.uniffi_bindgen]]
  171. who = "Jan-Erik Rediger <jrediger@mozilla.com>"
  172. criteria = "safe-to-deploy"
  173. delta = "0.20.0 -> 0.21.0"
  174. notes = "Maintained by the Glean and Application Services team."
  175. +[[audits.uniffi_bindgen]]
  176. +who = "Mike Hommey <mh+mozilla@glandium.org>"
  177. +criteria = "safe-to-deploy"
  178. +delta = "0.21.0 -> 0.21.1"
  179. +notes = "I authored the changes in this version."
  180. +
  181. [[audits.uniffi_build]]
  182. who = "Travis Long <tlong@mozilla.com>"
  183. criteria = "safe-to-deploy"
  184. version = "0.19.3"
  185. notes = "Maintained by the Glean and Application Services teams."
  186. [[audits.uniffi_build]]
  187. who = "Jan-Erik Rediger <jrediger@mozilla.com>"
  188. @@ -1515,16 +1527,28 @@ criteria = "safe-to-deploy"
  189. delta = "0.19.6 -> 0.20.0"
  190. [[audits.uniffi_build]]
  191. who = "Jan-Erik Rediger <jrediger@mozilla.com>"
  192. criteria = "safe-to-deploy"
  193. delta = "0.20.0 -> 0.21.0"
  194. notes = "Maintained by the Glean and Application Services team."
  195. +[[audits.uniffi_build]]
  196. +who = "Mike Hommey <mh+mozilla@glandium.org>"
  197. +criteria = "safe-to-deploy"
  198. +delta = "0.21.0 -> 0.21.1"
  199. +notes = "No changes."
  200. +
  201. +[[audits.uniffi_checksum_derive]]
  202. +who = "Mike Hommey <mh+mozilla@glandium.org>"
  203. +criteria = "safe-to-deploy"
  204. +version = "0.21.1"
  205. +notes = "I authored this crate."
  206. +
  207. [[audits.uniffi_macros]]
  208. who = "Travis Long <tlong@mozilla.com>"
  209. criteria = "safe-to-deploy"
  210. version = "0.19.3"
  211. notes = "Maintained by the Glean and Application Services teams."
  212. [[audits.uniffi_macros]]
  213. who = "Jan-Erik Rediger <jrediger@mozilla.com>"
  214. @@ -1538,16 +1562,22 @@ criteria = "safe-to-deploy"
  215. delta = "0.19.6 -> 0.20.0"
  216. [[audits.uniffi_macros]]
  217. who = "Jan-Erik Rediger <jrediger@mozilla.com>"
  218. criteria = "safe-to-deploy"
  219. delta = "0.20.0 -> 0.21.0"
  220. notes = "Maintained by the Glean and Application Services team."
  221. +[[audits.uniffi_macros]]
  222. +who = "Mike Hommey <mh+mozilla@glandium.org>"
  223. +criteria = "safe-to-deploy"
  224. +delta = "0.21.0 -> 0.21.1"
  225. +notes = "No changes."
  226. +
  227. [[audits.uniffi_meta]]
  228. who = "Jan-Erik Rediger <jrediger@mozilla.com>"
  229. criteria = "safe-to-deploy"
  230. version = "0.19.6"
  231. notes = "Maintained by the Glean and Application Services team."
  232. [[audits.uniffi_meta]]
  233. who = "Perry McManis <pmcmanis@mozilla.com>"
  234. @@ -1555,16 +1585,22 @@ criteria = "safe-to-deploy"
  235. delta = "0.19.6 -> 0.20.0"
  236. [[audits.uniffi_meta]]
  237. who = "Jan-Erik Rediger <jrediger@mozilla.com>"
  238. criteria = "safe-to-deploy"
  239. delta = "0.20.0 -> 0.21.0"
  240. notes = "Maintained by the Glean and Application Services team."
  241. +[[audits.uniffi_meta]]
  242. +who = "Mike Hommey <mh+mozilla@glandium.org>"
  243. +criteria = "safe-to-deploy"
  244. +delta = "0.21.0 -> 0.21.1"
  245. +notes = "I authored the changes in this version."
  246. +
  247. [[audits.void]]
  248. who = "Bobby Holley <bobbyholley@gmail.com>"
  249. criteria = "safe-to-deploy"
  250. version = "1.0.2"
  251. notes = "Very small crate, just hosts the Void type for easier cross-crate interfacing."
  252. [[audits.wasm-encoder]]
  253. who = "Ryan Hunt <rhunt@eqrion.net>"
  254. diff --git a/supply-chain/config.toml b/supply-chain/config.toml
  255. --- a/supply-chain/config.toml
  256. +++ b/supply-chain/config.toml
  257. @@ -149,16 +149,20 @@ notes = "We're not shipping this and hav
  258. [policy.storage]
  259. audit-as-crates-io = false
  260. notes = "This is a first-party crate which is entirely unrelated to the crates.io package of the same name."
  261. [policy.tabs]
  262. audit-as-crates-io = false
  263. notes = "This is a first-party crate, maintained by the appservices team, which is entirely unrelated to the crates.io package of the same name."
  264. +[policy.uniffi_bindgen]
  265. +audit-as-crates-io = false
  266. +notes = "This is a first-party crate, normally vendored, but currently patched in-tree until next update."
  267. +
  268. [policy.viaduct]
  269. audit-as-crates-io = false
  270. notes = "This is a first-party crate, maintained by the appservices team, which is entirely unrelated to the crates.io package of the same name."
  271. [policy.webdriver]
  272. audit-as-crates-io = false
  273. criteria = "safe-to-run"
  274. notes = "This is a first-party crate which is also published to crates.io. We certify audits for this crate as part of the documented release process, but that step happens after the version bump lands on central so we don't enforce it here. It's also used only for automation, so its subtree can be safe-to-run."
  275. diff --git a/third_party/rust/uniffi/.cargo-checksum.json b/third_party/rust/uniffi/.cargo-checksum.json
  276. --- a/third_party/rust/uniffi/.cargo-checksum.json
  277. +++ b/third_party/rust/uniffi/.cargo-checksum.json
  278. @@ -1,1 +1,1 @@
  279. -{"files":{"Cargo.toml":"b7bde8b1b6bb7e1420c9c486d7562d1639fbb82a2b6459b8b3b7d15f002377d3","release.toml":"a6602545cd6eb46e44d89ce946d7954957ac00f1c955de54c736fa2cb560b1df","src/ffi/ffidefault.rs":"c7ab752fffed17c3fabb60e818ad1d093482f95dd0bdeae6871287695c583e48","src/ffi/foreignbytes.rs":"37061e2da7135576abccb86fe27b4fefc054586a040f2ca81fe9858d5649e887","src/ffi/foreigncallbacks.rs":"c0974920313ac81dd4bb28a51dd9e9ef50c8ea6d965f0bfdde58c661a4ca719f","src/ffi/mod.rs":"3fb3b74607066e0052fc91168e9473dbf82dbae562f85c33774a7f5f6b350616","src/ffi/rustbuffer.rs":"b773637d9e4651b80cd16f7a02ed75846d02ce0a9e32b718ce644cdba3a83cdd","src/ffi/rustcalls.rs":"4a85a90b0d46974ab9e80e403a1cddaa252337b227e1a672bb6fdbbca5a66259","src/lib.rs":"83614739f8c0c939b217755cfde169a85608a52ea197f63f7850e5765e2c5f97","src/panichook.rs":"9f49c7994a8e5489c1105c488bb3f8c5571bc5f813e7be90441eca15da5c9851","src/testing.rs":"f287d682a8f27465838b2aba91993c635a4dcd281d802dc12c7c75794324123f","tests/ui/proc_macro_arc.rs":"d766dffee3fe6a93522d40f44a7f15592db141fd674034fa5f016e06f510e87b","tests/ui/proc_macro_arc.stderr":"9e7d098abdd47f249ff62fe0a2ee0f8b96282ec5a3be0c48a778baab4624180f","tests/ui/version_mismatch.rs":"16ea359e5853517ee0d0704c015ae8c825533109fbefd715130d0f4a51f15898","tests/ui/version_mismatch.stderr":"aadbd8f3847f5663022d8dd75d6afa3b25dfc8abccd30b386a681f98587d4ceb"},"package":"f54af5ada67d1173457a99a7bb44a7917f63e7466764cb4714865c7a6678b830"}
  280. \ No newline at end of file
  281. +{"files":{"Cargo.toml":"40a5376941ee93f7d3d013862731eaced1121c852bd4df4affe1cd65bf9b68be","release.toml":"a6602545cd6eb46e44d89ce946d7954957ac00f1c955de54c736fa2cb560b1df","src/ffi/ffidefault.rs":"c7ab752fffed17c3fabb60e818ad1d093482f95dd0bdeae6871287695c583e48","src/ffi/foreignbytes.rs":"37061e2da7135576abccb86fe27b4fefc054586a040f2ca81fe9858d5649e887","src/ffi/foreigncallbacks.rs":"c0974920313ac81dd4bb28a51dd9e9ef50c8ea6d965f0bfdde58c661a4ca719f","src/ffi/mod.rs":"3fb3b74607066e0052fc91168e9473dbf82dbae562f85c33774a7f5f6b350616","src/ffi/rustbuffer.rs":"b773637d9e4651b80cd16f7a02ed75846d02ce0a9e32b718ce644cdba3a83cdd","src/ffi/rustcalls.rs":"4a85a90b0d46974ab9e80e403a1cddaa252337b227e1a672bb6fdbbca5a66259","src/lib.rs":"83614739f8c0c939b217755cfde169a85608a52ea197f63f7850e5765e2c5f97","src/panichook.rs":"9f49c7994a8e5489c1105c488bb3f8c5571bc5f813e7be90441eca15da5c9851","src/testing.rs":"f287d682a8f27465838b2aba91993c635a4dcd281d802dc12c7c75794324123f","tests/ui/proc_macro_arc.rs":"d766dffee3fe6a93522d40f44a7f15592db141fd674034fa5f016e06f510e87b","tests/ui/proc_macro_arc.stderr":"9e7d098abdd47f249ff62fe0a2ee0f8b96282ec5a3be0c48a778baab4624180f","tests/ui/version_mismatch.rs":"16ea359e5853517ee0d0704c015ae8c825533109fbefd715130d0f4a51f15898","tests/ui/version_mismatch.stderr":"aadbd8f3847f5663022d8dd75d6afa3b25dfc8abccd30b386a681f98587d4ceb"},"package":"b983553c0d1ad73547c65fa0c399aa800bee4a70ad330198e1c7a523212da5ee"}
  282. \ No newline at end of file
  283. diff --git a/third_party/rust/uniffi/Cargo.toml b/third_party/rust/uniffi/Cargo.toml
  284. --- a/third_party/rust/uniffi/Cargo.toml
  285. +++ b/third_party/rust/uniffi/Cargo.toml
  286. @@ -7,28 +7,27 @@
  287. #
  288. # If you are reading this file be aware that the original Cargo.toml
  289. # will likely look very different (and much more reasonable).
  290. # See Cargo.toml.orig for the original contents.
  291. [package]
  292. edition = "2021"
  293. name = "uniffi"
  294. -version = "0.21.0"
  295. +version = "0.21.1"
  296. authors = ["Firefox Sync Team <sync-team@mozilla.com>"]
  297. description = "a multi-language bindings generator for rust (runtime support code)"
  298. homepage = "https://mozilla.github.io/uniffi-rs"
  299. documentation = "https://mozilla.github.io/uniffi-rs"
  300. keywords = [
  301. "ffi",
  302. "bindgen",
  303. ]
  304. license = "MPL-2.0"
  305. repository = "https://github.com/mozilla/uniffi-rs"
  306. -resolver = "2"
  307. [dependencies.anyhow]
  308. version = "1"
  309. [dependencies.bytes]
  310. version = "1.0"
  311. [dependencies.camino]
  312. @@ -45,20 +44,20 @@ version = "1.12"
  313. [dependencies.paste]
  314. version = "1.0"
  315. [dependencies.static_assertions]
  316. version = "1.1.0"
  317. [dependencies.uniffi_bindgen]
  318. -version = "=0.21.0"
  319. +version = "=0.21.1"
  320. optional = true
  321. [dependencies.uniffi_macros]
  322. -version = "=0.21.0"
  323. +version = "=0.21.1"
  324. [dev-dependencies.trybuild]
  325. version = "1"
  326. [features]
  327. builtin-bindgen = ["uniffi_bindgen"]
  328. default = []
  329. diff --git a/third_party/rust/uniffi_bindgen/.cargo-checksum.json b/third_party/rust/uniffi_bindgen/.cargo-checksum.json
  330. --- a/third_party/rust/uniffi_bindgen/.cargo-checksum.json
  331. +++ b/third_party/rust/uniffi_bindgen/.cargo-checksum.json
  332. @@ -1,1 +1,1 @@
  333. -{"files":{"Cargo.lock":"5ed0714fd87076b5b5f11ca60553f12559e69794c2fec7d487a398f31a577a5f","Cargo.toml":"209b8cb7759ec813ee1e27a4b7e1d2bed2604c37d7c55578058bc7089ee9557e","askama.toml":"1a245b7803adca782837e125c49100147d2de0d5a1c949ff95e91af1701f6058","src/backend/config.rs":"4861dbf251dbb10beb1ed7e3eea7d79499a0de1cd9ce9ee8381a0e729c097dea","src/backend/declarations.rs":"12b8d6e651f84634de5cd02a47601965df7438f64f1a73f136bd89b6b5d515cf","src/backend/mod.rs":"899cd3b816d0467e35789b92ac3b8d5910f6dab98156d405db4803da8721fd36","src/backend/oracle.rs":"9e2b8a45af604a6e4952644e81f43f6aec6e0a1d03939c68b582529dd01a51e0","src/backend/types.rs":"7c49a92096a54eefd2336c48d60fe20ded9490142ab3a229a7c1a99fec14df3d","src/bindings/kotlin/gen_kotlin/callback_interface.rs":"b7fe795670830f3aa8a955c787b1127fe68313ee751013948527948fe5526b01","src/bindings/kotlin/gen_kotlin/compounds.rs":"d1e9a4237ff2ff711a3eae7a564c39e26f598c156ebfd34c0f04879e3533dd4f","src/bindings/kotlin/gen_kotlin/custom.rs":"4176f6ed5f66504f8fd981198bbfbae795dab5ef0d0281881d19b697f5560c44","src/bindings/kotlin/gen_kotlin/enum_.rs":"f85ae8dcb55c8f274139bf321af0ba237ae69894165ad6bd693d793f58af8e5e","src/bindings/kotlin/gen_kotlin/error.rs":"867f583aea5da7aabeb9b6d2544d7e52984cdea4aa008ce5f2ec941074735e1a","src/bindings/kotlin/gen_kotlin/external.rs":"1f7e91d7439891fe3c403274e35880ee4fc3a0da555510bdfa23c1ed2bbd8020","src/bindings/kotlin/gen_kotlin/miscellany.rs":"644ee5bb1f3619be5a36b2b3900af554ea38073cd054004f421e69c3cb8d50bc","src/bindings/kotlin/gen_kotlin/mod.rs":"90412e7927c284668a9eb75823c198182e58e5177d5561896c43b79367564b27","src/bindings/kotlin/gen_kotlin/object.rs":"6478a3e9d5e66186521730d0d481abd1ee4f123050ea050ac5a483842f08b003","src/bindings/kotlin/gen_kotlin/primitives.rs":"914d1f8253ed6a2937f67e8bd8f04f46aef4f22455ceb8a6caa84427adc2093e","src/bindings/kotlin/gen_kotlin/record.rs":"7961fcfbec5ebf8fc010b564ea4bd59402c919f6922898d48226d8c995569dd7","src/bindings/kotlin/mod.rs":"e68f2ea29e66ee62a56704e1e4464eea6d28bbdb52ab187bbe7a57ab3f362ea7","src/bindings/kotlin/templates/BooleanHelper.kt":"28e8a5088c8d58c9bfdbc575af8d8725060521fdd7d092684a8044b24ae567c7","src/bindings/kotlin/templates/CallbackInterfaceRuntime.kt":"6ede374b0fcbb3bcc939894e6f4729b3bec7ec7356831a60fba96ca38dc91aa8","src/bindings/kotlin/templates/CallbackInterfaceTemplate.kt":"5a704eb8c044ed22905e4d526ee3fc0b86f42fe82ac1eb4ad3758ad0552ea8c8","src/bindings/kotlin/templates/CustomTypeTemplate.kt":"5d4dacf29e89bcdcc46d155d993e6059d2df704e775dc853469310198253b231","src/bindings/kotlin/templates/DurationHelper.kt":"414a98161538a26f3a9b357353270c1f245ad6ceed99496aca7162cf473a92fd","src/bindings/kotlin/templates/EnumTemplate.kt":"ab3e2063aad3b91188db839dceb59b854a6a8b60fb35e545e270e64fee7c73fa","src/bindings/kotlin/templates/ErrorTemplate.kt":"a5ec2bdfc026838e1096dbf3301f21aa4ea22e8c93458d45bb1c8c7b9ee1fc5b","src/bindings/kotlin/templates/ExternalTypeTemplate.kt":"2097e0b830640ef18c79449ffa376d1dd35a8c4a5230e413c915f3b868aae872","src/bindings/kotlin/templates/FfiConverterTemplate.kt":"aa22962aaa9f641d48ccf44cb56d9f8a7736cbfaa01e1a1656662cfe5dd5c1d7","src/bindings/kotlin/templates/Float32Helper.kt":"662d95af3b629d143fb4d47cb7e9aa26ed28a5f3846de0341e28b0f9fb08bc25","src/bindings/kotlin/templates/Float64Helper.kt":"a77d099fa7d91e8702c1700e7949ffb6aaba9c6e8041ff48bab34b8e1fc9a0aa","src/bindings/kotlin/templates/Helpers.kt":"46c07798a26b53b06405c8bbbf86e3fcf38fadc1484ea04ce9d482defea89288","src/bindings/kotlin/templates/Int16Helper.kt":"7f83c4a48e1f3b2a59a3ca6a2662be8bc9baf3a5a748b31223cb3f51721ef249","src/bindings/kotlin/templates/Int32Helper.kt":"e02e4702175554b09fd2dd6ac3089dcd2c395f08ec60e762159566a9c9889450","src/bindings/kotlin/templates/Int64Helper.kt":"7a6fd6ca486852c89399c699935a9dfa1c32b9356d9a965cfde532581f05d9fa","src/bindings/kotlin/templates/Int8Helper.kt":"0554545494b6b9a76ce94f9c1723f8cf4230a13076feb75d620b1c9ca1ac4668","src/bindings/kotlin/templates/MapTemplate.kt":"399569d6443e8ad01e2deb95d78d8d2d15bf8eccee8be4fbe9ce4b8ebc0a6101","src/bindings/kotlin/templates/NamespaceLibraryTemplate.kt":"1eba4e77381155c2c96a6af2ef30fca881ade4957852f730fd10aa4f3d9cd3c4","src/bindings/kotlin/templates/ObjectRuntime.kt":"c11d233de41405caa55a56bcaa3bb69ce153ffa6fdff2aa218051929f5c4aeec","src/bindings/kotlin/templates/ObjectTemplate.kt":"7e32d92ec6116da9b7d7f278b15333a2fd2a82dde8c21534e3f6fe371d19f333","src/bindings/kotlin/templates/OptionalTemplate.kt":"5f9f2c1baa829ed3c9b61c3edb0f1fccf5ea3cccc052a69cf8966715d8fcf149","src/bindings/kotlin/templates/RecordTemplate.kt":"193ecdad9322fb5483b95bf2a259270a9b22ba054790794e9abb3fd219196bc5","src/bindings/kotlin/templates/RustBufferTemplate.kt":"415637f80a78c12b3d00db063c14a7ab5c61b098bdb1fc81a0be8bae9511776b","src/bindings/kotlin/templates/SequenceTemplate.kt":"786693b20c608a4f059b91df115278f5f12122b4c14a2e7ce18b6fc9b22b1296","src/bindings/kotlin/templates/StringHelper.kt":"060839663580d8199671b7c3bb3dce5e9106aa766ce2c6e0afc2d2bd788a1d83","src/bindings/kotlin/templates/TimestampHelper.kt":"353c2890f06ad6dda238e9aebb4bdff7bb838e17e46abf351ed3ff1fbc4e6580","src/bindings/kotlin/templates/TopLevelFunctionTemplate.kt":"09b8bb5ffea7075518ee657f83017d44ff0cbf584fd85676b082199139c9be09","src/bindings/kotlin/templates/Types.kt":"db7ed7384b4391a4bc1425ec3a89e0c890538ad30f5e115bae4998c059c8a21b","src/bindings/kotlin/templates/UInt16Helper.kt":"e84a1f30a5a899ba2c5db614d3f3c74f25bccf6dd99bf68b8830829332d051e9","src/bindings/kotlin/templates/UInt32Helper.kt":"7cdf08cc580046935f27ba07b53685968608a102e0a6be305111037c63d7ddf8","src/bindings/kotlin/templates/UInt64Helper.kt":"fd7baacbf3ab6202ff83edcc66e5f7beb11a10053ba66d0b49547616cc7cbe1f","src/bindings/kotlin/templates/UInt8Helper.kt":"bbf5a6d66c995aea9fe2fa9840c6bfa78b03520a09469b984f0e1d43191e453a","src/bindings/kotlin/templates/macros.kt":"eb5e0f9915b8ec9fbf3bf1a714625fbdcef7a7ee7461916e87fec872434ed3ec","src/bindings/kotlin/templates/wrapper.kt":"dd81cf28a4e07c685d29c87a4053eccb6339835cfc7fce3cf581d3d111fed4f5","src/bindings/mod.rs":"51ac55a3d505d5a88eedc83cf12623c2738277a9cd22bf3bbe05be1244de078b","src/bindings/python/gen_python/callback_interface.rs":"e3ffb8ba1aa8ac8ddcfff6554e7ec0d2d695d12955a98a04d114d2d6ca5dacc8","src/bindings/python/gen_python/compounds.rs":"e406c773c3b66368ea74973df742cdcba3014521812048f15de7c0e783eedfaf","src/bindings/python/gen_python/custom.rs":"33756f6bdafbd9b1a3a439c1cced3c83dc1fdb82b5ec235c064e69670ea6086c","src/bindings/python/gen_python/enum_.rs":"634c8406b07cbd24ea4f71cae4c971169e4989ce8019188f4bcd515bc3c77c5d","src/bindings/python/gen_python/error.rs":"d1a3b3edb91d9502064463cc3324770a1a6e0f234d6b49b5d7c43636bfe81d59","src/bindings/python/gen_python/external.rs":"8920b7a2a3b39a9647ec17cdff44308db3bfe9a582f026b060003edd76407599","src/bindings/python/gen_python/miscellany.rs":"f3898b75cf494b39662d886eb78d9cc06685650265fc8a1e87e5de67baa342ae","src/bindings/python/gen_python/mod.rs":"552de45cab20c4467bdcc774c305f298c9d7487c6b89f6786cb7ef1774ccddf6","src/bindings/python/gen_python/object.rs":"b4d3d8a935d4acd689cf1f3857d461dbab3a51c7c8bd821890198fb58ef3a63f","src/bindings/python/gen_python/primitives.rs":"928523bb91d2192d615d044f1fef3714681140562b740cf72dce3168e660e276","src/bindings/python/gen_python/record.rs":"f961dfe8dd1e5caa633754de7ecc684c2211c9b6633a5e6beb6053e60500b9f2","src/bindings/python/mod.rs":"bcf295b334b332c7fd1214ddfdaa727cfe37fed531c3862ce25906b3a70b71c7","src/bindings/python/templates/BooleanHelper.py":"d384ffeefcb5982c4875e819d06e919a295eaa9ff57735e6fef0801bb810d5c9","src/bindings/python/templates/CallbackInterfaceRuntime.py":"7ffef485fc008e2d9efcd07326102f300bd4673b4351353e9e2908355936c3d7","src/bindings/python/templates/CallbackInterfaceTemplate.py":"089b5cc1131e8c9b867c899cb649ce22eb9ba6a4addab4ebf9ba63316c394693","src/bindings/python/templates/CustomType.py":"db3309b3f944fb813d4cef47a04d67a86f824183f7e31289184683155fd985d9","src/bindings/python/templates/DurationHelper.py":"179c14dccd8cc7dc9791f896414f0b5d124ec116eb78173371bd8a0743208da1","src/bindings/python/templates/EnumTemplate.py":"825ca373286f1b3b252b8a1263e29c9e2f0d3e170ceb364bd6c28d6c4595597b","src/bindings/python/templates/ErrorTemplate.py":"b6b1b0d3fc074a7c3ba7db394c5d6cb3279b0fc0e6a331154303c2c6c907458b","src/bindings/python/templates/ExternalTemplate.py":"f582a6e872fe9f8275d33d36ffe017028ca459fe7c53aa680a2512718d0c0fda","src/bindings/python/templates/Float32Helper.py":"7dbc51889cff47ebf1600fad490849e4a87cac4fc0d1756eebd21609eb80b4a9","src/bindings/python/templates/Float64Helper.py":"ba9f334d1339b6eaedcacc1e35068939727170a684f41dec9ee04762ed98cec1","src/bindings/python/templates/Helpers.py":"68f03f651c38c810fa453e123e26f7c94b7a1f9178e0d863b985c3c8fabaa642","src/bindings/python/templates/Int16Helper.py":"60c22fb8b445841ebb3c68be11b81c9eba84a680eaa0e30770953361231da9b5","src/bindings/python/templates/Int32Helper.py":"aff0a017cf767394174e46d8c4fe5a5a704a8e6384fcc38d227634dfe7826916","src/bindings/python/templates/Int64Helper.py":"6c314b91699a6c6ad7db3ef636713bc2a0af9609c82acfd6062b0588177c0026","src/bindings/python/templates/Int8Helper.py":"a6e2d121b1a6d59886fceab3949e571aba1abc06dfede52666954bf15366fb6f","src/bindings/python/templates/MapTemplate.py":"bbe609b865010b98b38c58f2d4fcc97f2adec3e931903bf67263a5e440a84400","src/bindings/python/templates/NamespaceLibraryTemplate.py":"4726dbeb61508a71153436126bc04d03af966dca4f5b37511beb8bcfb6f1f307","src/bindings/python/templates/ObjectTemplate.py":"68302f6da6e4e80fc0cc8eb4ef2d4353d19ad3e9955112a2fabec8bf1b1293c7","src/bindings/python/templates/OptionalTemplate.py":"ab6da433370ba7c1316e266247ee1b7165bc02f6f288e40a7c68806c018e3282","src/bindings/python/templates/RecordTemplate.py":"98cef2adbc2b890e5c67257fb32a57380070988ef4112408eeca85e0b87b566b","src/bindings/python/templates/RustBufferHelper.py":"11f733051e63733c637fb19c4758cb58a40d045792028465f36891f89c7c5f36","src/bindings/python/templates/RustBufferTemplate.py":"90950cfeeb7a028aac9b65aeca897b217eddcfa165a0d59e8af037e834f34146","src/bindings/python/templates/SequenceTemplate.py":"faf2b1d5272a66258972d88c29d5b527cf9e589c8399e30f7ad5a0503133ce9b","src/bindings/python/templates/StringHelper.py":"941a7ad71d9598701efa15323df93766934583a55f4266d26db31e6b744603fc","src/bindings/python/templates/TimestampHelper.py":"b412cea69117858c05bae3210d378c6296658ed02a50e87c52c392dcb62c7892","src/bindings/python/templates/TopLevelFunctionTemplate.py":"2b2883b14f324e543cfeea5293d2a4907fa9ebe93b779da7174a58929d8b0442","src/bindings/python/templates/Types.py":"2eee78ca838f65b7e8ff8f760558c71ca80ad314aaa44efd1d1b8e13b349f1bc","src/bindings/python/templates/UInt16Helper.py":"06be5c9dacdf20e586f8236ed75cf2ca2470078fd8570843ea97c581b25bf860","src/bindings/python/templates/UInt32Helper.py":"41bb9bbf9b7be1060945e1267b1cc052585ec43696b1591f0ee779a0be0feaff","src/bindings/python/templates/UInt64Helper.py":"ba2825fc295a07292d9fb4aeebe74dabb9e6dbe505643e2347875ab12e511f31","src/bindings/python/templates/UInt8Helper.py":"dca5b3fc4a429fb233326224f85c4eccd3a7802ca9958ec309c7f197d59b4e3d","src/bindings/python/templates/macros.py":"3f02a32941e20aea15e136780c24c9695021dbcae08044c4f654f75aadcbd1e1","src/bindings/python/templates/wrapper.py":"627a6e18e72040909887261b8ad918c68104b15110df26b2205d7827c690e8c3","src/bindings/ruby/gen_ruby/mod.rs":"33ae9fc3f69e4c5b7bb6df41e53298f89934cee2bb6d7e7ea8488cefc9d06c03","src/bindings/ruby/gen_ruby/tests.rs":"7dcb86b08e643c43503f4cac6396833497f6988b004321c0067700ee29ffbf32","src/bindings/ruby/mod.rs":"f57fccdfc544210e8cc70e01e4991cee6e72d258ede9d2bb226baad24a3ef0d7","src/bindings/ruby/templates/EnumTemplate.rb":"5480edb347f5829e478d19474691babd72f37616ed846d519b5a61cb1d6cf047","src/bindings/ruby/templates/ErrorTemplate.rb":"147b2c3ff44c19624e7bf7b3a2a04b7badbba5743eaefa0d5e6c05943119c87e","src/bindings/ruby/templates/NamespaceLibraryTemplate.rb":"9b1454208bc83ef8f26aef33713d681e2284dbfea986ec0dd6c9b9c8b7d65e4a","src/bindings/ruby/templates/ObjectTemplate.rb":"c2d2fa2db62d48322b66b53888dcc6de2fc3e579a6b8d0a9f24029c18fffcbb5","src/bindings/ruby/templates/RecordTemplate.rb":"4aeff886928ca972e5dc9b799581b30c66a6f6dce446af3285dd3ed6b422dea9","src/bindings/ruby/templates/RustBufferBuilder.rb":"2ee5a4b97fe590de98ec2119b2dfe103bba75e15b5fb3c178fa51dfa662dfe2c","src/bindings/ruby/templates/RustBufferStream.rb":"ddfc38a6388bdddf8cc24bb6f1af948e4eef2d7ae2091a5130fee57cf53e5a7d","src/bindings/ruby/templates/RustBufferTemplate.rb":"8f37664f5436ba74ccdd801e16220f1b879d2fb56f51f5845b6047c92dc079f8","src/bindings/ruby/templates/TopLevelFunctionTemplate.rb":"88213e7e25bef664da939c04dd5621f438af735ffcb4d2d0c24a529538630069","src/bindings/ruby/templates/macros.rb":"d732a62291c78ccfbc3208227c1b57f6add723fad91b7e699d693e360840e1b0","src/bindings/ruby/templates/wrapper.rb":"542cdf46fb871e66089c9f008cf472cca411fe217d8c66a0a66776c35469aab5","src/bindings/swift/gen_swift/callback_interface.rs":"e331871ac6c9ac9b9533848fb6ddfcabc1e605970343cad307b6d86b72ebe96a","src/bindings/swift/gen_swift/compounds.rs":"f9e87b342f1f9a14295d87bad59d786d4c253a24d22900c2aba44816713718ae","src/bindings/swift/gen_swift/custom.rs":"45cdfa35ef7345dc353d0d2f3cebb17d726e90abdf5ef49422d6b2db65f8fd25","src/bindings/swift/gen_swift/enum_.rs":"018eea78ef85c9f8d715a5bc15c8273030d4f6ba297019949eb578c5cc6276fd","src/bindings/swift/gen_swift/error.rs":"bd95c3303e40f03a321f2cdc8e15a0251f4c7ddbc3c32c4c57eb9569db218488","src/bindings/swift/gen_swift/miscellany.rs":"66f16968f6cccc0b61c544e336a49b96218551731dcce566a176903c9afb3b57","src/bindings/swift/gen_swift/mod.rs":"1e8f98e05a5b03798c91ada854f6a4f2a0682c252143d63c16c6a06bd0419e4b","src/bindings/swift/gen_swift/object.rs":"072a44f484cc66694c57a9fa41ba50a531c9ce19738e11ce9df17cdfc007648f","src/bindings/swift/gen_swift/primitives.rs":"b37b8f3ad3aa7e769e6d465a31282e377f93cd69e4dcf39a56dc833f412ed412","src/bindings/swift/gen_swift/record.rs":"48296332960be3731b9139dc664d4b8a5d56d04cffa34dc995b62cf202b4dbfd","src/bindings/swift/mod.rs":"0ad4afd667ef17b3b577ded9a09cdaa5595afbdb24e7474c6b1e6a8e0a024593","src/bindings/swift/templates/BooleanHelper.swift":"f607928c4d598893421fe9c9f183bab2f23a877a07afeb123dbe90515249ec86","src/bindings/swift/templates/BridgingHeaderTemplate.h":"93a289e393ecdbe1bf986215c3b19d2aed7677d47f79b1833ce73cf6f8762e80","src/bindings/swift/templates/CallbackInterfaceRuntime.swift":"aac01eb4269151be9dde8c95ee8eba7e8d0841b3c2b1dbd88885f01ac64ee147","src/bindings/swift/templates/CallbackInterfaceTemplate.swift":"c9700f52e932556c59a9bfea68fc786746b7f321ff75c33d0a8c1565effaeef5","src/bindings/swift/templates/CustomType.swift":"fe6414f2ce3ea7b148742e2fecf2206d7e69935dd78d56e014aec70f4d6ad3ec","src/bindings/swift/templates/DurationHelper.swift":"bca4a6498b27fe0c877df3c7fbe148538eeda03e68d4e760a7c8a6a15f2067ff","src/bindings/swift/templates/EnumTemplate.swift":"e61bdf7949aa5a7b55a2c10c243e960f683c862e5977f06e7f5956646b4ccb49","src/bindings/swift/templates/ErrorTemplate.swift":"58fb5907d20b7a6db67b128e5f6350015278990fef5945be42477a5b5f82bb18","src/bindings/swift/templates/Float32Helper.swift":"6c1a4da059dd4c6c4392511c93fe9daf4ddeeab71e39afd122797b0e19254318","src/bindings/swift/templates/Float64Helper.swift":"f741568cdfb8e1421369a9a1dc845630a3a0e2dc2d6acf157afd80cd3ef5966f","src/bindings/swift/templates/Helpers.swift":"3cf3a5342a1ef0c7e078b0e58c32ae4437c4fb5dc41acbbd56b1128393c76602","src/bindings/swift/templates/Int16Helper.swift":"76eec2a54a65790c5959380cc9a7362b1e2e201632cccb789153c52e10c8dc4f","src/bindings/swift/templates/Int32Helper.swift":"5afc5e103bf637813fd4b77ab63e47ed38893525101a483218a339f222710061","src/bindings/swift/templates/Int64Helper.swift":"c1a6f6661ef1ad3bd00e8d0bf81adaa6539686eee2b481b046b76dbd87681adf","src/bindings/swift/templates/Int8Helper.swift":"bc46598c966e579cca22d336748c74cdce5674eaaaf75fc24e5fdaa36a43cf9c","src/bindings/swift/templates/MapTemplate.swift":"8b5a9cb41a1ad41b5566fbe3906a1449e5453289208a9fc6a611de1eb937142a","src/bindings/swift/templates/ModuleMapTemplate.modulemap":"99ad1e9bf550a21497296f9248ecd4385dd6d0b5892951d24cf990cdbf3eec2c","src/bindings/swift/templates/ObjectTemplate.swift":"98f744d7baf41e28d9184ae7e1aa9522b1bd951d507e0987879b11d7995782aa","src/bindings/swift/templates/OptionalTemplate.swift":"73f777d2df4fdf42daf0d6035436d168b0d5f0abc15153b97029bc305408f597","src/bindings/swift/templates/RecordTemplate.swift":"af0dc13b32d34254b4cfef3b74f52fd4611aa6c32e055e203414511fd3bbb00a","src/bindings/swift/templates/RustBufferTemplate.swift":"ed16f20cecd264f086c923cd92a5198f444aec99aad4d39e9012f09f530ca809","src/bindings/swift/templates/SequenceTemplate.swift":"977f1409909ff08018c0a80c1330737023b39a8f9fa9a13f5bf9ab4806cac199","src/bindings/swift/templates/StringHelper.swift":"b773c2b3a03f30338ff233881d1b0c0238831b812eff6eb9f0fafcb32ab0743a","src/bindings/swift/templates/TimestampHelper.swift":"6e22e370feae1199bff16bcc6f431decfb7700b02e6afdd84693a0c474eb045e","src/bindings/swift/templates/TopLevelFunctionTemplate.swift":"ca7fcbaa06ee31c7433fd6aa238b6c1135a843f469d9b4f37d4874d514fd80d0","src/bindings/swift/templates/Types.swift":"2f42430cb4ffba8e9b5084c0cf8790fb5bae151878134b8a21e745acf75d2b08","src/bindings/swift/templates/UInt16Helper.swift":"16adb3b50403dad114fad0b86bc220c5adc3bd987c57c290aee7c6407891dfbc","src/bindings/swift/templates/UInt32Helper.swift":"680ddd2815184f520723820f10698a089c222df0388bc0f7734c6d5234194aec","src/bindings/swift/templates/UInt64Helper.swift":"b752852162028a0c132f79f9005c47c263a4dab98833e86758cd7b467e305629","src/bindings/swift/templates/UInt8Helper.swift":"54f4821e704969eeb5c0e002b890d975a20eda3ddc3ee56169ee3c615dfa1079","src/bindings/swift/templates/macros.swift":"0744724c37419e894132b39aea4b8e1f473460583883fa37f38c787a7deea32c","src/bindings/swift/templates/wrapper.swift":"ca1af5fe47bca972c76fb8c9f52b18f727d4343204408de3dd0aae384f0a4171","src/interface/attributes.rs":"2f76377eebdd62e770bb9089885482a49a57e1f8405320bb778353f3e8974447","src/interface/callbacks.rs":"c9f4b97b21195ba2d1787f032f1daa5f4ce2fc40e014942e07e4eb37b5b95ee9","src/interface/enum_.rs":"1a7cda619a986a20fd4d0f145206aba2c500ce5dfca90d01e5324996fd68dc04","src/interface/error.rs":"f31fc0a7e41b4c8f4b81d06958fda14af6f05bfa318206098e0ec351cf4db809","src/interface/ffi.rs":"22d24e4dda327fa78c7632a6e5bbe374ecac0165acc550007feb729d8f4d6adf","src/interface/function.rs":"d6df6d8d412d7c45fe33c7337b37aeb851ae0f21834c4bd8b315aad4ca4ec309","src/interface/literal.rs":"3d2102cb47ff658f329d66d6c867b13a50e7f56535f23c1b414f857741360358","src/interface/mod.rs":"1d1993504ce61a2f578cb6fb42c79b7829a0767c20983581d631ee948819665e","src/interface/namespace.rs":"ab0f63241bb6a0a32f9fd2a1544468cb6daa1f91f6116b7246b52a4a94e4f461","src/interface/object.rs":"44836747d5d00bb40ecadb889c9a6ff32c1cbf625b5a6a337f5891f495fd92fd","src/interface/record.rs":"5859ea6c1f6c5524d1e6f3846954986710d5f74f1c6fd6324c4245b5f70013d5","src/interface/types/finder.rs":"a27f24e64b5bfc796378d1012b5e72001f0a442e8185fdc4430b106595d4b819","src/interface/types/mod.rs":"fe63c3fd233ad905af0358c5d610c85a5a57f263eb899acc756454a1029c4569","src/interface/types/resolver.rs":"7e7ce336ef77c0a6c23deea36856737a97cca9b1c3f5cd0d676fe7df6ade6480","src/lib.rs":"a41b43e3628bb6b3f725580eec255b409947945672887de87c21d5122775a245","src/macro_metadata/ci.rs":"0d6e53d2b5645dd3cc7d196bd3a32ee82c029e1adb9ae93708c27a3fa5c55a88","src/macro_metadata/extract.rs":"ec392692a4601343312f60937987fe460cfb40d2c63a6bb1531fe91903916f10","src/macro_metadata/mod.rs":"1668e6d947fd4a957f557410a8095649de6f8d7fd3eb6a403b8587280dca2d54","src/main.rs":"bbf8e9942d398387e7518533f9b9dc42bfa66156430a87a17605a80a356c0dea","src/scaffolding/mod.rs":"35ae72220843cf3cccefd96e190553e32a5f34ccc58d552fd9165faea12db260","src/scaffolding/templates/CallbackInterfaceTemplate.rs":"3c8caa2e148add8d80701894ee6904fc2d3c5c6424d6d414b36edb6f593b5023","src/scaffolding/templates/EnumTemplate.rs":"eb8802f04f1fd1c9451ad72c1195c136288fdb4e488922b24db75b2fdae65cd7","src/scaffolding/templates/ErrorTemplate.rs":"e7ca4538908a273dd7ba3834219b30fa0e537b2171144f06b6a96fbefb90cd1d","src/scaffolding/templates/ExternalTypesTemplate.rs":"8ecc805cf119abac8c5f60605f9183ee9ec8d37f9ec75bba5e18bb8b482a1abb","src/scaffolding/templates/ObjectTemplate.rs":"34de640428486e17a61ded4f42ce13d8eac3e66cc9f60196ce2575cdc0bd8df6","src/scaffolding/templates/RecordTemplate.rs":"e8d5af954f46f023a243721d6fc70aa176c3a4c0a9dd340048bfe46f3eeed783","src/scaffolding/templates/ReexportUniFFIScaffolding.rs":"559a17c8e39c473ff1effe9651f05b83d443ecd8abed13e03f2b63872d7e1593","src/scaffolding/templates/RustBuffer.rs":"ccf7521012d93c41265375c6d2e80ce861ec93b41383da83c37718386dd726f6","src/scaffolding/templates/TopLevelFunctionTemplate.rs":"35eaefb0862f25ff683d58fb0be6ad5f74bbe2fc85047273200c3a5f4c728434","src/scaffolding/templates/macros.rs":"a41c9690d411074c59fc4609f897431669b9d939625a08f5304a71a88901ba7c","src/scaffolding/templates/scaffolding_template.rs":"3589f8e8e1f9b194ff4a6245665d3a421c771dec3cc947c4264bfcd34573550e"},"package":"12cc4af3c0180c7e86c4a3acf2b6587af04ba2567b1e948993df10f421796621"}
  334. \ No newline at end of file
  335. +{"files":{"Cargo.lock":"3b1693f0ada97ba7e0527d763402404b39fe341da22bd45aaf057e4be3fa3234","Cargo.toml":"58662147277f1620eccd6592f83623cf71959df8326e9d700fdaac47c6e6cf35","askama.toml":"1a245b7803adca782837e125c49100147d2de0d5a1c949ff95e91af1701f6058","src/backend/config.rs":"4861dbf251dbb10beb1ed7e3eea7d79499a0de1cd9ce9ee8381a0e729c097dea","src/backend/declarations.rs":"12b8d6e651f84634de5cd02a47601965df7438f64f1a73f136bd89b6b5d515cf","src/backend/mod.rs":"899cd3b816d0467e35789b92ac3b8d5910f6dab98156d405db4803da8721fd36","src/backend/oracle.rs":"9e2b8a45af604a6e4952644e81f43f6aec6e0a1d03939c68b582529dd01a51e0","src/backend/types.rs":"7c49a92096a54eefd2336c48d60fe20ded9490142ab3a229a7c1a99fec14df3d","src/bindings/kotlin/gen_kotlin/callback_interface.rs":"b7fe795670830f3aa8a955c787b1127fe68313ee751013948527948fe5526b01","src/bindings/kotlin/gen_kotlin/compounds.rs":"d1e9a4237ff2ff711a3eae7a564c39e26f598c156ebfd34c0f04879e3533dd4f","src/bindings/kotlin/gen_kotlin/custom.rs":"4176f6ed5f66504f8fd981198bbfbae795dab5ef0d0281881d19b697f5560c44","src/bindings/kotlin/gen_kotlin/enum_.rs":"f85ae8dcb55c8f274139bf321af0ba237ae69894165ad6bd693d793f58af8e5e","src/bindings/kotlin/gen_kotlin/error.rs":"867f583aea5da7aabeb9b6d2544d7e52984cdea4aa008ce5f2ec941074735e1a","src/bindings/kotlin/gen_kotlin/external.rs":"1f7e91d7439891fe3c403274e35880ee4fc3a0da555510bdfa23c1ed2bbd8020","src/bindings/kotlin/gen_kotlin/miscellany.rs":"644ee5bb1f3619be5a36b2b3900af554ea38073cd054004f421e69c3cb8d50bc","src/bindings/kotlin/gen_kotlin/mod.rs":"90412e7927c284668a9eb75823c198182e58e5177d5561896c43b79367564b27","src/bindings/kotlin/gen_kotlin/object.rs":"6478a3e9d5e66186521730d0d481abd1ee4f123050ea050ac5a483842f08b003","src/bindings/kotlin/gen_kotlin/primitives.rs":"914d1f8253ed6a2937f67e8bd8f04f46aef4f22455ceb8a6caa84427adc2093e","src/bindings/kotlin/gen_kotlin/record.rs":"7961fcfbec5ebf8fc010b564ea4bd59402c919f6922898d48226d8c995569dd7","src/bindings/kotlin/mod.rs":"e68f2ea29e66ee62a56704e1e4464eea6d28bbdb52ab187bbe7a57ab3f362ea7","src/bindings/kotlin/templates/BooleanHelper.kt":"28e8a5088c8d58c9bfdbc575af8d8725060521fdd7d092684a8044b24ae567c7","src/bindings/kotlin/templates/CallbackInterfaceRuntime.kt":"6ede374b0fcbb3bcc939894e6f4729b3bec7ec7356831a60fba96ca38dc91aa8","src/bindings/kotlin/templates/CallbackInterfaceTemplate.kt":"5a704eb8c044ed22905e4d526ee3fc0b86f42fe82ac1eb4ad3758ad0552ea8c8","src/bindings/kotlin/templates/CustomTypeTemplate.kt":"5d4dacf29e89bcdcc46d155d993e6059d2df704e775dc853469310198253b231","src/bindings/kotlin/templates/DurationHelper.kt":"414a98161538a26f3a9b357353270c1f245ad6ceed99496aca7162cf473a92fd","src/bindings/kotlin/templates/EnumTemplate.kt":"ab3e2063aad3b91188db839dceb59b854a6a8b60fb35e545e270e64fee7c73fa","src/bindings/kotlin/templates/ErrorTemplate.kt":"a5ec2bdfc026838e1096dbf3301f21aa4ea22e8c93458d45bb1c8c7b9ee1fc5b","src/bindings/kotlin/templates/ExternalTypeTemplate.kt":"2097e0b830640ef18c79449ffa376d1dd35a8c4a5230e413c915f3b868aae872","src/bindings/kotlin/templates/FfiConverterTemplate.kt":"aa22962aaa9f641d48ccf44cb56d9f8a7736cbfaa01e1a1656662cfe5dd5c1d7","src/bindings/kotlin/templates/Float32Helper.kt":"662d95af3b629d143fb4d47cb7e9aa26ed28a5f3846de0341e28b0f9fb08bc25","src/bindings/kotlin/templates/Float64Helper.kt":"a77d099fa7d91e8702c1700e7949ffb6aaba9c6e8041ff48bab34b8e1fc9a0aa","src/bindings/kotlin/templates/Helpers.kt":"46c07798a26b53b06405c8bbbf86e3fcf38fadc1484ea04ce9d482defea89288","src/bindings/kotlin/templates/Int16Helper.kt":"7f83c4a48e1f3b2a59a3ca6a2662be8bc9baf3a5a748b31223cb3f51721ef249","src/bindings/kotlin/templates/Int32Helper.kt":"e02e4702175554b09fd2dd6ac3089dcd2c395f08ec60e762159566a9c9889450","src/bindings/kotlin/templates/Int64Helper.kt":"7a6fd6ca486852c89399c699935a9dfa1c32b9356d9a965cfde532581f05d9fa","src/bindings/kotlin/templates/Int8Helper.kt":"0554545494b6b9a76ce94f9c1723f8cf4230a13076feb75d620b1c9ca1ac4668","src/bindings/kotlin/templates/MapTemplate.kt":"399569d6443e8ad01e2deb95d78d8d2d15bf8eccee8be4fbe9ce4b8ebc0a6101","src/bindings/kotlin/templates/NamespaceLibraryTemplate.kt":"1eba4e77381155c2c96a6af2ef30fca881ade4957852f730fd10aa4f3d9cd3c4","src/bindings/kotlin/templates/ObjectRuntime.kt":"c11d233de41405caa55a56bcaa3bb69ce153ffa6fdff2aa218051929f5c4aeec","src/bindings/kotlin/templates/ObjectTemplate.kt":"7e32d92ec6116da9b7d7f278b15333a2fd2a82dde8c21534e3f6fe371d19f333","src/bindings/kotlin/templates/OptionalTemplate.kt":"5f9f2c1baa829ed3c9b61c3edb0f1fccf5ea3cccc052a69cf8966715d8fcf149","src/bindings/kotlin/templates/RecordTemplate.kt":"193ecdad9322fb5483b95bf2a259270a9b22ba054790794e9abb3fd219196bc5","src/bindings/kotlin/templates/RustBufferTemplate.kt":"415637f80a78c12b3d00db063c14a7ab5c61b098bdb1fc81a0be8bae9511776b","src/bindings/kotlin/templates/SequenceTemplate.kt":"786693b20c608a4f059b91df115278f5f12122b4c14a2e7ce18b6fc9b22b1296","src/bindings/kotlin/templates/StringHelper.kt":"060839663580d8199671b7c3bb3dce5e9106aa766ce2c6e0afc2d2bd788a1d83","src/bindings/kotlin/templates/TimestampHelper.kt":"353c2890f06ad6dda238e9aebb4bdff7bb838e17e46abf351ed3ff1fbc4e6580","src/bindings/kotlin/templates/TopLevelFunctionTemplate.kt":"09b8bb5ffea7075518ee657f83017d44ff0cbf584fd85676b082199139c9be09","src/bindings/kotlin/templates/Types.kt":"db7ed7384b4391a4bc1425ec3a89e0c890538ad30f5e115bae4998c059c8a21b","src/bindings/kotlin/templates/UInt16Helper.kt":"e84a1f30a5a899ba2c5db614d3f3c74f25bccf6dd99bf68b8830829332d051e9","src/bindings/kotlin/templates/UInt32Helper.kt":"7cdf08cc580046935f27ba07b53685968608a102e0a6be305111037c63d7ddf8","src/bindings/kotlin/templates/UInt64Helper.kt":"fd7baacbf3ab6202ff83edcc66e5f7beb11a10053ba66d0b49547616cc7cbe1f","src/bindings/kotlin/templates/UInt8Helper.kt":"bbf5a6d66c995aea9fe2fa9840c6bfa78b03520a09469b984f0e1d43191e453a","src/bindings/kotlin/templates/macros.kt":"eb5e0f9915b8ec9fbf3bf1a714625fbdcef7a7ee7461916e87fec872434ed3ec","src/bindings/kotlin/templates/wrapper.kt":"dd81cf28a4e07c685d29c87a4053eccb6339835cfc7fce3cf581d3d111fed4f5","src/bindings/mod.rs":"51ac55a3d505d5a88eedc83cf12623c2738277a9cd22bf3bbe05be1244de078b","src/bindings/python/gen_python/callback_interface.rs":"e3ffb8ba1aa8ac8ddcfff6554e7ec0d2d695d12955a98a04d114d2d6ca5dacc8","src/bindings/python/gen_python/compounds.rs":"e406c773c3b66368ea74973df742cdcba3014521812048f15de7c0e783eedfaf","src/bindings/python/gen_python/custom.rs":"33756f6bdafbd9b1a3a439c1cced3c83dc1fdb82b5ec235c064e69670ea6086c","src/bindings/python/gen_python/enum_.rs":"634c8406b07cbd24ea4f71cae4c971169e4989ce8019188f4bcd515bc3c77c5d","src/bindings/python/gen_python/error.rs":"d1a3b3edb91d9502064463cc3324770a1a6e0f234d6b49b5d7c43636bfe81d59","src/bindings/python/gen_python/external.rs":"8920b7a2a3b39a9647ec17cdff44308db3bfe9a582f026b060003edd76407599","src/bindings/python/gen_python/miscellany.rs":"f3898b75cf494b39662d886eb78d9cc06685650265fc8a1e87e5de67baa342ae","src/bindings/python/gen_python/mod.rs":"552de45cab20c4467bdcc774c305f298c9d7487c6b89f6786cb7ef1774ccddf6","src/bindings/python/gen_python/object.rs":"b4d3d8a935d4acd689cf1f3857d461dbab3a51c7c8bd821890198fb58ef3a63f","src/bindings/python/gen_python/primitives.rs":"928523bb91d2192d615d044f1fef3714681140562b740cf72dce3168e660e276","src/bindings/python/gen_python/record.rs":"f961dfe8dd1e5caa633754de7ecc684c2211c9b6633a5e6beb6053e60500b9f2","src/bindings/python/mod.rs":"bcf295b334b332c7fd1214ddfdaa727cfe37fed531c3862ce25906b3a70b71c7","src/bindings/python/templates/BooleanHelper.py":"d384ffeefcb5982c4875e819d06e919a295eaa9ff57735e6fef0801bb810d5c9","src/bindings/python/templates/CallbackInterfaceRuntime.py":"7ffef485fc008e2d9efcd07326102f300bd4673b4351353e9e2908355936c3d7","src/bindings/python/templates/CallbackInterfaceTemplate.py":"089b5cc1131e8c9b867c899cb649ce22eb9ba6a4addab4ebf9ba63316c394693","src/bindings/python/templates/CustomType.py":"db3309b3f944fb813d4cef47a04d67a86f824183f7e31289184683155fd985d9","src/bindings/python/templates/DurationHelper.py":"179c14dccd8cc7dc9791f896414f0b5d124ec116eb78173371bd8a0743208da1","src/bindings/python/templates/EnumTemplate.py":"825ca373286f1b3b252b8a1263e29c9e2f0d3e170ceb364bd6c28d6c4595597b","src/bindings/python/templates/ErrorTemplate.py":"b6b1b0d3fc074a7c3ba7db394c5d6cb3279b0fc0e6a331154303c2c6c907458b","src/bindings/python/templates/ExternalTemplate.py":"f582a6e872fe9f8275d33d36ffe017028ca459fe7c53aa680a2512718d0c0fda","src/bindings/python/templates/Float32Helper.py":"7dbc51889cff47ebf1600fad490849e4a87cac4fc0d1756eebd21609eb80b4a9","src/bindings/python/templates/Float64Helper.py":"ba9f334d1339b6eaedcacc1e35068939727170a684f41dec9ee04762ed98cec1","src/bindings/python/templates/Helpers.py":"68f03f651c38c810fa453e123e26f7c94b7a1f9178e0d863b985c3c8fabaa642","src/bindings/python/templates/Int16Helper.py":"60c22fb8b445841ebb3c68be11b81c9eba84a680eaa0e30770953361231da9b5","src/bindings/python/templates/Int32Helper.py":"aff0a017cf767394174e46d8c4fe5a5a704a8e6384fcc38d227634dfe7826916","src/bindings/python/templates/Int64Helper.py":"6c314b91699a6c6ad7db3ef636713bc2a0af9609c82acfd6062b0588177c0026","src/bindings/python/templates/Int8Helper.py":"a6e2d121b1a6d59886fceab3949e571aba1abc06dfede52666954bf15366fb6f","src/bindings/python/templates/MapTemplate.py":"bbe609b865010b98b38c58f2d4fcc97f2adec3e931903bf67263a5e440a84400","src/bindings/python/templates/NamespaceLibraryTemplate.py":"4726dbeb61508a71153436126bc04d03af966dca4f5b37511beb8bcfb6f1f307","src/bindings/python/templates/ObjectTemplate.py":"68302f6da6e4e80fc0cc8eb4ef2d4353d19ad3e9955112a2fabec8bf1b1293c7","src/bindings/python/templates/OptionalTemplate.py":"ab6da433370ba7c1316e266247ee1b7165bc02f6f288e40a7c68806c018e3282","src/bindings/python/templates/RecordTemplate.py":"98cef2adbc2b890e5c67257fb32a57380070988ef4112408eeca85e0b87b566b","src/bindings/python/templates/RustBufferHelper.py":"11f733051e63733c637fb19c4758cb58a40d045792028465f36891f89c7c5f36","src/bindings/python/templates/RustBufferTemplate.py":"90950cfeeb7a028aac9b65aeca897b217eddcfa165a0d59e8af037e834f34146","src/bindings/python/templates/SequenceTemplate.py":"faf2b1d5272a66258972d88c29d5b527cf9e589c8399e30f7ad5a0503133ce9b","src/bindings/python/templates/StringHelper.py":"941a7ad71d9598701efa15323df93766934583a55f4266d26db31e6b744603fc","src/bindings/python/templates/TimestampHelper.py":"b412cea69117858c05bae3210d378c6296658ed02a50e87c52c392dcb62c7892","src/bindings/python/templates/TopLevelFunctionTemplate.py":"2b2883b14f324e543cfeea5293d2a4907fa9ebe93b779da7174a58929d8b0442","src/bindings/python/templates/Types.py":"2eee78ca838f65b7e8ff8f760558c71ca80ad314aaa44efd1d1b8e13b349f1bc","src/bindings/python/templates/UInt16Helper.py":"06be5c9dacdf20e586f8236ed75cf2ca2470078fd8570843ea97c581b25bf860","src/bindings/python/templates/UInt32Helper.py":"41bb9bbf9b7be1060945e1267b1cc052585ec43696b1591f0ee779a0be0feaff","src/bindings/python/templates/UInt64Helper.py":"ba2825fc295a07292d9fb4aeebe74dabb9e6dbe505643e2347875ab12e511f31","src/bindings/python/templates/UInt8Helper.py":"dca5b3fc4a429fb233326224f85c4eccd3a7802ca9958ec309c7f197d59b4e3d","src/bindings/python/templates/macros.py":"3f02a32941e20aea15e136780c24c9695021dbcae08044c4f654f75aadcbd1e1","src/bindings/python/templates/wrapper.py":"627a6e18e72040909887261b8ad918c68104b15110df26b2205d7827c690e8c3","src/bindings/ruby/gen_ruby/mod.rs":"33ae9fc3f69e4c5b7bb6df41e53298f89934cee2bb6d7e7ea8488cefc9d06c03","src/bindings/ruby/gen_ruby/tests.rs":"7dcb86b08e643c43503f4cac6396833497f6988b004321c0067700ee29ffbf32","src/bindings/ruby/mod.rs":"f57fccdfc544210e8cc70e01e4991cee6e72d258ede9d2bb226baad24a3ef0d7","src/bindings/ruby/templates/EnumTemplate.rb":"5480edb347f5829e478d19474691babd72f37616ed846d519b5a61cb1d6cf047","src/bindings/ruby/templates/ErrorTemplate.rb":"147b2c3ff44c19624e7bf7b3a2a04b7badbba5743eaefa0d5e6c05943119c87e","src/bindings/ruby/templates/NamespaceLibraryTemplate.rb":"9b1454208bc83ef8f26aef33713d681e2284dbfea986ec0dd6c9b9c8b7d65e4a","src/bindings/ruby/templates/ObjectTemplate.rb":"c2d2fa2db62d48322b66b53888dcc6de2fc3e579a6b8d0a9f24029c18fffcbb5","src/bindings/ruby/templates/RecordTemplate.rb":"4aeff886928ca972e5dc9b799581b30c66a6f6dce446af3285dd3ed6b422dea9","src/bindings/ruby/templates/RustBufferBuilder.rb":"2ee5a4b97fe590de98ec2119b2dfe103bba75e15b5fb3c178fa51dfa662dfe2c","src/bindings/ruby/templates/RustBufferStream.rb":"ddfc38a6388bdddf8cc24bb6f1af948e4eef2d7ae2091a5130fee57cf53e5a7d","src/bindings/ruby/templates/RustBufferTemplate.rb":"8f37664f5436ba74ccdd801e16220f1b879d2fb56f51f5845b6047c92dc079f8","src/bindings/ruby/templates/TopLevelFunctionTemplate.rb":"88213e7e25bef664da939c04dd5621f438af735ffcb4d2d0c24a529538630069","src/bindings/ruby/templates/macros.rb":"d732a62291c78ccfbc3208227c1b57f6add723fad91b7e699d693e360840e1b0","src/bindings/ruby/templates/wrapper.rb":"542cdf46fb871e66089c9f008cf472cca411fe217d8c66a0a66776c35469aab5","src/bindings/swift/gen_swift/callback_interface.rs":"e331871ac6c9ac9b9533848fb6ddfcabc1e605970343cad307b6d86b72ebe96a","src/bindings/swift/gen_swift/compounds.rs":"f9e87b342f1f9a14295d87bad59d786d4c253a24d22900c2aba44816713718ae","src/bindings/swift/gen_swift/custom.rs":"45cdfa35ef7345dc353d0d2f3cebb17d726e90abdf5ef49422d6b2db65f8fd25","src/bindings/swift/gen_swift/enum_.rs":"018eea78ef85c9f8d715a5bc15c8273030d4f6ba297019949eb578c5cc6276fd","src/bindings/swift/gen_swift/error.rs":"bd95c3303e40f03a321f2cdc8e15a0251f4c7ddbc3c32c4c57eb9569db218488","src/bindings/swift/gen_swift/miscellany.rs":"66f16968f6cccc0b61c544e336a49b96218551731dcce566a176903c9afb3b57","src/bindings/swift/gen_swift/mod.rs":"1e8f98e05a5b03798c91ada854f6a4f2a0682c252143d63c16c6a06bd0419e4b","src/bindings/swift/gen_swift/object.rs":"072a44f484cc66694c57a9fa41ba50a531c9ce19738e11ce9df17cdfc007648f","src/bindings/swift/gen_swift/primitives.rs":"b37b8f3ad3aa7e769e6d465a31282e377f93cd69e4dcf39a56dc833f412ed412","src/bindings/swift/gen_swift/record.rs":"48296332960be3731b9139dc664d4b8a5d56d04cffa34dc995b62cf202b4dbfd","src/bindings/swift/mod.rs":"0ad4afd667ef17b3b577ded9a09cdaa5595afbdb24e7474c6b1e6a8e0a024593","src/bindings/swift/templates/BooleanHelper.swift":"f607928c4d598893421fe9c9f183bab2f23a877a07afeb123dbe90515249ec86","src/bindings/swift/templates/BridgingHeaderTemplate.h":"93a289e393ecdbe1bf986215c3b19d2aed7677d47f79b1833ce73cf6f8762e80","src/bindings/swift/templates/CallbackInterfaceRuntime.swift":"aac01eb4269151be9dde8c95ee8eba7e8d0841b3c2b1dbd88885f01ac64ee147","src/bindings/swift/templates/CallbackInterfaceTemplate.swift":"c9700f52e932556c59a9bfea68fc786746b7f321ff75c33d0a8c1565effaeef5","src/bindings/swift/templates/CustomType.swift":"fe6414f2ce3ea7b148742e2fecf2206d7e69935dd78d56e014aec70f4d6ad3ec","src/bindings/swift/templates/DurationHelper.swift":"bca4a6498b27fe0c877df3c7fbe148538eeda03e68d4e760a7c8a6a15f2067ff","src/bindings/swift/templates/EnumTemplate.swift":"e61bdf7949aa5a7b55a2c10c243e960f683c862e5977f06e7f5956646b4ccb49","src/bindings/swift/templates/ErrorTemplate.swift":"58fb5907d20b7a6db67b128e5f6350015278990fef5945be42477a5b5f82bb18","src/bindings/swift/templates/Float32Helper.swift":"6c1a4da059dd4c6c4392511c93fe9daf4ddeeab71e39afd122797b0e19254318","src/bindings/swift/templates/Float64Helper.swift":"f741568cdfb8e1421369a9a1dc845630a3a0e2dc2d6acf157afd80cd3ef5966f","src/bindings/swift/templates/Helpers.swift":"3cf3a5342a1ef0c7e078b0e58c32ae4437c4fb5dc41acbbd56b1128393c76602","src/bindings/swift/templates/Int16Helper.swift":"76eec2a54a65790c5959380cc9a7362b1e2e201632cccb789153c52e10c8dc4f","src/bindings/swift/templates/Int32Helper.swift":"5afc5e103bf637813fd4b77ab63e47ed38893525101a483218a339f222710061","src/bindings/swift/templates/Int64Helper.swift":"c1a6f6661ef1ad3bd00e8d0bf81adaa6539686eee2b481b046b76dbd87681adf","src/bindings/swift/templates/Int8Helper.swift":"bc46598c966e579cca22d336748c74cdce5674eaaaf75fc24e5fdaa36a43cf9c","src/bindings/swift/templates/MapTemplate.swift":"8b5a9cb41a1ad41b5566fbe3906a1449e5453289208a9fc6a611de1eb937142a","src/bindings/swift/templates/ModuleMapTemplate.modulemap":"99ad1e9bf550a21497296f9248ecd4385dd6d0b5892951d24cf990cdbf3eec2c","src/bindings/swift/templates/ObjectTemplate.swift":"98f744d7baf41e28d9184ae7e1aa9522b1bd951d507e0987879b11d7995782aa","src/bindings/swift/templates/OptionalTemplate.swift":"73f777d2df4fdf42daf0d6035436d168b0d5f0abc15153b97029bc305408f597","src/bindings/swift/templates/RecordTemplate.swift":"af0dc13b32d34254b4cfef3b74f52fd4611aa6c32e055e203414511fd3bbb00a","src/bindings/swift/templates/RustBufferTemplate.swift":"ed16f20cecd264f086c923cd92a5198f444aec99aad4d39e9012f09f530ca809","src/bindings/swift/templates/SequenceTemplate.swift":"977f1409909ff08018c0a80c1330737023b39a8f9fa9a13f5bf9ab4806cac199","src/bindings/swift/templates/StringHelper.swift":"b773c2b3a03f30338ff233881d1b0c0238831b812eff6eb9f0fafcb32ab0743a","src/bindings/swift/templates/TimestampHelper.swift":"6e22e370feae1199bff16bcc6f431decfb7700b02e6afdd84693a0c474eb045e","src/bindings/swift/templates/TopLevelFunctionTemplate.swift":"ca7fcbaa06ee31c7433fd6aa238b6c1135a843f469d9b4f37d4874d514fd80d0","src/bindings/swift/templates/Types.swift":"2f42430cb4ffba8e9b5084c0cf8790fb5bae151878134b8a21e745acf75d2b08","src/bindings/swift/templates/UInt16Helper.swift":"16adb3b50403dad114fad0b86bc220c5adc3bd987c57c290aee7c6407891dfbc","src/bindings/swift/templates/UInt32Helper.swift":"680ddd2815184f520723820f10698a089c222df0388bc0f7734c6d5234194aec","src/bindings/swift/templates/UInt64Helper.swift":"b752852162028a0c132f79f9005c47c263a4dab98833e86758cd7b467e305629","src/bindings/swift/templates/UInt8Helper.swift":"54f4821e704969eeb5c0e002b890d975a20eda3ddc3ee56169ee3c615dfa1079","src/bindings/swift/templates/macros.swift":"0744724c37419e894132b39aea4b8e1f473460583883fa37f38c787a7deea32c","src/bindings/swift/templates/wrapper.swift":"ca1af5fe47bca972c76fb8c9f52b18f727d4343204408de3dd0aae384f0a4171","src/interface/attributes.rs":"6c062b60deb332fbb76e70bc675e65c2bc3f2060fad7cec87492609fa9ce166c","src/interface/callbacks.rs":"e311fe8c80fae1d84c1e867a3c36a47a6d6a41847bb2d633edefac7c69402c84","src/interface/enum_.rs":"4ff34ff12c19be0bc9d807020fd4c8e20660c418741e68408671a18165e4b95b","src/interface/error.rs":"85a61e5bb38b369b60110928a78dc84ae77a06d0cbae4dfe9ff9dff2b8c27e5a","src/interface/ffi.rs":"22d24e4dda327fa78c7632a6e5bbe374ecac0165acc550007feb729d8f4d6adf","src/interface/function.rs":"19219c6c984d4117362ee5c269712ec2ad462476902442062ef2a3b0619b014c","src/interface/literal.rs":"d93d168176ba2824d26c490396f4baffc1d418c3c94e4a1ef0ceb3cfca16a239","src/interface/mod.rs":"88dd169859004da79bd1488e6432bc7dae8b6cba9238cab1d676e570dad31d62","src/interface/namespace.rs":"ab0f63241bb6a0a32f9fd2a1544468cb6daa1f91f6116b7246b52a4a94e4f461","src/interface/object.rs":"106cbf5ec2a684700dd99c9748ba161320abb2cecec3c5022d5dd1a9ec4f5b85","src/interface/record.rs":"5b9db093c0c90f5c757e09e6c9afee6b99e2e724c7b388924990b1a6f46357e9","src/interface/types/finder.rs":"a27f24e64b5bfc796378d1012b5e72001f0a442e8185fdc4430b106595d4b819","src/interface/types/mod.rs":"25a598fd206975cc1e62aaa269b461654c913ad6c0b6a2719c486acfcc68b45b","src/interface/types/resolver.rs":"7e7ce336ef77c0a6c23deea36856737a97cca9b1c3f5cd0d676fe7df6ade6480","src/lib.rs":"a41b43e3628bb6b3f725580eec255b409947945672887de87c21d5122775a245","src/macro_metadata/ci.rs":"0d6e53d2b5645dd3cc7d196bd3a32ee82c029e1adb9ae93708c27a3fa5c55a88","src/macro_metadata/extract.rs":"ec392692a4601343312f60937987fe460cfb40d2c63a6bb1531fe91903916f10","src/macro_metadata/mod.rs":"1668e6d947fd4a957f557410a8095649de6f8d7fd3eb6a403b8587280dca2d54","src/main.rs":"bbf8e9942d398387e7518533f9b9dc42bfa66156430a87a17605a80a356c0dea","src/scaffolding/mod.rs":"35ae72220843cf3cccefd96e190553e32a5f34ccc58d552fd9165faea12db260","src/scaffolding/templates/CallbackInterfaceTemplate.rs":"3c8caa2e148add8d80701894ee6904fc2d3c5c6424d6d414b36edb6f593b5023","src/scaffolding/templates/EnumTemplate.rs":"eb8802f04f1fd1c9451ad72c1195c136288fdb4e488922b24db75b2fdae65cd7","src/scaffolding/templates/ErrorTemplate.rs":"e7ca4538908a273dd7ba3834219b30fa0e537b2171144f06b6a96fbefb90cd1d","src/scaffolding/templates/ExternalTypesTemplate.rs":"8ecc805cf119abac8c5f60605f9183ee9ec8d37f9ec75bba5e18bb8b482a1abb","src/scaffolding/templates/ObjectTemplate.rs":"34de640428486e17a61ded4f42ce13d8eac3e66cc9f60196ce2575cdc0bd8df6","src/scaffolding/templates/RecordTemplate.rs":"e8d5af954f46f023a243721d6fc70aa176c3a4c0a9dd340048bfe46f3eeed783","src/scaffolding/templates/ReexportUniFFIScaffolding.rs":"559a17c8e39c473ff1effe9651f05b83d443ecd8abed13e03f2b63872d7e1593","src/scaffolding/templates/RustBuffer.rs":"ccf7521012d93c41265375c6d2e80ce861ec93b41383da83c37718386dd726f6","src/scaffolding/templates/TopLevelFunctionTemplate.rs":"35eaefb0862f25ff683d58fb0be6ad5f74bbe2fc85047273200c3a5f4c728434","src/scaffolding/templates/macros.rs":"a41c9690d411074c59fc4609f897431669b9d939625a08f5304a71a88901ba7c","src/scaffolding/templates/scaffolding_template.rs":"3589f8e8e1f9b194ff4a6245665d3a421c771dec3cc947c4264bfcd34573550e"},"package":"5d46080a4840abccf7c0cce21931dae53215cbd7dd969b5e63c486235ce91a2a"}
  336. \ No newline at end of file
  337. diff --git a/third_party/rust/uniffi_bindgen/Cargo.lock b/third_party/rust/uniffi_bindgen/Cargo.lock
  338. --- a/third_party/rust/uniffi_bindgen/Cargo.lock
  339. +++ b/third_party/rust/uniffi_bindgen/Cargo.lock
  340. @@ -1,17 +1,17 @@
  341. # This file is automatically @generated by Cargo.
  342. # It is not intended for manual editing.
  343. version = 3
  344. [[package]]
  345. name = "anyhow"
  346. -version = "1.0.65"
  347. +version = "1.0.66"
  348. source = "registry+https://github.com/rust-lang/crates.io-index"
  349. -checksum = "98161a4e3e2184da77bb14f02184cdd111e83bbbcc9979dfee3c44b9a85f5602"
  350. +checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6"
  351. [[package]]
  352. name = "askama"
  353. version = "0.11.1"
  354. source = "registry+https://github.com/rust-lang/crates.io-index"
  355. checksum = "fb98f10f371286b177db5eeb9a6e5396609555686a35e1d4f7b9a9c6d8af0139"
  356. dependencies = [
  357. "askama_derive",
  358. @@ -94,19 +94,19 @@ checksum = "88ad0e1e3e88dd237a156ab9f571
  359. [[package]]
  360. name = "cfg-if"
  361. version = "1.0.0"
  362. source = "registry+https://github.com/rust-lang/crates.io-index"
  363. checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
  364. [[package]]
  365. name = "clap"
  366. -version = "3.2.22"
  367. +version = "3.2.23"
  368. source = "registry+https://github.com/rust-lang/crates.io-index"
  369. -checksum = "86447ad904c7fb335a790c9d7fe3d0d971dc523b8ccd1561a520de9a85302750"
  370. +checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5"
  371. dependencies = [
  372. "atty",
  373. "bitflags",
  374. "clap_derive",
  375. "clap_lex",
  376. "indexmap",
  377. "once_cell",
  378. "strsim",
  379. @@ -133,19 +133,19 @@ version = "0.2.4"
  380. source = "registry+https://github.com/rust-lang/crates.io-index"
  381. checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
  382. dependencies = [
  383. "os_str_bytes",
  384. ]
  385. [[package]]
  386. name = "fs-err"
  387. -version = "2.8.1"
  388. +version = "2.9.0"
  389. source = "registry+https://github.com/rust-lang/crates.io-index"
  390. -checksum = "64db3e262960f0662f43a6366788d5f10f7f244b8f7d7d987f560baf5ded5c50"
  391. +checksum = "0845fa252299212f0389d64ba26f34fa32cfe41588355f21ed507c59a0f64541"
  392. [[package]]
  393. name = "goblin"
  394. version = "0.5.4"
  395. source = "registry+https://github.com/rust-lang/crates.io-index"
  396. checksum = "a7666983ed0dd8d21a6f6576ee00053ca0926fb281a5522577a4dbd0f1b54143"
  397. dependencies = [
  398. "log",
  399. @@ -171,35 +171,35 @@ version = "0.1.19"
  400. source = "registry+https://github.com/rust-lang/crates.io-index"
  401. checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
  402. dependencies = [
  403. "libc",
  404. ]
  405. [[package]]
  406. name = "indexmap"
  407. -version = "1.9.1"
  408. +version = "1.9.2"
  409. source = "registry+https://github.com/rust-lang/crates.io-index"
  410. -checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e"
  411. +checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
  412. dependencies = [
  413. "autocfg",
  414. "hashbrown",
  415. ]
  416. [[package]]
  417. name = "itoa"
  418. version = "1.0.4"
  419. source = "registry+https://github.com/rust-lang/crates.io-index"
  420. checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc"
  421. [[package]]
  422. name = "libc"
  423. -version = "0.2.135"
  424. +version = "0.2.138"
  425. source = "registry+https://github.com/rust-lang/crates.io-index"
  426. -checksum = "68783febc7782c6c5cb401fbda4de5a9898be1762314da0bb2c10ced61f18b0c"
  427. +checksum = "db6d7e329c562c5dfab7a46a2afabc8b987ab9a4834c9d1ca04dc54c1546cef8"
  428. [[package]]
  429. name = "log"
  430. version = "0.4.17"
  431. source = "registry+https://github.com/rust-lang/crates.io-index"
  432. checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
  433. dependencies = [
  434. "cfg-if",
  435. @@ -240,31 +240,31 @@ source = "registry+https://github.com/ru
  436. checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36"
  437. dependencies = [
  438. "memchr",
  439. "minimal-lexical",
  440. ]
  441. [[package]]
  442. name = "once_cell"
  443. -version = "1.15.0"
  444. +version = "1.16.0"
  445. source = "registry+https://github.com/rust-lang/crates.io-index"
  446. -checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1"
  447. +checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860"
  448. [[package]]
  449. name = "os_str_bytes"
  450. -version = "6.3.0"
  451. +version = "6.4.1"
  452. source = "registry+https://github.com/rust-lang/crates.io-index"
  453. -checksum = "9ff7415e9ae3fff1225851df9e0d9e4e5479f947619774677a63572e55e80eff"
  454. +checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee"
  455. [[package]]
  456. name = "paste"
  457. -version = "1.0.9"
  458. +version = "1.0.10"
  459. source = "registry+https://github.com/rust-lang/crates.io-index"
  460. -checksum = "b1de2e551fb905ac83f73f7aedf2f0cb4a0da7e35efa24a202a936269f1f18e1"
  461. +checksum = "cf1c2c742266c2f1041c914ba65355a83ae8747b05f208319784083583494b4b"
  462. [[package]]
  463. name = "plain"
  464. version = "0.2.3"
  465. source = "registry+https://github.com/rust-lang/crates.io-index"
  466. checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6"
  467. [[package]]
  468. @@ -288,19 +288,19 @@ checksum = "a1be40180e52ecc98ad80b184934
  469. dependencies = [
  470. "proc-macro2",
  471. "quote",
  472. "version_check",
  473. ]
  474. [[package]]
  475. name = "proc-macro2"
  476. -version = "1.0.46"
  477. +version = "1.0.47"
  478. source = "registry+https://github.com/rust-lang/crates.io-index"
  479. -checksum = "94e2ef8dbfc347b10c094890f778ee2e36ca9bb4262e86dc99cd217e35f3470b"
  480. +checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725"
  481. dependencies = [
  482. "unicode-ident",
  483. ]
  484. [[package]]
  485. name = "quote"
  486. version = "1.0.21"
  487. source = "registry+https://github.com/rust-lang/crates.io-index"
  488. @@ -332,56 +332,62 @@ checksum = "bdbda6ac5cd1321e724fa9cee216
  489. dependencies = [
  490. "proc-macro2",
  491. "quote",
  492. "syn",
  493. ]
  494. [[package]]
  495. name = "serde"
  496. -version = "1.0.145"
  497. +version = "1.0.150"
  498. source = "registry+https://github.com/rust-lang/crates.io-index"
  499. -checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b"
  500. +checksum = "e326c9ec8042f1b5da33252c8a37e9ffbd2c9bef0155215b6e6c80c790e05f91"
  501. dependencies = [
  502. "serde_derive",
  503. ]
  504. [[package]]
  505. name = "serde_derive"
  506. -version = "1.0.145"
  507. +version = "1.0.150"
  508. source = "registry+https://github.com/rust-lang/crates.io-index"
  509. -checksum = "81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c"
  510. +checksum = "42a3df25b0713732468deadad63ab9da1f1fd75a48a15024b50363f128db627e"
  511. dependencies = [
  512. "proc-macro2",
  513. "quote",
  514. "syn",
  515. ]
  516. [[package]]
  517. name = "serde_json"
  518. -version = "1.0.86"
  519. +version = "1.0.89"
  520. source = "registry+https://github.com/rust-lang/crates.io-index"
  521. -checksum = "41feea4228a6f1cd09ec7a3593a682276702cd67b5273544757dae23c096f074"
  522. +checksum = "020ff22c755c2ed3f8cf162dbb41a7268d934702f3ed3631656ea597e08fc3db"
  523. dependencies = [
  524. "itoa",
  525. "ryu",
  526. "serde",
  527. ]
  528. [[package]]
  529. +name = "siphasher"
  530. +version = "0.3.10"
  531. +source = "registry+https://github.com/rust-lang/crates.io-index"
  532. +checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
  533. +
  534. +[[package]]
  535. name = "strsim"
  536. version = "0.10.0"
  537. source = "registry+https://github.com/rust-lang/crates.io-index"
  538. checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
  539. [[package]]
  540. name = "syn"
  541. -version = "1.0.102"
  542. +version = "1.0.105"
  543. source = "registry+https://github.com/rust-lang/crates.io-index"
  544. -checksum = "3fcd952facd492f9be3ef0d0b7032a6e442ee9b361d4acc2b1d0c4aaa5f613a1"
  545. +checksum = "60b9b43d45702de4c839cb9b51d9f529c5dd26a4aff255b42b1ebc03e88ee908"
  546. dependencies = [
  547. "proc-macro2",
  548. "quote",
  549. "unicode-ident",
  550. ]
  551. [[package]]
  552. name = "termcolor"
  553. @@ -389,25 +395,25 @@ version = "1.1.3"
  554. source = "registry+https://github.com/rust-lang/crates.io-index"
  555. checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
  556. dependencies = [
  557. "winapi-util",
  558. ]
  559. [[package]]
  560. name = "textwrap"
  561. -version = "0.15.1"
  562. +version = "0.16.0"
  563. source = "registry+https://github.com/rust-lang/crates.io-index"
  564. -checksum = "949517c0cf1bf4ee812e2e07e08ab448e3ae0d23472aee8a06c985f0c8815b16"
  565. +checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
  566. [[package]]
  567. name = "toml"
  568. -version = "0.5.9"
  569. +version = "0.5.10"
  570. source = "registry+https://github.com/rust-lang/crates.io-index"
  571. -checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7"
  572. +checksum = "1333c76748e868a4d9d1017b5ab53171dfd095f70c712fdb4653a406547f598f"
  573. dependencies = [
  574. "serde",
  575. ]
  576. [[package]]
  577. name = "unicase"
  578. version = "2.6.0"
  579. source = "registry+https://github.com/rust-lang/crates.io-index"
  580. @@ -419,17 +425,17 @@ dependencies = [
  581. [[package]]
  582. name = "unicode-ident"
  583. version = "1.0.5"
  584. source = "registry+https://github.com/rust-lang/crates.io-index"
  585. checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3"
  586. [[package]]
  587. name = "uniffi_bindgen"
  588. -version = "0.21.0"
  589. +version = "0.21.1"
  590. dependencies = [
  591. "anyhow",
  592. "askama",
  593. "bincode",
  594. "camino",
  595. "clap",
  596. "fs-err",
  597. "goblin",
  598. @@ -439,22 +445,34 @@ dependencies = [
  599. "serde",
  600. "serde_json",
  601. "toml",
  602. "uniffi_meta",
  603. "weedle2",
  604. ]
  605. [[package]]
  606. +name = "uniffi_checksum_derive"
  607. +version = "0.21.1"
  608. +source = "registry+https://github.com/rust-lang/crates.io-index"
  609. +checksum = "78b6e16d46caf942016997af8bbdf4b163bf8ae3deb0b667d9643de7b7ffd4c9"
  610. +dependencies = [
  611. + "quote",
  612. + "syn",
  613. +]
  614. +
  615. +[[package]]
  616. name = "uniffi_meta"
  617. -version = "0.21.0"
  618. +version = "0.21.1"
  619. source = "registry+https://github.com/rust-lang/crates.io-index"
  620. -checksum = "cd9417cc653937681436b93838d8c5f97a5b8c58697813982ee8810bd1dc3b57"
  621. +checksum = "729835442da829c9b6f7c111c76cf87b2498e129101203bec94f0c39a3296a38"
  622. dependencies = [
  623. "serde",
  624. + "siphasher",
  625. + "uniffi_checksum_derive",
  626. ]
  627. [[package]]
  628. name = "version_check"
  629. version = "0.9.4"
  630. source = "registry+https://github.com/rust-lang/crates.io-index"
  631. checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
  632. diff --git a/third_party/rust/uniffi_bindgen/Cargo.toml b/third_party/rust/uniffi_bindgen/Cargo.toml
  633. --- a/third_party/rust/uniffi_bindgen/Cargo.toml
  634. +++ b/third_party/rust/uniffi_bindgen/Cargo.toml
  635. @@ -7,28 +7,27 @@
  636. #
  637. # If you are reading this file be aware that the original Cargo.toml
  638. # will likely look very different (and much more reasonable).
  639. # See Cargo.toml.orig for the original contents.
  640. [package]
  641. edition = "2021"
  642. name = "uniffi_bindgen"
  643. -version = "0.21.0"
  644. +version = "0.21.1"
  645. authors = ["Firefox Sync Team <sync-team@mozilla.com>"]
  646. description = "a multi-language bindings generator for rust (codegen and cli tooling)"
  647. homepage = "https://mozilla.github.io/uniffi-rs"
  648. documentation = "https://mozilla.github.io/uniffi-rs"
  649. keywords = [
  650. "ffi",
  651. "bindgen",
  652. ]
  653. license = "MPL-2.0"
  654. repository = "https://github.com/mozilla/uniffi-rs"
  655. -resolver = "2"
  656. [[bin]]
  657. name = "uniffi-bindgen"
  658. path = "src/main.rs"
  659. [dependencies.anyhow]
  660. version = "1"
  661. @@ -71,12 +70,12 @@ version = "1"
  662. [dependencies.serde_json]
  663. version = "1.0.80"
  664. [dependencies.toml]
  665. version = "0.5"
  666. [dependencies.uniffi_meta]
  667. -version = "=0.21.0"
  668. +version = "=0.21.1"
  669. [dependencies.weedle2]
  670. version = "4.0.0"
  671. diff --git a/third_party/rust/uniffi_bindgen/src/interface/attributes.rs b/third_party/rust/uniffi_bindgen/src/interface/attributes.rs
  672. --- a/third_party/rust/uniffi_bindgen/src/interface/attributes.rs
  673. +++ b/third_party/rust/uniffi_bindgen/src/interface/attributes.rs
  674. @@ -10,23 +10,24 @@
  675. //! support. You can also use the [`parse_attributes`] function to parse an
  676. //! `ExtendedAttributeList` into a vec of same.
  677. //!
  678. //! We only support a small number of attributes, so it's manageable to have them
  679. //! all handled by a single abstraction. This might need to be refactored in future
  680. //! if we grow significantly more complicated attribute handling.
  681. use anyhow::{bail, Result};
  682. +use uniffi_meta::Checksum;
  683. /// Represents an attribute parsed from UDL, like `[ByRef]` or `[Throws]`.
  684. ///
  685. /// This is a convenience enum for parsing UDL attributes and erroring out if we encounter
  686. /// any unsupported ones. These don't convert directly into parts of a `ComponentInterface`, but
  687. /// may influence the properties of things like functions and arguments.
  688. -#[derive(Debug, Clone, Hash)]
  689. +#[derive(Debug, Clone, Checksum)]
  690. pub(super) enum Attribute {
  691. ByRef,
  692. Enum,
  693. Error,
  694. Name(String),
  695. SelfType(SelfType),
  696. Threadsafe, // N.B. the `[Threadsafe]` attribute is deprecated and will be removed
  697. Throws(String),
  698. @@ -114,17 +115,17 @@ where
  699. validator(attr)?;
  700. }
  701. Ok(attrs)
  702. }
  703. /// Attributes that can be attached to an `enum` definition in the UDL.
  704. /// There's only one case here: using `[Error]` to mark an enum as an error class.
  705. -#[derive(Debug, Clone, Hash, Default)]
  706. +#[derive(Debug, Clone, Checksum, Default)]
  707. pub(super) struct EnumAttributes(Vec<Attribute>);
  708. impl EnumAttributes {
  709. pub fn contains_error_attr(&self) -> bool {
  710. self.0.iter().any(|attr| attr.is_error())
  711. }
  712. }
  713. @@ -150,17 +151,17 @@ impl<T: TryInto<EnumAttributes, Error =
  714. }
  715. }
  716. }
  717. /// Represents UDL attributes that might appear on a function.
  718. ///
  719. /// This supports the `[Throws=ErrorName]` attribute for functions that
  720. /// can produce an error.
  721. -#[derive(Debug, Clone, Hash, Default)]
  722. +#[derive(Debug, Clone, Checksum, Default)]
  723. pub(super) struct FunctionAttributes(Vec<Attribute>);
  724. impl FunctionAttributes {
  725. pub(super) fn get_throws_err(&self) -> Option<&str> {
  726. self.0.iter().find_map(|attr| match attr {
  727. // This will hopefully return a helpful compilation error
  728. // if the error is not defined.
  729. Attribute::Throws(inner) => Some(inner.as_ref()),
  730. @@ -193,17 +194,17 @@ impl<T: TryInto<FunctionAttributes, Erro
  731. }
  732. }
  733. }
  734. /// Represents UDL attributes that might appear on a function argument.
  735. ///
  736. /// This supports the `[ByRef]` attribute for arguments that should be passed
  737. /// by reference in the generated Rust scaffolding.
  738. -#[derive(Debug, Clone, Hash, Default)]
  739. +#[derive(Debug, Clone, Checksum, Default)]
  740. pub(super) struct ArgumentAttributes(Vec<Attribute>);
  741. impl ArgumentAttributes {
  742. pub fn by_ref(&self) -> bool {
  743. self.0.iter().any(|attr| matches!(attr, Attribute::ByRef))
  744. }
  745. }
  746. @@ -228,17 +229,17 @@ impl<T: TryInto<ArgumentAttributes, Erro
  747. match value {
  748. None => Ok(Default::default()),
  749. Some(v) => v.try_into(),
  750. }
  751. }
  752. }
  753. /// Represents UDL attributes that might appear on an `interface` definition.
  754. -#[derive(Debug, Clone, Hash, Default)]
  755. +#[derive(Debug, Clone, Checksum, Default)]
  756. pub(super) struct InterfaceAttributes(Vec<Attribute>);
  757. impl InterfaceAttributes {
  758. pub fn contains_enum_attr(&self) -> bool {
  759. self.0.iter().any(|attr| attr.is_enum())
  760. }
  761. pub fn contains_error_attr(&self) -> bool {
  762. @@ -282,17 +283,17 @@ impl<T: TryInto<InterfaceAttributes, Err
  763. }
  764. }
  765. }
  766. /// Represents UDL attributes that might appear on a constructor.
  767. ///
  768. /// This supports the `[Throws=ErrorName]` attribute for constructors that can produce
  769. /// an error, and the `[Name=MethodName]` for non-default constructors.
  770. -#[derive(Debug, Clone, Hash, Default)]
  771. +#[derive(Debug, Clone, Checksum, Default)]
  772. pub(super) struct ConstructorAttributes(Vec<Attribute>);
  773. impl ConstructorAttributes {
  774. pub(super) fn get_throws_err(&self) -> Option<&str> {
  775. self.0.iter().find_map(|attr| match attr {
  776. // This will hopefully return a helpful compilation error
  777. // if the error is not defined.
  778. Attribute::Throws(inner) => Some(inner.as_ref()),
  779. @@ -321,17 +322,17 @@ impl TryFrom<&weedle::attribute::Extende
  780. Ok(Self(attrs))
  781. }
  782. }
  783. /// Represents UDL attributes that might appear on a method.
  784. ///
  785. /// This supports the `[Throws=ErrorName]` attribute for methods that can produce
  786. /// an error, and the `[Self=ByArc]` attribute for methods that take `Arc<Self>` as receiver.
  787. -#[derive(Debug, Clone, Hash, Default)]
  788. +#[derive(Debug, Clone, Checksum, Default)]
  789. pub(super) struct MethodAttributes(Vec<Attribute>);
  790. impl MethodAttributes {
  791. pub(super) fn get_throws_err(&self) -> Option<&str> {
  792. self.0.iter().find_map(|attr| match attr {
  793. // This will hopefully return a helpful compilation error
  794. // if the error is not defined.
  795. Attribute::Throws(inner) => Some(inner.as_ref()),
  796. @@ -370,17 +371,17 @@ impl<T: TryInto<MethodAttributes, Error
  797. }
  798. }
  799. /// Represents the different possible types of method call receiver.
  800. ///
  801. /// Actually we only support one of these right now, `[Self=ByArc]`.
  802. /// We might add more in future, e.g. a `[Self=ByRef]` if there are cases
  803. /// where we need to force the receiver to be taken by reference.
  804. -#[derive(Debug, Clone, Hash)]
  805. +#[derive(Debug, Clone, Checksum)]
  806. pub(super) enum SelfType {
  807. ByArc, // Method receiver is `Arc<Self>`.
  808. }
  809. impl TryFrom<&weedle::attribute::IdentifierOrString<'_>> for SelfType {
  810. type Error = anyhow::Error;
  811. fn try_from(nm: &weedle::attribute::IdentifierOrString<'_>) -> Result<Self, Self::Error> {
  812. Ok(match nm {
  813. @@ -393,17 +394,17 @@ impl TryFrom<&weedle::attribute::Identif
  814. }
  815. })
  816. }
  817. }
  818. /// Represents UDL attributes that might appear on a typedef
  819. ///
  820. /// This supports the `[External="crate_name"]` and `[Custom]` attributes for types.
  821. -#[derive(Debug, Clone, Hash, Default)]
  822. +#[derive(Debug, Clone, Checksum, Default)]
  823. pub(super) struct TypedefAttributes(Vec<Attribute>);
  824. impl TypedefAttributes {
  825. pub(super) fn get_crate_name(&self) -> String {
  826. self.0
  827. .iter()
  828. .find_map(|attr| match attr {
  829. Attribute::External(crate_name) => Some(crate_name.clone()),
  830. diff --git a/third_party/rust/uniffi_bindgen/src/interface/callbacks.rs b/third_party/rust/uniffi_bindgen/src/interface/callbacks.rs
  831. --- a/third_party/rust/uniffi_bindgen/src/interface/callbacks.rs
  832. +++ b/third_party/rust/uniffi_bindgen/src/interface/callbacks.rs
  833. @@ -28,29 +28,35 @@
  834. //! # };
  835. //! # "##)?;
  836. //! let callback = ci.get_callback_interface_definition("Example").unwrap();
  837. //! assert_eq!(callback.name(), "Example");
  838. //! assert_eq!(callback.methods()[0].name(), "hello");
  839. //! # Ok::<(), anyhow::Error>(())
  840. //! ```
  841. -use std::hash::{Hash, Hasher};
  842. -
  843. use anyhow::{bail, Result};
  844. +use uniffi_meta::Checksum;
  845. use super::ffi::{FFIArgument, FFIFunction, FFIType};
  846. use super::object::Method;
  847. use super::types::{Type, TypeIterator};
  848. use super::{APIConverter, ComponentInterface};
  849. -#[derive(Debug, Clone)]
  850. +#[derive(Debug, Clone, Checksum)]
  851. pub struct CallbackInterface {
  852. pub(super) name: String,
  853. pub(super) methods: Vec<Method>,
  854. + // We don't include the FFIFunc in the hash calculation, because:
  855. + // - it is entirely determined by the other fields,
  856. + // so excluding it is safe.
  857. + // - its `name` property includes a checksum derived from the very
  858. + // hash value we're trying to calculate here, so excluding it
  859. + // avoids a weird circular depenendency in the calculation.
  860. + #[checksum_ignore]
  861. pub(super) ffi_init_callback: FFIFunction,
  862. }
  863. impl CallbackInterface {
  864. fn new(name: String) -> CallbackInterface {
  865. CallbackInterface {
  866. name,
  867. methods: Default::default(),
  868. @@ -83,29 +89,16 @@ impl CallbackInterface {
  869. self.ffi_init_callback.return_type = None;
  870. }
  871. pub fn iter_types(&self) -> TypeIterator<'_> {
  872. Box::new(self.methods.iter().flat_map(Method::iter_types))
  873. }
  874. }
  875. -impl Hash for CallbackInterface {
  876. - fn hash<H: Hasher>(&self, state: &mut H) {
  877. - // We don't include the FFIFunc in the hash calculation, because:
  878. - // - it is entirely determined by the other fields,
  879. - // so excluding it is safe.
  880. - // - its `name` property includes a checksum derived from the very
  881. - // hash value we're trying to calculate here, so excluding it
  882. - // avoids a weird circular depenendency in the calculation.
  883. - self.name.hash(state);
  884. - self.methods.hash(state);
  885. - }
  886. -}
  887. -
  888. impl APIConverter<CallbackInterface> for weedle::CallbackInterfaceDefinition<'_> {
  889. fn convert(&self, ci: &mut ComponentInterface) -> Result<CallbackInterface> {
  890. if self.attributes.is_some() {
  891. bail!("callback interface attributes are not supported yet");
  892. }
  893. if self.inheritance.is_some() {
  894. bail!("callback interface inheritence is not supported");
  895. }
  896. diff --git a/third_party/rust/uniffi_bindgen/src/interface/enum_.rs b/third_party/rust/uniffi_bindgen/src/interface/enum_.rs
  897. --- a/third_party/rust/uniffi_bindgen/src/interface/enum_.rs
  898. +++ b/third_party/rust/uniffi_bindgen/src/interface/enum_.rs
  899. @@ -72,27 +72,28 @@
  900. //! assert_eq!(e.variants()[0].fields().len(), 0);
  901. //! assert_eq!(e.variants()[1].name(), "One");
  902. //! assert_eq!(e.variants()[1].fields().len(), 1);
  903. //! assert_eq!(e.variants()[1].fields()[0].name(), "first");
  904. //! # Ok::<(), anyhow::Error>(())
  905. //! ```
  906. use anyhow::{bail, Result};
  907. +use uniffi_meta::Checksum;
  908. use super::record::Field;
  909. use super::types::{Type, TypeIterator};
  910. use super::{APIConverter, ComponentInterface};
  911. /// Represents an enum with named variants, each of which may have named
  912. /// and typed fields.
  913. ///
  914. /// Enums are passed across the FFI by serializing to a bytebuffer, with a
  915. /// i32 indicating the variant followed by the serialization of each field.
  916. -#[derive(Debug, Clone, Hash)]
  917. +#[derive(Debug, Clone, Checksum)]
  918. pub struct Enum {
  919. pub(super) name: String,
  920. pub(super) variants: Vec<Variant>,
  921. // "Flat" enums do not have, and will never have, variants with associated data.
  922. pub(super) flat: bool,
  923. }
  924. impl Enum {
  925. @@ -169,17 +170,17 @@ impl APIConverter<Enum> for weedle::Inte
  926. flat: false,
  927. })
  928. }
  929. }
  930. /// Represents an individual variant in an Enum.
  931. ///
  932. /// Each variant has a name and zero or more fields.
  933. -#[derive(Debug, Clone, Default, Hash)]
  934. +#[derive(Debug, Clone, Default, Checksum)]
  935. pub struct Variant {
  936. pub(super) name: String,
  937. pub(super) fields: Vec<Field>,
  938. }
  939. impl Variant {
  940. pub fn name(&self) -> &str {
  941. &self.name
  942. diff --git a/third_party/rust/uniffi_bindgen/src/interface/error.rs b/third_party/rust/uniffi_bindgen/src/interface/error.rs
  943. --- a/third_party/rust/uniffi_bindgen/src/interface/error.rs
  944. +++ b/third_party/rust/uniffi_bindgen/src/interface/error.rs
  945. @@ -78,28 +78,29 @@
  946. //! assert_eq!(err.variants()[2].fields().len(), 2);
  947. //! assert_eq!(err.variants()[2].fields()[0].name(), "x");
  948. //! assert_eq!(err.variants()[2].fields()[1].name(), "y");
  949. //! assert_eq!(err.is_flat(), false);
  950. //! # Ok::<(), anyhow::Error>(())
  951. //! ```
  952. use anyhow::Result;
  953. +use uniffi_meta::Checksum;
  954. use super::enum_::{Enum, Variant};
  955. use super::types::{Type, TypeIterator};
  956. use super::{APIConverter, ComponentInterface};
  957. /// Represents an Error that might be thrown by functions/methods in the component interface.
  958. ///
  959. /// Errors are represented in the UDL as enums with the special `[Error]` attribute, but
  960. /// they're handled in the FFI very differently. We create them in `uniffi::call_with_result()` if
  961. /// the wrapped function returns an `Err` value
  962. /// struct and assign an integer error code to each variant.
  963. -#[derive(Debug, Clone, Hash)]
  964. +#[derive(Debug, Clone, Checksum)]
  965. pub struct Error {
  966. pub name: String,
  967. enum_: Enum,
  968. }
  969. impl Error {
  970. pub fn from_enum(enum_: Enum) -> Self {
  971. Self {
  972. diff --git a/third_party/rust/uniffi_bindgen/src/interface/function.rs b/third_party/rust/uniffi_bindgen/src/interface/function.rs
  973. --- a/third_party/rust/uniffi_bindgen/src/interface/function.rs
  974. +++ b/third_party/rust/uniffi_bindgen/src/interface/function.rs
  975. @@ -27,40 +27,47 @@
  976. //! # "##)?;
  977. //! let func = ci.get_function_definition("hello").unwrap();
  978. //! assert_eq!(func.name(), "hello");
  979. //! assert!(matches!(func.return_type(), Some(Type::String)));
  980. //! assert_eq!(func.arguments().len(), 0);
  981. //! # Ok::<(), anyhow::Error>(())
  982. //! ```
  983. use std::convert::TryFrom;
  984. -use std::hash::{Hash, Hasher};
  985. use anyhow::{bail, Result};
  986. +use uniffi_meta::Checksum;
  987. use super::ffi::{FFIArgument, FFIFunction};
  988. use super::literal::{convert_default_value, Literal};
  989. use super::types::{Type, TypeIterator};
  990. use super::{
  991. attributes::{ArgumentAttributes, FunctionAttributes},
  992. convert_type,
  993. };
  994. use super::{APIConverter, ComponentInterface};
  995. /// Represents a standalone function.
  996. ///
  997. /// Each `Function` corresponds to a standalone function in the rust module,
  998. /// and has a corresponding standalone function in the foreign language bindings.
  999. ///
  1000. /// In the FFI, this will be a standalone function with appropriately lowered types.
  1001. -#[derive(Debug, Clone)]
  1002. +#[derive(Debug, Clone, Checksum)]
  1003. pub struct Function {
  1004. pub(super) name: String,
  1005. pub(super) arguments: Vec<Argument>,
  1006. pub(super) return_type: Option<Type>,
  1007. + // We don't include the FFIFunc in the hash calculation, because:
  1008. + // - it is entirely determined by the other fields,
  1009. + // so excluding it is safe.
  1010. + // - its `name` property includes a checksum derived from the very
  1011. + // hash value we're trying to calculate here, so excluding it
  1012. + // avoids a weird circular depenendency in the calculation.
  1013. + #[checksum_ignore]
  1014. pub(super) ffi_func: FFIFunction,
  1015. pub(super) attributes: FunctionAttributes,
  1016. }
  1017. impl Function {
  1018. pub fn name(&self) -> &str {
  1019. &self.name
  1020. }
  1021. @@ -137,31 +144,16 @@ impl From<uniffi_meta::FnMetadata> for F
  1022. arguments,
  1023. return_type,
  1024. ffi_func,
  1025. attributes: Default::default(),
  1026. }
  1027. }
  1028. }
  1029. -impl Hash for Function {
  1030. - fn hash<H: Hasher>(&self, state: &mut H) {
  1031. - // We don't include the FFIFunc in the hash calculation, because:
  1032. - // - it is entirely determined by the other fields,
  1033. - // so excluding it is safe.
  1034. - // - its `name` property includes a checksum derived from the very
  1035. - // hash value we're trying to calculate here, so excluding it
  1036. - // avoids a weird circular depenendency in the calculation.
  1037. - self.name.hash(state);
  1038. - self.arguments.hash(state);
  1039. - self.return_type.hash(state);
  1040. - self.attributes.hash(state);
  1041. - }
  1042. -}
  1043. -
  1044. impl APIConverter<Function> for weedle::namespace::NamespaceMember<'_> {
  1045. fn convert(&self, ci: &mut ComponentInterface) -> Result<Function> {
  1046. match self {
  1047. weedle::namespace::NamespaceMember::Operation(f) => f.convert(ci),
  1048. _ => bail!("no support for namespace member type {:?} yet", self),
  1049. }
  1050. }
  1051. }
  1052. @@ -180,17 +172,17 @@ impl APIConverter<Function> for weedle::
  1053. attributes: FunctionAttributes::try_from(self.attributes.as_ref())?,
  1054. })
  1055. }
  1056. }
  1057. /// Represents an argument to a function/constructor/method call.
  1058. ///
  1059. /// Each argument has a name and a type, along with some optional metadata.
  1060. -#[derive(Debug, Clone, Hash)]
  1061. +#[derive(Debug, Clone, Checksum)]
  1062. pub struct Argument {
  1063. pub(super) name: String,
  1064. pub(super) type_: Type,
  1065. pub(super) by_ref: bool,
  1066. pub(super) optional: bool,
  1067. pub(super) default: Option<Literal>,
  1068. }
  1069. diff --git a/third_party/rust/uniffi_bindgen/src/interface/literal.rs b/third_party/rust/uniffi_bindgen/src/interface/literal.rs
  1070. --- a/third_party/rust/uniffi_bindgen/src/interface/literal.rs
  1071. +++ b/third_party/rust/uniffi_bindgen/src/interface/literal.rs
  1072. @@ -3,22 +3,23 @@
  1073. * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
  1074. //! # Support for literal values.
  1075. //!
  1076. //! This module provides support for interpreting literal values from the UDL,
  1077. //! which appear in places such as default arguments.
  1078. use anyhow::{bail, Result};
  1079. +use uniffi_meta::Checksum;
  1080. use super::types::Type;
  1081. // Represents a literal value.
  1082. // Used for e.g. default argument values.
  1083. -#[derive(Debug, Clone, Hash)]
  1084. +#[derive(Debug, Clone, Checksum)]
  1085. pub enum Literal {
  1086. Boolean(bool),
  1087. String(String),
  1088. // Integers are represented as the widest representation we can.
  1089. // Number formatting vary with language and radix, so we avoid a lot of parsing and
  1090. // formatting duplication by using only signed and unsigned variants.
  1091. UInt(u64, Radix, Type),
  1092. Int(i64, Radix, Type),
  1093. @@ -30,17 +31,17 @@ pub enum Literal {
  1094. Enum(String, Type),
  1095. EmptySequence,
  1096. EmptyMap,
  1097. Null,
  1098. }
  1099. // Represent the radix of integer literal values.
  1100. // We preserve the radix into the generated bindings for readability reasons.
  1101. -#[derive(Debug, Clone, Copy, Hash)]
  1102. +#[derive(Debug, Clone, Copy, Checksum)]
  1103. pub enum Radix {
  1104. Decimal = 10,
  1105. Octal = 8,
  1106. Hexadecimal = 16,
  1107. }
  1108. pub(super) fn convert_default_value(
  1109. default_value: &weedle::literal::DefaultValue<'_>,
  1110. diff --git a/third_party/rust/uniffi_bindgen/src/interface/mod.rs b/third_party/rust/uniffi_bindgen/src/interface/mod.rs
  1111. --- a/third_party/rust/uniffi_bindgen/src/interface/mod.rs
  1112. +++ b/third_party/rust/uniffi_bindgen/src/interface/mod.rs
  1113. @@ -39,22 +39,17 @@
  1114. //! guarantee that there's not some edge-case where it produces valid-but-incorrect code.
  1115. //!
  1116. //! * There is a *lot* of cloning going on, in the spirit of "first make it work". There's probably
  1117. //! a good opportunity here for e.g. interned strings, but we're nowhere near the point were we need
  1118. //! that kind of optimization just yet.
  1119. //!
  1120. //! * Error messages and general developer experience leave a lot to be desired.
  1121. -use std::{
  1122. - collections::HashSet,
  1123. - convert::TryFrom,
  1124. - hash::{Hash, Hasher},
  1125. - iter,
  1126. -};
  1127. +use std::{collections::HashSet, convert::TryFrom, iter};
  1128. use anyhow::{bail, Result};
  1129. pub mod types;
  1130. pub use types::Type;
  1131. use types::{TypeIterator, TypeUniverse};
  1132. mod attributes;
  1133. @@ -72,47 +67,51 @@ mod namespace;
  1134. pub use namespace::Namespace;
  1135. mod object;
  1136. pub use object::{Constructor, Method, Object};
  1137. mod record;
  1138. pub use record::{Field, Record};
  1139. pub mod ffi;
  1140. pub use ffi::{FFIArgument, FFIFunction, FFIType};
  1141. -use uniffi_meta::{MethodMetadata, ObjectMetadata};
  1142. +use uniffi_meta::{Checksum, MethodMetadata, ObjectMetadata};
  1143. /// The main public interface for this module, representing the complete details of an interface exposed
  1144. /// by a rust component and the details of consuming it via an extern-C FFI layer.
  1145. ///
  1146. -#[derive(Debug, Default)]
  1147. +#[derive(Debug, Default, Checksum)]
  1148. pub struct ComponentInterface {
  1149. /// Every ComponentInterface gets tagged with the version of uniffi used to create it.
  1150. /// This helps us avoid using a lib compiled with one version together with bindings created
  1151. /// using a different version, which might introduce unsafety.
  1152. uniffi_version: String,
  1153. /// All of the types used in the interface.
  1154. + // We can't checksum `self.types`, but its contents are implied by the other fields
  1155. + // anyway, so it's safe to ignore it.
  1156. + #[checksum_ignore]
  1157. pub(super) types: TypeUniverse,
  1158. /// The unique prefix that we'll use for namespacing when exposing this component's API.
  1159. namespace: String,
  1160. /// The internal unique prefix used to namespace FFI symbols
  1161. + #[checksum_ignore]
  1162. ffi_namespace: String,
  1163. /// The high-level API provided by the component.
  1164. enums: Vec<Enum>,
  1165. records: Vec<Record>,
  1166. functions: Vec<Function>,
  1167. objects: Vec<Object>,
  1168. callback_interfaces: Vec<CallbackInterface>,
  1169. errors: Vec<Error>,
  1170. }
  1171. impl ComponentInterface {
  1172. /// Parse a `ComponentInterface` from a string containing a WebIDL definition.
  1173. pub fn from_webidl(idl: &str) -> Result<Self> {
  1174. let mut ci = Self {
  1175. - uniffi_version: env!("CARGO_PKG_VERSION").to_string(),
  1176. + uniffi_version: "0.21.0".to_string(),
  1177. ..Default::default()
  1178. };
  1179. // There's some lifetime thing with the errors returned from weedle::Definitions::parse
  1180. // that my own lifetime is too short to worry about figuring out; unwrap and move on.
  1181. // Note we use `weedle::Definitions::parse` instead of `weedle::parse` so
  1182. // on parse errors we can see how far weedle got, which helps locate the problem.
  1183. use weedle::Parse; // this trait must be in scope for parse to work.
  1184. @@ -316,26 +315,18 @@ impl ComponentInterface {
  1185. /// version of that interface. It offers the following properties:
  1186. ///
  1187. /// - Two ComponentIntefaces generated from the same WebIDL file, using the same version of uniffi
  1188. /// and the same version of Rust, will always have the same checksum value.
  1189. /// - Two ComponentInterfaces will, with high probability, have different checksum values if:
  1190. /// - They were generated from two different WebIDL files.
  1191. /// - They were generated by two different versions of uniffi
  1192. ///
  1193. - /// The checksum may or may not change depending on the version of Rust used; since we expect
  1194. - /// consumers to be using the same executable to generate both the scaffolding and the bindings,
  1195. - /// assuming the same version of Rust seems acceptable.
  1196. - ///
  1197. /// Note that this is designed to prevent accidents, not attacks, so there is no need for the
  1198. /// checksum to be cryptographically secure.
  1199. - ///
  1200. - /// TODO: it's not clear to me if the derivation of `Hash` is actually deterministic enough to
  1201. - /// ensure the guarantees above, or if it might be sensitive to e.g. compiler-driven re-ordering
  1202. - /// of struct field. Let's see how it goes...
  1203. pub fn checksum(&self) -> u16 {
  1204. uniffi_meta::checksum(self)
  1205. }
  1206. /// The namespace to use in FFI-level function definitions.
  1207. ///
  1208. /// The value returned by this method is used as a prefix to namespace all UDL-defined FFI
  1209. /// functions used in this ComponentInterface.
  1210. @@ -667,33 +658,16 @@ impl ComponentInterface {
  1211. }
  1212. for callback in self.callback_interfaces.iter_mut() {
  1213. callback.derive_ffi_funcs(&ci_prefix);
  1214. }
  1215. Ok(())
  1216. }
  1217. }
  1218. -/// `ComponentInterface` structs can be hashed, but this is mostly a convenient way to
  1219. -/// produce a checksum of their contents. They're not really intended to live in a hashtable.
  1220. -impl Hash for ComponentInterface {
  1221. - fn hash<H: Hasher>(&self, state: &mut H) {
  1222. - // We can't hash `self.types`, but its contents are implied by the other fields
  1223. - // anyway, so it's safe to ignore it.
  1224. - self.uniffi_version.hash(state);
  1225. - self.namespace.hash(state);
  1226. - self.enums.hash(state);
  1227. - self.records.hash(state);
  1228. - self.functions.hash(state);
  1229. - self.objects.hash(state);
  1230. - self.callback_interfaces.hash(state);
  1231. - self.errors.hash(state);
  1232. - }
  1233. -}
  1234. -
  1235. fn get_or_insert_object<'a>(objects: &'a mut Vec<Object>, name: &str) -> &'a mut Object {
  1236. // The find-based way of writing this currently runs into a borrow checker
  1237. // error, so we use position
  1238. match objects.iter_mut().position(|o| o.name == name) {
  1239. Some(idx) => &mut objects[idx],
  1240. None => {
  1241. objects.push(Object::new(name.to_owned()));
  1242. objects.last_mut().unwrap()
  1243. diff --git a/third_party/rust/uniffi_bindgen/src/interface/object.rs b/third_party/rust/uniffi_bindgen/src/interface/object.rs
  1244. --- a/third_party/rust/uniffi_bindgen/src/interface/object.rs
  1245. +++ b/third_party/rust/uniffi_bindgen/src/interface/object.rs
  1246. @@ -53,20 +53,20 @@
  1247. //! # "##)?;
  1248. //! let obj = ci.get_object_definition("Example").unwrap();
  1249. //! assert_eq!(obj.name(), "Example");
  1250. //! assert_eq!(obj.constructors().len(), 0);
  1251. //! # Ok::<(), anyhow::Error>(())
  1252. //! ```
  1253. use std::convert::TryFrom;
  1254. -use std::hash::{Hash, Hasher};
  1255. use std::{collections::HashSet, iter};
  1256. use anyhow::{bail, Result};
  1257. +use uniffi_meta::Checksum;
  1258. use super::ffi::{FFIArgument, FFIFunction, FFIType};
  1259. use super::function::Argument;
  1260. use super::types::{Type, TypeIterator};
  1261. use super::{
  1262. attributes::{ConstructorAttributes, InterfaceAttributes, MethodAttributes},
  1263. convert_type,
  1264. };
  1265. @@ -81,22 +81,30 @@ use super::{APIConverter, ComponentInter
  1266. /// At the FFI layer, objects are represented by an opaque integer handle and a set of functions
  1267. /// a common prefix. The object's constuctors are functions that return new objects by handle,
  1268. /// and its methods are functions that take a handle as first argument. The foreign language
  1269. /// binding code is expected to stitch these functions back together into an appropriate class
  1270. /// definition (or that language's equivalent thereof).
  1271. ///
  1272. /// TODO:
  1273. /// - maybe "Class" would be a better name than "Object" here?
  1274. -#[derive(Debug, Clone)]
  1275. +#[derive(Debug, Clone, Checksum)]
  1276. pub struct Object {
  1277. pub(super) name: String,
  1278. pub(super) constructors: Vec<Constructor>,
  1279. pub(super) methods: Vec<Method>,
  1280. + // We don't include the FFIFunc in the hash calculation, because:
  1281. + // - it is entirely determined by the other fields,
  1282. + // so excluding it is safe.
  1283. + // - its `name` property includes a checksum derived from the very
  1284. + // hash value we're trying to calculate here, so excluding it
  1285. + // avoids a weird circular depenendency in the calculation.
  1286. + #[checksum_ignore]
  1287. pub(super) ffi_func_free: FFIFunction,
  1288. + #[checksum_ignore]
  1289. pub(super) uses_deprecated_threadsafe_attribute: bool,
  1290. }
  1291. impl Object {
  1292. pub(super) fn new(name: String) -> Object {
  1293. Object {
  1294. name,
  1295. constructors: Default::default(),
  1296. @@ -185,30 +193,16 @@ impl Object {
  1297. .iter()
  1298. .map(Method::iter_types)
  1299. .chain(self.constructors.iter().map(Constructor::iter_types))
  1300. .flatten(),
  1301. )
  1302. }
  1303. }
  1304. -impl Hash for Object {
  1305. - fn hash<H: Hasher>(&self, state: &mut H) {
  1306. - // We don't include the FFIFunc in the hash calculation, because:
  1307. - // - it is entirely determined by the other fields,
  1308. - // so excluding it is safe.
  1309. - // - its `name` property includes a checksum derived from the very
  1310. - // hash value we're trying to calculate here, so excluding it
  1311. - // avoids a weird circular depenendency in the calculation.
  1312. - self.name.hash(state);
  1313. - self.constructors.hash(state);
  1314. - self.methods.hash(state);
  1315. - }
  1316. -}
  1317. -
  1318. impl APIConverter<Object> for weedle::InterfaceDefinition<'_> {
  1319. fn convert(&self, ci: &mut ComponentInterface) -> Result<Object> {
  1320. if self.inheritance.is_some() {
  1321. bail!("interface inheritence is not supported");
  1322. }
  1323. let mut object = Object::new(self.identifier.0.to_string());
  1324. let attributes = match &self.attributes {
  1325. Some(attrs) => InterfaceAttributes::try_from(attrs)?,
  1326. @@ -240,20 +234,27 @@ impl APIConverter<Object> for weedle::In
  1327. Ok(object)
  1328. }
  1329. }
  1330. // Represents a constructor for an object type.
  1331. //
  1332. // In the FFI, this will be a function that returns a pointer to an instance
  1333. // of the corresponding object type.
  1334. -#[derive(Debug, Clone)]
  1335. +#[derive(Debug, Clone, Checksum)]
  1336. pub struct Constructor {
  1337. pub(super) name: String,
  1338. pub(super) arguments: Vec<Argument>,
  1339. + // We don't include the FFIFunc in the hash calculation, because:
  1340. + // - it is entirely determined by the other fields,
  1341. + // so excluding it is safe.
  1342. + // - its `name` property includes a checksum derived from the very
  1343. + // hash value we're trying to calculate here, so excluding it
  1344. + // avoids a weird circular depenendency in the calculation.
  1345. + #[checksum_ignore]
  1346. pub(super) ffi_func: FFIFunction,
  1347. pub(super) attributes: ConstructorAttributes,
  1348. }
  1349. impl Constructor {
  1350. pub fn name(&self) -> &str {
  1351. &self.name
  1352. }
  1353. @@ -294,30 +295,16 @@ impl Constructor {
  1354. self.ffi_func.return_type = Some(FFIType::RustArcPtr(obj_name.to_string()));
  1355. }
  1356. pub fn iter_types(&self) -> TypeIterator<'_> {
  1357. Box::new(self.arguments.iter().flat_map(Argument::iter_types))
  1358. }
  1359. }
  1360. -impl Hash for Constructor {
  1361. - fn hash<H: Hasher>(&self, state: &mut H) {
  1362. - // We don't include the FFIFunc in the hash calculation, because:
  1363. - // - it is entirely determined by the other fields,
  1364. - // so excluding it is safe.
  1365. - // - its `name` property includes a checksum derived from the very
  1366. - // hash value we're trying to calculate here, so excluding it
  1367. - // avoids a weird circular depenendency in the calculation.
  1368. - self.name.hash(state);
  1369. - self.arguments.hash(state);
  1370. - self.attributes.hash(state);
  1371. - }
  1372. -}
  1373. -
  1374. impl Default for Constructor {
  1375. fn default() -> Self {
  1376. Constructor {
  1377. name: String::from("new"),
  1378. arguments: Vec::new(),
  1379. ffi_func: Default::default(),
  1380. attributes: Default::default(),
  1381. }
  1382. @@ -338,22 +325,29 @@ impl APIConverter<Constructor> for weedl
  1383. })
  1384. }
  1385. }
  1386. // Represents an instance method for an object type.
  1387. //
  1388. // The FFI will represent this as a function whose first/self argument is a
  1389. // `FFIType::RustArcPtr` to the instance.
  1390. -#[derive(Debug, Clone)]
  1391. +#[derive(Debug, Clone, Checksum)]
  1392. pub struct Method {
  1393. pub(super) name: String,
  1394. pub(super) object_name: String,
  1395. + pub(super) arguments: Vec<Argument>,
  1396. pub(super) return_type: Option<Type>,
  1397. - pub(super) arguments: Vec<Argument>,
  1398. + // We don't include the FFIFunc in the hash calculation, because:
  1399. + // - it is entirely determined by the other fields,
  1400. + // so excluding it is safe.
  1401. + // - its `name` property includes a checksum derived from the very
  1402. + // hash value we're trying to calculate here, so excluding it
  1403. + // avoids a weird circular depenendency in the calculation.
  1404. + #[checksum_ignore]
  1405. pub(super) ffi_func: FFIFunction,
  1406. pub(super) attributes: MethodAttributes,
  1407. }
  1408. impl Method {
  1409. pub fn name(&self) -> &str {
  1410. &self.name
  1411. }
  1412. @@ -445,32 +439,16 @@ impl From<uniffi_meta::MethodMetadata> f
  1413. arguments,
  1414. return_type,
  1415. ffi_func,
  1416. attributes: Default::default(),
  1417. }
  1418. }
  1419. }
  1420. -impl Hash for Method {
  1421. - fn hash<H: Hasher>(&self, state: &mut H) {
  1422. - // We don't include the FFIFunc in the hash calculation, because:
  1423. - // - it is entirely determined by the other fields,
  1424. - // so excluding it is safe.
  1425. - // - its `name` property includes a checksum derived from the very
  1426. - // hash value we're trying to calculate here, so excluding it
  1427. - // avoids a weird circular depenendency in the calculation.
  1428. - self.name.hash(state);
  1429. - self.object_name.hash(state);
  1430. - self.arguments.hash(state);
  1431. - self.return_type.hash(state);
  1432. - self.attributes.hash(state);
  1433. - }
  1434. -}
  1435. -
  1436. impl APIConverter<Method> for weedle::interface::OperationInterfaceMember<'_> {
  1437. fn convert(&self, ci: &mut ComponentInterface) -> Result<Method> {
  1438. if self.special.is_some() {
  1439. bail!("special operations not supported");
  1440. }
  1441. if self.modifier.is_some() {
  1442. bail!("method modifiers are not supported")
  1443. }
  1444. diff --git a/third_party/rust/uniffi_bindgen/src/interface/record.rs b/third_party/rust/uniffi_bindgen/src/interface/record.rs
  1445. --- a/third_party/rust/uniffi_bindgen/src/interface/record.rs
  1446. +++ b/third_party/rust/uniffi_bindgen/src/interface/record.rs
  1447. @@ -40,30 +40,31 @@
  1448. //! let record = ci.get_record_definition("Example").unwrap();
  1449. //! assert_eq!(record.name(), "Example");
  1450. //! assert_eq!(record.fields()[0].name(), "name");
  1451. //! assert_eq!(record.fields()[1].name(), "value");
  1452. //! # Ok::<(), anyhow::Error>(())
  1453. //! ```
  1454. use anyhow::{bail, Result};
  1455. +use uniffi_meta::Checksum;
  1456. use super::types::{Type, TypeIterator};
  1457. use super::{
  1458. convert_type,
  1459. literal::{convert_default_value, Literal},
  1460. };
  1461. use super::{APIConverter, ComponentInterface};
  1462. /// Represents a "data class" style object, for passing around complex values.
  1463. ///
  1464. /// In the FFI these are represented as a byte buffer, which one side explicitly
  1465. /// serializes the data into and the other serializes it out of. So I guess they're
  1466. /// kind of like "pass by clone" values.
  1467. -#[derive(Debug, Clone, Hash)]
  1468. +#[derive(Debug, Clone, Checksum)]
  1469. pub struct Record {
  1470. pub(super) name: String,
  1471. pub(super) fields: Vec<Field>,
  1472. }
  1473. impl Record {
  1474. pub fn name(&self) -> &str {
  1475. &self.name
  1476. @@ -104,17 +105,17 @@ impl APIConverter<Record> for weedle::Di
  1477. Ok(Record {
  1478. name: self.identifier.0.to_string(),
  1479. fields: self.members.body.convert(ci)?,
  1480. })
  1481. }
  1482. }
  1483. // Represents an individual field on a Record.
  1484. -#[derive(Debug, Clone, Hash)]
  1485. +#[derive(Debug, Clone, Checksum)]
  1486. pub struct Field {
  1487. pub(super) name: String,
  1488. pub(super) type_: Type,
  1489. pub(super) required: bool,
  1490. pub(super) default: Option<Literal>,
  1491. }
  1492. impl Field {
  1493. diff --git a/third_party/rust/uniffi_bindgen/src/interface/types/mod.rs b/third_party/rust/uniffi_bindgen/src/interface/types/mod.rs
  1494. --- a/third_party/rust/uniffi_bindgen/src/interface/types/mod.rs
  1495. +++ b/third_party/rust/uniffi_bindgen/src/interface/types/mod.rs
  1496. @@ -20,28 +20,29 @@
  1497. //! As a developer working on UniFFI itself, you're likely to spend a fair bit of time thinking
  1498. //! about how these API-level types map into the lower-level types of the FFI layer as represented
  1499. //! by the [`ffi::FFIType`](super::ffi::FFIType) enum, but that's a detail that is invisible to end users.
  1500. use std::{collections::hash_map::Entry, collections::BTreeSet, collections::HashMap, iter};
  1501. use anyhow::{bail, Result};
  1502. use heck::ToUpperCamelCase;
  1503. +use uniffi_meta::Checksum;
  1504. use super::ffi::FFIType;
  1505. mod finder;
  1506. pub(super) use finder::TypeFinder;
  1507. mod resolver;
  1508. pub(super) use resolver::{resolve_builtin_type, TypeResolver};
  1509. /// Represents all the different high-level types that can be used in a component interface.
  1510. /// At this level we identify user-defined types by name, without knowing any details
  1511. /// of their internal structure apart from what type of thing they are (record, enum, etc).
  1512. -#[derive(Debug, Clone, Eq, PartialEq, Hash, Ord, PartialOrd)]
  1513. +#[derive(Debug, Clone, Eq, PartialEq, Checksum, Ord, PartialOrd)]
  1514. pub enum Type {
  1515. // Primitive types.
  1516. UInt8,
  1517. Int8,
  1518. UInt16,
  1519. Int16,
  1520. UInt32,
  1521. Int32,
  1522. diff --git a/third_party/rust/uniffi_build/.cargo-checksum.json b/third_party/rust/uniffi_build/.cargo-checksum.json
  1523. --- a/third_party/rust/uniffi_build/.cargo-checksum.json
  1524. +++ b/third_party/rust/uniffi_build/.cargo-checksum.json
  1525. @@ -1,1 +1,1 @@
  1526. -{"files":{"Cargo.toml":"bf9105f53978ecdccad9a75fc3645f97982d3c4162a5a9b49ab16554162b51c1","src/lib.rs":"485a0c0ab99077a1d4037f4deec9801e87a248196e7589a002556fb84973528a"},"package":"510287c368a9386eb731ebe824a6fc6c82a105e20d020af1aa20519c1c1561db"}
  1527. \ No newline at end of file
  1528. +{"files":{"Cargo.toml":"30736876caf953bd0040b6c0fc824744556bf52fe23d656c7d01442d4c180674","src/lib.rs":"485a0c0ab99077a1d4037f4deec9801e87a248196e7589a002556fb84973528a"},"package":"d035e50433ee3d52ab0dcdcf3b9b26f2cc2ec39294b3c07d95865a518709455f"}
  1529. \ No newline at end of file
  1530. diff --git a/third_party/rust/uniffi_build/Cargo.toml b/third_party/rust/uniffi_build/Cargo.toml
  1531. --- a/third_party/rust/uniffi_build/Cargo.toml
  1532. +++ b/third_party/rust/uniffi_build/Cargo.toml
  1533. @@ -7,34 +7,33 @@
  1534. #
  1535. # If you are reading this file be aware that the original Cargo.toml
  1536. # will likely look very different (and much more reasonable).
  1537. # See Cargo.toml.orig for the original contents.
  1538. [package]
  1539. edition = "2021"
  1540. name = "uniffi_build"
  1541. -version = "0.21.0"
  1542. +version = "0.21.1"
  1543. authors = ["Firefox Sync Team <sync-team@mozilla.com>"]
  1544. description = "a multi-language bindings generator for rust (build script helpers)"
  1545. homepage = "https://mozilla.github.io/uniffi-rs"
  1546. documentation = "https://mozilla.github.io/uniffi-rs"
  1547. keywords = [
  1548. "ffi",
  1549. "bindgen",
  1550. ]
  1551. license = "MPL-2.0"
  1552. repository = "https://github.com/mozilla/uniffi-rs"
  1553. -resolver = "2"
  1554. [dependencies.anyhow]
  1555. version = "1"
  1556. [dependencies.camino]
  1557. version = "1.0.8"
  1558. [dependencies.uniffi_bindgen]
  1559. -version = "=0.21.0"
  1560. +version = "=0.21.1"
  1561. optional = true
  1562. [features]
  1563. builtin-bindgen = ["uniffi_bindgen"]
  1564. default = []
  1565. diff --git a/third_party/rust/uniffi_checksum_derive/.cargo-checksum.json b/third_party/rust/uniffi_checksum_derive/.cargo-checksum.json
  1566. new file mode 100644
  1567. --- /dev/null
  1568. +++ b/third_party/rust/uniffi_checksum_derive/.cargo-checksum.json
  1569. @@ -0,0 +1,1 @@
  1570. +{"files":{"Cargo.toml":"2ab3c60724c4c504297f8876bf0a8d1291f76a2fc46f5e83634aa147e89ffc71","src/lib.rs":"c68c69a1cf6a69e5fe78f7b069364a265c5bb6ce8c0abf0b5745eca01c79604a"},"package":"78b6e16d46caf942016997af8bbdf4b163bf8ae3deb0b667d9643de7b7ffd4c9"}
  1571. \ No newline at end of file
  1572. diff --git a/third_party/rust/uniffi_checksum_derive/Cargo.toml b/third_party/rust/uniffi_checksum_derive/Cargo.toml
  1573. new file mode 100644
  1574. --- /dev/null
  1575. +++ b/third_party/rust/uniffi_checksum_derive/Cargo.toml
  1576. @@ -0,0 +1,42 @@
  1577. +# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
  1578. +#
  1579. +# When uploading crates to the registry Cargo will automatically
  1580. +# "normalize" Cargo.toml files for maximal compatibility
  1581. +# with all versions of Cargo and also rewrite `path` dependencies
  1582. +# to registry (e.g., crates.io) dependencies.
  1583. +#
  1584. +# If you are reading this file be aware that the original Cargo.toml
  1585. +# will likely look very different (and much more reasonable).
  1586. +# See Cargo.toml.orig for the original contents.
  1587. +
  1588. +[package]
  1589. +edition = "2021"
  1590. +name = "uniffi_checksum_derive"
  1591. +version = "0.21.1"
  1592. +authors = ["Firefox Sync Team <sync-team@mozilla.com>"]
  1593. +description = "a multi-language bindings generator for rust (checksum custom derive)"
  1594. +homepage = "https://mozilla.github.io/uniffi-rs"
  1595. +documentation = "https://mozilla.github.io/uniffi-rs"
  1596. +keywords = [
  1597. + "ffi",
  1598. + "bindgen",
  1599. +]
  1600. +license = "MPL-2.0"
  1601. +repository = "https://github.com/mozilla/uniffi-rs"
  1602. +
  1603. +[lib]
  1604. +proc-macro = true
  1605. +
  1606. +[dependencies.quote]
  1607. +version = "1.0"
  1608. +
  1609. +[dependencies.syn]
  1610. +version = "1.0"
  1611. +features = [
  1612. + "derive",
  1613. + "parsing",
  1614. +]
  1615. +
  1616. +[features]
  1617. +default = []
  1618. +nightly = []
  1619. diff --git a/third_party/rust/uniffi_checksum_derive/src/lib.rs b/third_party/rust/uniffi_checksum_derive/src/lib.rs
  1620. new file mode 100644
  1621. --- /dev/null
  1622. +++ b/third_party/rust/uniffi_checksum_derive/src/lib.rs
  1623. @@ -0,0 +1,134 @@
  1624. +/* This Source Code Form is subject to the terms of the Mozilla Public
  1625. + * License, v. 2.0. If a copy of the MPL was not distributed with this
  1626. + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
  1627. +#![cfg_attr(feature = "nightly", feature(proc_macro_expand))]
  1628. +
  1629. +//! Custom derive for uniffi_meta::Checksum
  1630. +
  1631. +use proc_macro::TokenStream;
  1632. +use quote::{format_ident, quote};
  1633. +use syn::{parse_macro_input, Attribute, Data, DeriveInput, Expr, ExprLit, Fields, Index, Lit};
  1634. +
  1635. +fn has_ignore_attribute(attrs: &[Attribute]) -> bool {
  1636. + attrs.iter().any(|attr| {
  1637. + if attr.path.is_ident("checksum_ignore") {
  1638. + if !attr.tokens.is_empty() {
  1639. + panic!("#[checksum_ignore] doesn't accept extra information");
  1640. + }
  1641. + true
  1642. + } else {
  1643. + false
  1644. + }
  1645. + })
  1646. +}
  1647. +
  1648. +#[proc_macro_derive(Checksum, attributes(checksum_ignore))]
  1649. +pub fn checksum_derive(input: TokenStream) -> TokenStream {
  1650. + let input: DeriveInput = parse_macro_input!(input);
  1651. +
  1652. + let name = input.ident;
  1653. +
  1654. + let (impl_generics, ty_generics, where_clause) = input.generics.split_for_impl();
  1655. +
  1656. + let code = match input.data {
  1657. + Data::Enum(enum_)
  1658. + if enum_.variants.len() == 1
  1659. + && enum_
  1660. + .variants
  1661. + .iter()
  1662. + .all(|variant| matches!(variant.fields, Fields::Unit)) =>
  1663. + {
  1664. + quote!()
  1665. + }
  1666. + Data::Enum(enum_) => {
  1667. + let mut next_discriminant = 0u64;
  1668. + let match_inner = enum_.variants.iter().map(|variant| {
  1669. + let ident = &variant.ident;
  1670. + if has_ignore_attribute(&variant.attrs) {
  1671. + panic!("#[checksum_ignore] is not supported in enums");
  1672. + }
  1673. + match &variant.discriminant {
  1674. + Some((_, Expr::Lit(ExprLit { lit: Lit::Int(value), .. }))) => {
  1675. + next_discriminant = value.base10_parse::<u64>().unwrap();
  1676. + }
  1677. + Some(_) => {
  1678. + panic!("#[derive(Checksum)] doesn't support non-numeric explicit discriminants in enums");
  1679. + }
  1680. + None => {}
  1681. + }
  1682. + let discriminant = quote! { state.write(&#next_discriminant.to_le_bytes()) };
  1683. + next_discriminant += 1;
  1684. + match &variant.fields {
  1685. + Fields::Unnamed(fields) => {
  1686. + let field_idents = fields
  1687. + .unnamed
  1688. + .iter()
  1689. + .enumerate()
  1690. + .map(|(num, _)| format_ident!("__self_{}", num));
  1691. + let field_stmts = field_idents
  1692. + .clone()
  1693. + .map(|ident| quote! { Checksum::checksum(#ident, state); });
  1694. + quote! {
  1695. + Self::#ident(#(#field_idents,)*) => {
  1696. + #discriminant;
  1697. + #(#field_stmts)*
  1698. + }
  1699. + }
  1700. + }
  1701. + Fields::Named(fields) => {
  1702. + let field_idents = fields
  1703. + .named
  1704. + .iter()
  1705. + .map(|field| field.ident.as_ref().unwrap());
  1706. + let field_stmts = field_idents
  1707. + .clone()
  1708. + .map(|ident| quote! { Checksum::checksum(#ident, state); });
  1709. + quote! {
  1710. + Self::#ident { #(#field_idents,)* } => {
  1711. + #discriminant;
  1712. + #(#field_stmts)*
  1713. + }
  1714. + }
  1715. + }
  1716. + Fields::Unit => quote! { Self::#ident => #discriminant, },
  1717. + }
  1718. + });
  1719. + quote! {
  1720. + match self {
  1721. + #(#match_inner)*
  1722. + }
  1723. + }
  1724. + }
  1725. + Data::Struct(struct_) => {
  1726. + let stmts = struct_
  1727. + .fields
  1728. + .iter()
  1729. + .enumerate()
  1730. + .filter_map(|(num, field)| {
  1731. + (!has_ignore_attribute(&field.attrs)).then(|| match field.ident.as_ref() {
  1732. + Some(ident) => quote! { Checksum::checksum(&self.#ident, state); },
  1733. + None => {
  1734. + let i = Index::from(num);
  1735. + quote! { Checksum::checksum(&self.#i, state); }
  1736. + }
  1737. + })
  1738. + });
  1739. + quote! {
  1740. + #(#stmts)*
  1741. + }
  1742. + }
  1743. + Data::Union(_) => {
  1744. + panic!("#[derive(Checksum)] is not supported for unions");
  1745. + }
  1746. + };
  1747. +
  1748. + quote! {
  1749. + #[automatically_derived]
  1750. + impl #impl_generics Checksum for #name #ty_generics #where_clause {
  1751. + fn checksum<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
  1752. + #code
  1753. + }
  1754. + }
  1755. + }
  1756. + .into()
  1757. +}
  1758. diff --git a/third_party/rust/uniffi_macros/.cargo-checksum.json b/third_party/rust/uniffi_macros/.cargo-checksum.json
  1759. --- a/third_party/rust/uniffi_macros/.cargo-checksum.json
  1760. +++ b/third_party/rust/uniffi_macros/.cargo-checksum.json
  1761. @@ -1,1 +1,1 @@
  1762. -{"files":{"Cargo.toml":"55f7e114dd34b0c60b58890120f8707601a5401e9d49d42a239b03da2e660d4f","src/export.rs":"e23929cf6fb5542d29514fe668f3b3d836fad968eacd9c6fcba74c5cd9cf2b61","src/export/metadata.rs":"af89a9942c7c0c4043a3cd57d1e6bd71cde19005e1f9f246efac761f47eff6be","src/export/metadata/convert.rs":"81060fb3390165d77db021f44142a2f3f10882515f859d7393857083370f2d35","src/export/metadata/function.rs":"11833cabd37e7671c0a01944bec73b8892a15df814bbe4c26fdae57aad89a2ba","src/export/metadata/impl_.rs":"ecfdaa132f05dd946414281e52165ef19c90c0bfd76ec651d4ec86837bd41d1c","src/export/scaffolding.rs":"66939405063e56fc983126f249e2d7ddc3257cb045a738abd0cf813a4aafc59c","src/lib.rs":"ca77b437a58cfb3ddeb106d3c1c8378545c46ef241298e62ab1190c5136d1fb1","src/object.rs":"955b596f344304013692042bdc1760bbb1192ec33950b0dd2932cb8de94ec297","src/record.rs":"67a5c7ed6a448f7ad8f5c8e930c5e3007b2b0cac32f52cc8596bdae6fb3c816e","src/util.rs":"6389a9b4258808a3af168cf85658fb7c069172d5e528ee0e94210fa664f2a414"},"package":"5c8604503caa2cbcf271578dc51ca236d40e3b22e1514ffa2e638e2c39f6ad10"}
  1763. \ No newline at end of file
  1764. +{"files":{"Cargo.toml":"6511b493b676ac3941d70477c91abec62642c3c9aab088ecdf4f733eef3f1faa","src/export.rs":"e23929cf6fb5542d29514fe668f3b3d836fad968eacd9c6fcba74c5cd9cf2b61","src/export/metadata.rs":"af89a9942c7c0c4043a3cd57d1e6bd71cde19005e1f9f246efac761f47eff6be","src/export/metadata/convert.rs":"81060fb3390165d77db021f44142a2f3f10882515f859d7393857083370f2d35","src/export/metadata/function.rs":"11833cabd37e7671c0a01944bec73b8892a15df814bbe4c26fdae57aad89a2ba","src/export/metadata/impl_.rs":"ecfdaa132f05dd946414281e52165ef19c90c0bfd76ec651d4ec86837bd41d1c","src/export/scaffolding.rs":"66939405063e56fc983126f249e2d7ddc3257cb045a738abd0cf813a4aafc59c","src/lib.rs":"ca77b437a58cfb3ddeb106d3c1c8378545c46ef241298e62ab1190c5136d1fb1","src/object.rs":"955b596f344304013692042bdc1760bbb1192ec33950b0dd2932cb8de94ec297","src/record.rs":"67a5c7ed6a448f7ad8f5c8e930c5e3007b2b0cac32f52cc8596bdae6fb3c816e","src/util.rs":"6389a9b4258808a3af168cf85658fb7c069172d5e528ee0e94210fa664f2a414"},"package":"c96a574677566f83ea8458dac1dd7792fd63e7c3f9dbcd865f0e8d6f8057b127"}
  1765. \ No newline at end of file
  1766. diff --git a/third_party/rust/uniffi_macros/Cargo.toml b/third_party/rust/uniffi_macros/Cargo.toml
  1767. --- a/third_party/rust/uniffi_macros/Cargo.toml
  1768. +++ b/third_party/rust/uniffi_macros/Cargo.toml
  1769. @@ -7,28 +7,27 @@
  1770. #
  1771. # If you are reading this file be aware that the original Cargo.toml
  1772. # will likely look very different (and much more reasonable).
  1773. # See Cargo.toml.orig for the original contents.
  1774. [package]
  1775. edition = "2021"
  1776. name = "uniffi_macros"
  1777. -version = "0.21.0"
  1778. +version = "0.21.1"
  1779. authors = ["Firefox Sync Team <sync-team@mozilla.com>"]
  1780. description = "a multi-language bindings generator for rust (convenience macros)"
  1781. homepage = "https://mozilla.github.io/uniffi-rs"
  1782. documentation = "https://mozilla.github.io/uniffi-rs"
  1783. keywords = [
  1784. "ffi",
  1785. "bindgen",
  1786. ]
  1787. license = "MPL-2.0"
  1788. repository = "https://github.com/mozilla/uniffi-rs"
  1789. -resolver = "2"
  1790. [lib]
  1791. proc-macro = true
  1792. [dependencies.bincode]
  1793. version = "1.3"
  1794. [dependencies.camino]
  1795. @@ -55,17 +54,17 @@ features = [
  1796. "full",
  1797. "visit-mut",
  1798. ]
  1799. [dependencies.toml]
  1800. version = "0.5.9"
  1801. [dependencies.uniffi_build]
  1802. -version = "=0.21.0"
  1803. +version = "=0.21.1"
  1804. [dependencies.uniffi_meta]
  1805. -version = "=0.21.0"
  1806. +version = "=0.21.1"
  1807. [features]
  1808. builtin-bindgen = ["uniffi_build/builtin-bindgen"]
  1809. default = []
  1810. nightly = []
  1811. diff --git a/third_party/rust/uniffi_meta/.cargo-checksum.json b/third_party/rust/uniffi_meta/.cargo-checksum.json
  1812. --- a/third_party/rust/uniffi_meta/.cargo-checksum.json
  1813. +++ b/third_party/rust/uniffi_meta/.cargo-checksum.json
  1814. @@ -1,1 +1,1 @@
  1815. -{"files":{"Cargo.toml":"4a474782b3acac7e99435c0cfc6cd4790817ee5c15980b10dc927d95795b977f","src/lib.rs":"dc4c91763c01e8c09ef55cdb103bc02c7aba71c5660ba88f776a8a03a747d6e8"},"package":"cd9417cc653937681436b93838d8c5f97a5b8c58697813982ee8810bd1dc3b57"}
  1816. \ No newline at end of file
  1817. +{"files":{"Cargo.toml":"4c34032ec5fadf8b996c671425d5afa38e0e5c223ab0b2ed3b44099fb78157d3","src/lib.rs":"a9854421f120e1c4a9d7d36bb006a4c5e7d2e054564f95aa9b6956e7ebb348fd"},"package":"729835442da829c9b6f7c111c76cf87b2498e129101203bec94f0c39a3296a38"}
  1818. \ No newline at end of file
  1819. diff --git a/third_party/rust/uniffi_meta/Cargo.toml b/third_party/rust/uniffi_meta/Cargo.toml
  1820. --- a/third_party/rust/uniffi_meta/Cargo.toml
  1821. +++ b/third_party/rust/uniffi_meta/Cargo.toml
  1822. @@ -7,22 +7,27 @@
  1823. #
  1824. # If you are reading this file be aware that the original Cargo.toml
  1825. # will likely look very different (and much more reasonable).
  1826. # See Cargo.toml.orig for the original contents.
  1827. [package]
  1828. edition = "2021"
  1829. name = "uniffi_meta"
  1830. -version = "0.21.0"
  1831. +version = "0.21.1"
  1832. description = "uniffi_meta"
  1833. homepage = "https://mozilla.github.io/uniffi-rs"
  1834. keywords = [
  1835. "ffi",
  1836. "bindgen",
  1837. ]
  1838. license = "MPL-2.0"
  1839. repository = "https://github.com/mozilla/uniffi-rs"
  1840. -resolver = "2"
  1841. [dependencies.serde]
  1842. version = "1.0.136"
  1843. features = ["derive"]
  1844. +
  1845. +[dependencies.siphasher]
  1846. +version = "0.3"
  1847. +
  1848. +[dependencies.uniffi_checksum_derive]
  1849. +version = "0.21.0"
  1850. diff --git a/third_party/rust/uniffi_meta/src/lib.rs b/third_party/rust/uniffi_meta/src/lib.rs
  1851. --- a/third_party/rust/uniffi_meta/src/lib.rs
  1852. +++ b/third_party/rust/uniffi_meta/src/lib.rs
  1853. @@ -1,57 +1,127 @@
  1854. /* This Source Code Form is subject to the terms of the Mozilla Public
  1855. * License, v. 2.0. If a copy of the MPL was not distributed with this
  1856. * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
  1857. -use std::{
  1858. - collections::hash_map::DefaultHasher,
  1859. - hash::{Hash, Hasher},
  1860. -};
  1861. +use std::hash::Hasher;
  1862. +pub use uniffi_checksum_derive::Checksum;
  1863. use serde::{Deserialize, Serialize};
  1864. -#[derive(Clone, Debug, Hash, Deserialize, Serialize)]
  1865. +/// Similar to std::hash::Hash.
  1866. +///
  1867. +/// Implementations of this trait are expected to update the hasher state in
  1868. +/// the same way across platforms. #[derive(Checksum)] will do the right thing.
  1869. +pub trait Checksum {
  1870. + fn checksum<H: Hasher>(&self, state: &mut H);
  1871. +}
  1872. +
  1873. +impl Checksum for bool {
  1874. + fn checksum<H: Hasher>(&self, state: &mut H) {
  1875. + state.write_u8(*self as u8);
  1876. + }
  1877. +}
  1878. +
  1879. +impl Checksum for u64 {
  1880. + fn checksum<H: Hasher>(&self, state: &mut H) {
  1881. + state.write(&self.to_le_bytes());
  1882. + }
  1883. +}
  1884. +
  1885. +impl Checksum for i64 {
  1886. + fn checksum<H: Hasher>(&self, state: &mut H) {
  1887. + state.write(&self.to_le_bytes());
  1888. + }
  1889. +}
  1890. +
  1891. +impl<T: Checksum> Checksum for Box<T> {
  1892. + fn checksum<H: Hasher>(&self, state: &mut H) {
  1893. + (**self).checksum(state)
  1894. + }
  1895. +}
  1896. +
  1897. +impl<T: Checksum> Checksum for [T] {
  1898. + fn checksum<H: Hasher>(&self, state: &mut H) {
  1899. + state.write(&(self.len() as u64).to_le_bytes());
  1900. + for item in self {
  1901. + Checksum::checksum(item, state);
  1902. + }
  1903. + }
  1904. +}
  1905. +
  1906. +impl<T: Checksum> Checksum for Vec<T> {
  1907. + fn checksum<H: Hasher>(&self, state: &mut H) {
  1908. + Checksum::checksum(&**self, state);
  1909. + }
  1910. +}
  1911. +
  1912. +impl<T: Checksum> Checksum for Option<T> {
  1913. + fn checksum<H: Hasher>(&self, state: &mut H) {
  1914. + match self {
  1915. + None => state.write(&0u64.to_le_bytes()),
  1916. + Some(value) => {
  1917. + state.write(&1u64.to_le_bytes());
  1918. + Checksum::checksum(value, state)
  1919. + }
  1920. + }
  1921. + }
  1922. +}
  1923. +
  1924. +impl Checksum for str {
  1925. + fn checksum<H: Hasher>(&self, state: &mut H) {
  1926. + state.write(self.as_bytes());
  1927. + state.write_u8(0xff);
  1928. + }
  1929. +}
  1930. +
  1931. +impl Checksum for String {
  1932. + fn checksum<H: Hasher>(&self, state: &mut H) {
  1933. + (**self).checksum(state)
  1934. + }
  1935. +}
  1936. +
  1937. +#[derive(Clone, Debug, Checksum, Deserialize, Serialize)]
  1938. pub struct FnMetadata {
  1939. pub module_path: Vec<String>,
  1940. pub name: String,
  1941. pub inputs: Vec<FnParamMetadata>,
  1942. pub return_type: Option<Type>,
  1943. }
  1944. impl FnMetadata {
  1945. pub fn ffi_symbol_name(&self) -> String {
  1946. fn_ffi_symbol_name(&self.module_path, &self.name, checksum(self))
  1947. }
  1948. }
  1949. -#[derive(Clone, Debug, Hash, Deserialize, Serialize)]
  1950. +#[derive(Clone, Debug, Checksum, Deserialize, Serialize)]
  1951. pub struct MethodMetadata {
  1952. pub module_path: Vec<String>,
  1953. pub self_name: String,
  1954. pub name: String,
  1955. pub inputs: Vec<FnParamMetadata>,
  1956. pub return_type: Option<Type>,
  1957. }
  1958. impl MethodMetadata {
  1959. pub fn ffi_symbol_name(&self) -> String {
  1960. let full_name = format!("impl_{}_{}", self.self_name, self.name);
  1961. fn_ffi_symbol_name(&self.module_path, &full_name, checksum(self))
  1962. }
  1963. }
  1964. -#[derive(Clone, Debug, Hash, Deserialize, Serialize)]
  1965. +#[derive(Clone, Debug, Checksum, Deserialize, Serialize)]
  1966. pub struct FnParamMetadata {
  1967. pub name: String,
  1968. #[serde(rename = "type")]
  1969. pub ty: Type,
  1970. }
  1971. -#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Deserialize, Serialize)]
  1972. +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Checksum, Deserialize, Serialize)]
  1973. pub enum Type {
  1974. U8,
  1975. U16,
  1976. U32,
  1977. U64,
  1978. I8,
  1979. I16,
  1980. I32,
  1981. @@ -73,63 +143,63 @@ pub enum Type {
  1982. ArcObject {
  1983. object_name: String,
  1984. },
  1985. Unresolved {
  1986. name: String,
  1987. },
  1988. }
  1989. -#[derive(Clone, Debug, Hash, Deserialize, Serialize)]
  1990. +#[derive(Clone, Debug, Checksum, Deserialize, Serialize)]
  1991. pub struct RecordMetadata {
  1992. pub module_path: Vec<String>,
  1993. pub name: String,
  1994. pub fields: Vec<FieldMetadata>,
  1995. }
  1996. -#[derive(Clone, Debug, Hash, Deserialize, Serialize)]
  1997. +#[derive(Clone, Debug, Checksum, Deserialize, Serialize)]
  1998. pub struct FieldMetadata {
  1999. pub name: String,
  2000. #[serde(rename = "type")]
  2001. pub ty: Type,
  2002. }
  2003. -#[derive(Clone, Debug, Hash, Deserialize, Serialize)]
  2004. +#[derive(Clone, Debug, Checksum, Deserialize, Serialize)]
  2005. pub struct ObjectMetadata {
  2006. pub module_path: Vec<String>,
  2007. pub name: String,
  2008. }
  2009. impl ObjectMetadata {
  2010. /// FFI symbol name for the `free` function for this object.
  2011. ///
  2012. /// This function is used to free the memory used by this object.
  2013. pub fn free_ffi_symbol_name(&self) -> String {
  2014. let free_name = format!("object_free_{}", self.name);
  2015. fn_ffi_symbol_name(&self.module_path, &free_name, checksum(self))
  2016. }
  2017. }
  2018. -/// Returns the last 16 bits of the value's hash as computed with [`DefaultHasher`].
  2019. +/// Returns the last 16 bits of the value's hash as computed with [`SipHasher13`].
  2020. ///
  2021. /// To be used as a checksum of FFI symbols, as a safeguard against different UniFFI versions being
  2022. /// used for scaffolding and bindings generation.
  2023. -pub fn checksum<T: Hash>(val: &T) -> u16 {
  2024. - let mut hasher = DefaultHasher::new();
  2025. - val.hash(&mut hasher);
  2026. +pub fn checksum<T: Checksum>(val: &T) -> u16 {
  2027. + let mut hasher = siphasher::sip::SipHasher13::new();
  2028. + val.checksum(&mut hasher);
  2029. (hasher.finish() & 0x000000000000FFFF) as u16
  2030. }
  2031. pub fn fn_ffi_symbol_name(mod_path: &[String], name: &str, checksum: u16) -> String {
  2032. let mod_path = mod_path.join("__");
  2033. format!("_uniffi_{mod_path}_{name}_{checksum:x}")
  2034. }
  2035. /// Enum covering all the possible metadata types
  2036. -#[derive(Clone, Debug, Hash, Deserialize, Serialize)]
  2037. +#[derive(Clone, Debug, Checksum, Deserialize, Serialize)]
  2038. pub enum Metadata {
  2039. Func(FnMetadata),
  2040. Method(MethodMetadata),
  2041. Record(RecordMetadata),
  2042. Object(ObjectMetadata),
  2043. }
  2044. impl From<FnMetadata> for Metadata {