]> git.pld-linux.org Git - packages/firefox.git/commitdiff
up to 108.0.2 auto/th/firefox-108.0.2-1
authorJan Palus <atler@pld-linux.org>
Fri, 6 Jan 2023 16:29:48 +0000 (17:29 +0100)
committerJan Palus <atler@pld-linux.org>
Fri, 6 Jan 2023 16:29:48 +0000 (17:29 +0100)
firefox.spec
uniffi.patch [deleted file]

index 053a58cf26b0ff5b5c6f85d490ba87b8768e6a91..d82303e8b8d4aeb928051ea8107afb8a81454d65 100644 (file)
@@ -50,214 +50,213 @@ Summary:  Firefox web browser
 Summary(hu.UTF-8):     Firefox web böngésző
 Summary(pl.UTF-8):     Firefox - przeglądarka WWW
 Name:          firefox
-Version:       108.0
-Release:       3
+Version:       108.0.2
+Release:       1
 License:       MPL v2.0
 Group:         X11/Applications/Networking
 Source0:       https://releases.mozilla.org/pub/firefox/releases/%{version}/source/firefox-%{version}.source.tar.xz
-# Source0-md5: f203b68a5b17e7100777adc04ab219e0
+# Source0-md5: d354d0d5d08526f9af9feda0d1f50935
 Source3:       %{name}.desktop
 Source4:       %{name}.sh
 Source5:       vendor.js
 Source6:       vendor-ac.js
 Source100:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/ach.xpi
-# Source100-md5:       7de764ddd3d7e4bf1a9542c7f3c7e491
+# Source100-md5:       87941dd139d2e58869a806c7055dcd53
 Source101:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/af.xpi
-# Source101-md5:       c104499e19acac7b482dab9f24320156
+# Source101-md5:       757b563fd8880fe3bd21d7142654d76f
 Source102:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/an.xpi
-# Source102-md5:       d2377ad51e4ea8013b05147ef4a23d54
+# Source102-md5:       26ecdb1094f2ff57488ffc52c99a334b
 Source103:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/ar.xpi
-# Source103-md5:       96ebac4561f2e5a4cc902d0e9fcfe2ae
+# Source103-md5:       a129a439bb2753c9fccf418d754ee1fa
 Source104:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/ast.xpi
-# Source104-md5:       9253ea5eff27216456c8a550b4e9c64f
+# Source104-md5:       efeeed7eee14db2d3241aa9b6110590b
 Source105:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/az.xpi
-# Source105-md5:       b848b4ee19b2e1f4a7eefb4f9e4a7735
+# Source105-md5:       1454018cdea5f6681a672fd0fe0f2166
 Source106:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/be.xpi
-# Source106-md5:       24240d091be8b1d710fbd517c92884f3
+# Source106-md5:       46781123e2e46d456676aab731065d64
 Source107:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/bg.xpi
-# Source107-md5:       f847d6cb2430a6e59f8226acfdb0125a
+# Source107-md5:       c2f525139159eceb5db82fbc0d20c509
 Source108:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/bn.xpi
-# Source108-md5:       98e8b62bf105e4c2aa4dac1c4b93bca0
+# Source108-md5:       ae23a4141a8c69e3889d4ddfc54b92eb
 Source109:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/br.xpi
-# Source109-md5:       60c86615b9bceeca437198ca976927c1
+# Source109-md5:       6e00f45f9a43d5d2cf2e275c3bef5b71
 Source110:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/bs.xpi
-# Source110-md5:       f69e58dea0951daf15684f6ab3ad459c
+# Source110-md5:       7a9a88a5acd3a6077ca081bdd4f62b86
 Source111:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/ca.xpi
-# Source111-md5:       35e43da6cbd33e9f601580ea643568a4
+# Source111-md5:       cdab3debe60f321accd6e7fbcf7bb2b0
 Source112:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/ca-valencia.xpi
-# Source112-md5:       b804dc5bca2aa5da798e4160f2a2cda8
+# Source112-md5:       2de53d0d4252450d60941feb0077752d
 Source113:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/cak.xpi
-# Source113-md5:       fac95b2d77cd331615ac0d8e7e4de740
+# Source113-md5:       6751b17f659b6e27c3cb96a7958fc229
 Source114:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/cs.xpi
-# Source114-md5:       63ec82b586249e14a4bc9b534a5ebd61
+# Source114-md5:       7bb76994b57cd7c740e314471bd807ae
 Source115:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/cy.xpi
-# Source115-md5:       9092208c41880ddbfa5c4e37e7b3029a
+# Source115-md5:       6cec0eae426a6f6c0c9ea8811aecca0a
 Source116:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/da.xpi
-# Source116-md5:       9f789df2e8eb14276d803d2505ec410e
+# Source116-md5:       60169f249438c3bb73993f7e987716ce
 Source117:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/de.xpi
-# Source117-md5:       5bfb638baab2636b12793aee1c834f1b
+# Source117-md5:       092d86cf0923de4b371d69473e6ac797
 Source118:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/dsb.xpi
-# Source118-md5:       26577c8e93cb571e2784f21b61318c19
+# Source118-md5:       5b06ee89499c4a957ec3719f3a81ce96
 Source119:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/el.xpi
-# Source119-md5:       be70e378d3c8841193a9d8c9c983177c
+# Source119-md5:       79f88deca53fea67bdcb0a92f37afa92
 Source120:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/en-CA.xpi
-# Source120-md5:       10a791cd4b06a5cedd06adec40e9a9c7
+# Source120-md5:       ee7b529a3992b0f23b0a9c66742eba86
 Source121:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/en-GB.xpi
-# Source121-md5:       b5aa20146866809ad35103e184711ee1
+# Source121-md5:       ac9fc98ea622cceffce8c684e122ee02
 Source122:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/en-US.xpi
-# Source122-md5:       7a79103532bbbb0522a041ba6f94a471
+# Source122-md5:       25cef92d333750be0c554e9310cd199c
 Source123:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/eo.xpi
-# Source123-md5:       dc0f981291e954459b0df8315ad7cac3
+# Source123-md5:       c0cfd968b2e1c47fdabc3055e3721a54
 Source124:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/es-AR.xpi
-# Source124-md5:       463d1db39e40051b6dad72fa37caaa79
+# Source124-md5:       b5d12b5f49766a39053d794b2651e94e
 Source125:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/es-CL.xpi
-# Source125-md5:       7fb88441236ac34a702f122084f74bf5
+# Source125-md5:       3927ac3d7269eff4bfb484188d6072b0
 Source126:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/es-ES.xpi
-# Source126-md5:       74e22ff60ab0842eead3167a44de12e9
+# Source126-md5:       8bca284be38f4d284547f19b1de8c02b
 Source127:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/es-MX.xpi
-# Source127-md5:       b9e11f82f9b993f878728d3e02007e8f
+# Source127-md5:       cab575f6bf31a2eb1c729014afb946bf
 Source128:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/et.xpi
-# Source128-md5:       4504cf6c731cb349042c53c4d87e4d76
+# Source128-md5:       a3efb4757582eb9c9fef948ceacce1c1
 Source129:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/eu.xpi
-# Source129-md5:       948ed5c427a6768defb7f9bf6c4f368f
+# Source129-md5:       6086d762502f702b75f0bacaa1b62726
 Source130:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/fa.xpi
-# Source130-md5:       6f714fdeed1e239aaae0823975a75bfd
+# Source130-md5:       fb4df1e33304d3cc7ee92f19771a5d4f
 Source131:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/ff.xpi
-# Source131-md5:       06eb77b3de179c430ffe5af4a3e31ca2
+# Source131-md5:       ab96868dfcbe040dd777816cecece11b
 Source132:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/fi.xpi
-# Source132-md5:       1c68f2e45848c45461bcff2bf08cddac
+# Source132-md5:       d121672cdac331b890b9d594b9eef8d6
 Source133:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/fr.xpi
-# Source133-md5:       c8e18a379c964256e0d746b94023f92e
+# Source133-md5:       62c4a8f6b550fb56c220c391524cb846
 Source134:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/fy-NL.xpi
-# Source134-md5:       817cbc4ce56a7ca3c527e1edda4aaf40
+# Source134-md5:       7e140932225f61ac9ad0e53a21230c91
 Source135:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/ga-IE.xpi
-# Source135-md5:       7d928746ba9ade676107be8fb87dc3f3
+# Source135-md5:       8a42ba30cc98cb63007e53679a452837
 Source136:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/gd.xpi
-# Source136-md5:       7848f535e106db9e910008b78e5434fa
+# Source136-md5:       42c47a8536a4451235d8541f7df7449b
 Source137:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/gl.xpi
-# Source137-md5:       b2fc59ae2bb8bd6f59ed9b9271d47bee
+# Source137-md5:       f1be0503d32fb475dd8cd077a6530b1a
 Source138:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/gn.xpi
-# Source138-md5:       205ed4f0b128453ef64784a05112076a
+# Source138-md5:       0a78b821d0ab42072569c0a5236c46fc
 Source139:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/gu-IN.xpi
-# Source139-md5:       3f0dd139958df28f2a4f77022d0968df
+# Source139-md5:       cc1bb263fd21d7e702747fc24f39a93c
 Source140:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/he.xpi
-# Source140-md5:       9404de3d8b825397d0a02ff28c2cd8c6
+# Source140-md5:       74dd12623c5b767c0138ef1b994acd99
 Source141:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/hi-IN.xpi
-# Source141-md5:       1e9c34d386bdd27e6842940a77fc71e4
+# Source141-md5:       b19a27ffc2506c92c7a1f919393d14ef
 Source142:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/hr.xpi
-# Source142-md5:       18c212e99507f24dbc2578fa8d375abd
+# Source142-md5:       691046a5897d7eebbcda37562a15fc22
 Source143:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/hsb.xpi
-# Source143-md5:       3a08f108ceb32cce710249a393219318
+# Source143-md5:       9350786703ba607404f682d478abdf6c
 Source144:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/hu.xpi
-# Source144-md5:       0cbb7b8f2db04b56d7a4a39aceaa7a49
+# Source144-md5:       0a05cd74be6bf12fb393101ae294a69f
 Source145:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/hy-AM.xpi
-# Source145-md5:       faa7fcee201f358d4362019045750174
+# Source145-md5:       d31bd8e541959c24d61bc956c300ec8d
 Source146:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/ia.xpi
-# Source146-md5:       e9e8f02f0638475f3e03c83a6f80ba32
+# Source146-md5:       d69e1bb213c27269b634081d1a2dc056
 Source147:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/id.xpi
-# Source147-md5:       3c50958afbf567d55cda0d82d7894f88
+# Source147-md5:       8bcbc4ab9cc5b1531f7b43c5bbba8e11
 Source148:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/is.xpi
-# Source148-md5:       abdadb8af57436d58c1418ea16349795
+# Source148-md5:       33404bdc321dc1e477beb9e9cd401f14
 Source149:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/it.xpi
-# Source149-md5:       6014b96c24e34a7e4156c66c0b9e1d82
+# Source149-md5:       cc239a913ecb8aa298fae6cd042ccaa6
 Source150:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/ja.xpi
-# Source150-md5:       61a8b8e7677077079a1894051445ef1f
+# Source150-md5:       04da6d0b7cd509968e5f7bd64c0c078f
 Source151:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/ka.xpi
-# Source151-md5:       2f451fc04f94db1c44eb3adbf4c9f89c
+# Source151-md5:       3a9234af8eb6ce0d20906687c3316918
 Source152:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/kab.xpi
-# Source152-md5:       db91891f4dda81d6ae34f267713d6d0c
+# Source152-md5:       e4593bf3b0e3609d2e85ccfebddd2655
 Source153:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/kk.xpi
-# Source153-md5:       7b640eb2da37d1e4b3a21254933e0b44
+# Source153-md5:       83f5ae4cba733aca9320ccb6ce913d29
 Source154:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/km.xpi
-# Source154-md5:       c7ae61d1aa7cfe93b9e4a8829e9e80e2
+# Source154-md5:       6fde2fc9598feccb2fd09038ce0c4233
 Source155:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/kn.xpi
-# Source155-md5:       dc18ba591fe4f24a7613e9e069d63e6e
+# Source155-md5:       e7b5bd08f060a6f6130e63672962a1e7
 Source156:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/ko.xpi
-# Source156-md5:       e9def673194b970160a0d3d6b4e2d443
+# Source156-md5:       e2f0a0437bda4d686b8cdb3869d58a91
 Source157:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/lij.xpi
-# Source157-md5:       10e861424a8230eeb3fa7111cb4a12aa
+# Source157-md5:       bd71dd2df7127b89a386f73a40b7549d
 Source158:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/lt.xpi
-# Source158-md5:       f13f98aa01724389845404dcadf6318e
+# Source158-md5:       7a4b47aca6119d9edbdc07db57530131
 Source159:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/lv.xpi
-# Source159-md5:       c88fe5057e19088504a015ff28214029
+# Source159-md5:       b8552d55252ab8429cae310079023f2a
 Source160:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/mk.xpi
-# Source160-md5:       b8eeb1a38f03a0f74f4eee16aee1e4dc
+# Source160-md5:       754e4b7086e5a8b3f3a125d8da4ea662
 Source161:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/mr.xpi
-# Source161-md5:       de278faec95321a7a1003beaea06a136
+# Source161-md5:       16053e4026e3e7a5392c90f1436e92f1
 Source162:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/ms.xpi
-# Source162-md5:       f0c35d1b1dfe6cf0aecd5aef933b7195
+# Source162-md5:       fb10049b7516e55d9dc195c896230912
 Source163:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/my.xpi
-# Source163-md5:       c996d79b8e356de1625ee3921d2dddc6
+# Source163-md5:       7574bb4401a0d58e14d63604083f4679
 Source164:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/nb-NO.xpi
-# Source164-md5:       87a94bb3a314529f235a107c804fdedb
+# Source164-md5:       f7ec27457902b51ebc88b7f6f454d1b2
 Source165:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/ne-NP.xpi
-# Source165-md5:       3539d85d09e87f485f29abba29ae1aff
+# Source165-md5:       7ac80b6889c5118a8bbf46ebb910d62c
 Source166:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/nl.xpi
-# Source166-md5:       ac058fccf56d029b2af1985a9f094610
+# Source166-md5:       6444d21f72b2a0eb90a7c16a78028bbb
 Source167:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/nn-NO.xpi
-# Source167-md5:       cf6fa95de021845f50a3209c8cece59a
+# Source167-md5:       f2f56c52073d82cd3d7b71c6b55a6136
 Source168:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/oc.xpi
-# Source168-md5:       55c784fc005ce3d7a9e522dc087943be
+# Source168-md5:       eade434e518fa031f5c33f73c1b9a51b
 Source169:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/pa-IN.xpi
-# Source169-md5:       437e37af9a1ef0e6741bd87954ecbd41
+# Source169-md5:       d9c21c61173a9c2efca62caef1f16b08
 Source170:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/pl.xpi
-# Source170-md5:       a3929c9df9901c6372f8783bc18f1cca
+# Source170-md5:       b11212ba7a2377e9e60b182536ae904a
 Source171:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/pt-BR.xpi
-# Source171-md5:       87317bc7382c61c2152cf78d9b134bcd
+# Source171-md5:       d1c250051a3382ceddaa5377b49e7417
 Source172:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/pt-PT.xpi
-# Source172-md5:       693fd77a56876fed7f89989f71710005
+# Source172-md5:       4fc091c4747919fb3feddb9fba30f993
 Source173:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/rm.xpi
-# Source173-md5:       1c54aaf3026c9889ebef4280e4a720bf
+# Source173-md5:       ceca29f63aed3efe2795c138d9fc35de
 Source174:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/ro.xpi
-# Source174-md5:       fe01d1a93ffe86cd76026ac9649d0799
+# Source174-md5:       acfc5abe50ac1d52a8f12c6a5aa03e38
 Source175:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/ru.xpi
-# Source175-md5:       9ecf9e3818d9ca5e0c87d6c0f00d03fe
+# Source175-md5:       5995aceda14bba8deb7fb2f66544a64f
 Source176:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/sco.xpi
-# Source176-md5:       79f5577dd3e0ce9b6d6882244483f5fd
+# Source176-md5:       8d645fb31310a2f0ab72fb293becd8a2
 Source177:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/si.xpi
-# Source177-md5:       a0e9c906c80a5dd3f8e0813f51f1c062
+# Source177-md5:       9b9c3dc8fc8dc380bb7cd145ebd586f2
 Source178:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/sk.xpi
-# Source178-md5:       368f5dea2377b1be9296f59f37416597
+# Source178-md5:       bf1b8f0ae83d863a7bf9f0658c6b6930
 Source179:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/sl.xpi
-# Source179-md5:       4fa82ef7749e2f6c16fe13d0828bb82a
+# Source179-md5:       1ece8d3faeb2cc784196dd8ba1cf4bad
 Source180:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/son.xpi
-# Source180-md5:       1cb3a692be4ea6ae8e267df148881223
+# Source180-md5:       fe5ea3d8e8f133824a800c854887f4a2
 Source181:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/sq.xpi
-# Source181-md5:       f6b3156c0613503e094df847d24db234
+# Source181-md5:       46c0341db3e68de63dc61e9f5b22b957
 Source182:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/sr.xpi
-# Source182-md5:       ca9a2050c891d9fb0be859070341c099
+# Source182-md5:       8cdcf5330559e9adff88f92816b63a84
 Source183:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/sv-SE.xpi
-# Source183-md5:       cd332c37218db8a1f958c1f72f83a375
+# Source183-md5:       e788221942f3ba52a3fe82a2861bbdff
 Source184:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/szl.xpi
-# Source184-md5:       31f36687451b239ac15aed4615e0c53f
+# Source184-md5:       9a7e06d9f05ae1d92f138e5f11874fc1
 Source185:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/ta.xpi
-# Source185-md5:       3c72599a9b02772f948f8301a5273b7b
+# Source185-md5:       a1cbb139a80308da22028ca26ad7154a
 Source186:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/te.xpi
-# Source186-md5:       2a280ffedfbb882134866ffdaac9fba3
+# Source186-md5:       960a5fd35cf5314c9ade7b6ce52d95ae
 Source187:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/th.xpi
-# Source187-md5:       538286e8855aa822f18527b253a68809
+# Source187-md5:       dfec0ea32e44fe456ec84222a620869e
 Source188:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/tl.xpi
-# Source188-md5:       abbca6b686397c1430fb58674b179c38
+# Source188-md5:       8e807648cd13ebe8a0c289daf4b41071
 Source189:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/tr.xpi
-# Source189-md5:       474aa0477a948f87cf90892e0d7609f0
+# Source189-md5:       c8812891ac09081d91fa3a6a56d09980
 Source190:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/trs.xpi
-# Source190-md5:       6ed092709dc7aab4fdbcfb30c504728f
+# Source190-md5:       0682f3f97cfab9051405be76b0ecbb07
 Source191:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/uk.xpi
-# Source191-md5:       c0c38d8c488435d89835a87d976e9d60
+# Source191-md5:       a081c82d32ea5b64cbacaf017a9c200f
 Source192:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/ur.xpi
-# Source192-md5:       3778d0cca19ae74a500857e5d9d697df
+# Source192-md5:       3c5f093aa05eb45c30ee7a07b9f0375b
 Source193:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/uz.xpi
-# Source193-md5:       fa1e4d2c73d887e97220a7ce4da67ab1
+# Source193-md5:       5afa58e3004282725c4ff28925091cbf
 Source194:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/vi.xpi
-# Source194-md5:       d6f2441394aad99fe7ad2b26fbb94302
+# Source194-md5:       8a4b95f5adb51b5cde86f51aa08ef4ac
 Source195:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/xh.xpi
-# Source195-md5:       4d8b5d743e0a5f24d2b7bf0ee446a9ce
+# Source195-md5:       51973b8ef14d35fad1d70c01444f6caf
 Source196:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/zh-CN.xpi
-# Source196-md5:       efdcd582bc31785c6d3696a8cc82196c
+# Source196-md5:       9296e3c3b413adf9ae3468650e7b001f
 Source197:     https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/zh-TW.xpi
-# Source197-md5:       b56141fdca72715f6abbf895037dd64a
+# Source197-md5:       373aef139a1f4e9b88bbd1e5a0779bd1
 Patch0:                x86-flags.patch
-Patch1:                uniffi.patch
 Patch4:                %{name}-prefs.patch
 Patch5:                %{name}-pld-bookmarks.patch
 Patch6:                %{name}-no-subshell.patch
@@ -2120,7 +2119,6 @@ unpack() {
 %setup -q %(seq -f '-a %g' 100 197 | xargs)
 
 %patch0 -p1
-%patch1 -p1
 %patch4 -p1
 %patch5 -p1
 %patch6 -p2
diff --git a/uniffi.patch b/uniffi.patch
deleted file mode 100644 (file)
index 0948f4f..0000000
+++ /dev/null
@@ -1,2236 +0,0 @@
-
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1671490349 0
-# Node ID 42d532d3de54ece48fd29b0b07d160f0ec957b21
-# Parent  0a143142f96de8d71c894c0aa28300c5afc731bb
-Bug 1805809 - Update uniffi to 0.21.1 for more determinism across platforms. r=janerik,supply-chain-reviewers a=RyanVM
-
-Differential Revision: https://phabricator.services.mozilla.com/D164896
-
-diff --git a/Cargo.lock b/Cargo.lock
---- a/Cargo.lock
-+++ b/Cargo.lock
-@@ -5764,19 +5764,19 @@ checksum = "3ed742d4ea2bd1176e236172c842
- [[package]]
- name = "unicode-xid"
- version = "0.2.3"
- source = "registry+https://github.com/rust-lang/crates.io-index"
- checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04"
- [[package]]
- name = "uniffi"
--version = "0.21.0"
--source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "f54af5ada67d1173457a99a7bb44a7917f63e7466764cb4714865c7a6678b830"
-+version = "0.21.1"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "b983553c0d1ad73547c65fa0c399aa800bee4a70ad330198e1c7a523212da5ee"
- dependencies = [
-  "anyhow",
-  "bytes 1.2.1",
-  "camino",
-  "cargo_metadata",
-  "log",
-  "once_cell",
-  "paste",
-@@ -5874,19 +5874,17 @@ dependencies = [
-  "uniffi",
-  "uniffi-example-geometry",
-  "uniffi_build",
-  "uniffi_macros",
- ]
- [[package]]
- name = "uniffi_bindgen"
--version = "0.21.0"
--source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "12cc4af3c0180c7e86c4a3acf2b6587af04ba2567b1e948993df10f421796621"
-+version = "0.21.1"
- dependencies = [
-  "anyhow",
-  "askama",
-  "bincode",
-  "camino",
-  "clap",
-  "fs-err",
-  "goblin 0.5.4",
-@@ -5897,51 +5895,63 @@ dependencies = [
-  "serde_json",
-  "toml",
-  "uniffi_meta",
-  "weedle2",
- ]
- [[package]]
- name = "uniffi_build"
--version = "0.21.0"
--source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "510287c368a9386eb731ebe824a6fc6c82a105e20d020af1aa20519c1c1561db"
-+version = "0.21.1"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "d035e50433ee3d52ab0dcdcf3b9b26f2cc2ec39294b3c07d95865a518709455f"
- dependencies = [
-  "anyhow",
-  "camino",
-  "uniffi_bindgen",
- ]
- [[package]]
-+name = "uniffi_checksum_derive"
-+version = "0.21.1"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "78b6e16d46caf942016997af8bbdf4b163bf8ae3deb0b667d9643de7b7ffd4c9"
-+dependencies = [
-+ "quote",
-+ "syn",
-+]
-+
-+[[package]]
- name = "uniffi_macros"
--version = "0.21.0"
--source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "5c8604503caa2cbcf271578dc51ca236d40e3b22e1514ffa2e638e2c39f6ad10"
-+version = "0.21.1"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "c96a574677566f83ea8458dac1dd7792fd63e7c3f9dbcd865f0e8d6f8057b127"
- dependencies = [
-  "bincode",
-  "camino",
-  "fs-err",
-  "once_cell",
-  "proc-macro2",
-  "quote",
-  "serde",
-  "syn",
-  "toml",
-  "uniffi_build",
-  "uniffi_meta",
- ]
- [[package]]
- name = "uniffi_meta"
--version = "0.21.0"
--source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "cd9417cc653937681436b93838d8c5f97a5b8c58697813982ee8810bd1dc3b57"
-+version = "0.21.1"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "729835442da829c9b6f7c111c76cf87b2498e129101203bec94f0c39a3296a38"
- dependencies = [
-  "serde",
-+ "siphasher",
-+ "uniffi_checksum_derive",
- ]
- [[package]]
- name = "unix_path"
- version = "1.0.1"
- source = "registry+https://github.com/rust-lang/crates.io-index"
- checksum = "af8e291873ae77c4c8d9c9b34d0bee68a35b048fb39c263a5155e0e353783eaf"
- dependencies = [
-diff --git a/Cargo.toml b/Cargo.toml
---- a/Cargo.toml
-+++ b/Cargo.toml
-@@ -175,13 +175,17 @@ path = "third_party/rust/mio-0.6.23"
- # These are used to test UniFFI functionality.  We haven't figured out how we
- # want to publish these yet, so they are only accessible via git.  This works
- # okay, but it means that their dependencies on UniFFI crates will normally
- # also be the git versions.  Patch them to use the published versions to avoid
- # duplicate crates.
- [patch."https://github.com/mozilla/uniffi-rs.git"]
--uniffi = "=0.21.0"
--uniffi_bindgen = "=0.21.0"
--uniffi_build = "=0.21.0"
--uniffi_macros = "=0.21.0"
-+uniffi = "=0.21.1"
-+#uniffi_bindgen = "=0.21.1"
-+uniffi_build = "=0.21.1"
-+uniffi_macros = "=0.21.1"
- weedle2 = "=4.0.0"
-+
-+# Patched to use uniffi_version = 0.21.0 for checksums.
-+[patch.crates-io.uniffi_bindgen]
-+path = "third_party/rust/uniffi_bindgen"
-diff --git a/supply-chain/audits.toml b/supply-chain/audits.toml
---- a/supply-chain/audits.toml
-+++ b/supply-chain/audits.toml
-@@ -1469,16 +1469,22 @@ criteria = "safe-to-deploy"
- delta = "0.19.6 -> 0.20.0"
- [[audits.uniffi]]
- who = "Jan-Erik Rediger <jrediger@mozilla.com>"
- criteria = "safe-to-deploy"
- delta = "0.20.0 -> 0.21.0"
- notes = "Maintained by the Glean and Application Services team."
-+[[audits.uniffi]]
-+who = "Mike Hommey <mh+mozilla@glandium.org>"
-+criteria = "safe-to-deploy"
-+delta = "0.21.0 -> 0.21.1"
-+notes = "No changes."
-+
- [[audits.uniffi_bindgen]]
- who = "Travis Long <tlong@mozilla.com>"
- criteria = "safe-to-deploy"
- version = "0.19.3"
- notes = "Maintained by the Glean and Application Services teams."
- [[audits.uniffi_bindgen]]
- who = "Jan-Erik Rediger <jrediger@mozilla.com>"
-@@ -1492,16 +1498,22 @@ criteria = "safe-to-deploy"
- delta = "0.19.6 -> 0.20.0"
- [[audits.uniffi_bindgen]]
- who = "Jan-Erik Rediger <jrediger@mozilla.com>"
- criteria = "safe-to-deploy"
- delta = "0.20.0 -> 0.21.0"
- notes = "Maintained by the Glean and Application Services team."
-+[[audits.uniffi_bindgen]]
-+who = "Mike Hommey <mh+mozilla@glandium.org>"
-+criteria = "safe-to-deploy"
-+delta = "0.21.0 -> 0.21.1"
-+notes = "I authored the changes in this version."
-+
- [[audits.uniffi_build]]
- who = "Travis Long <tlong@mozilla.com>"
- criteria = "safe-to-deploy"
- version = "0.19.3"
- notes = "Maintained by the Glean and Application Services teams."
- [[audits.uniffi_build]]
- who = "Jan-Erik Rediger <jrediger@mozilla.com>"
-@@ -1515,16 +1527,28 @@ criteria = "safe-to-deploy"
- delta = "0.19.6 -> 0.20.0"
- [[audits.uniffi_build]]
- who = "Jan-Erik Rediger <jrediger@mozilla.com>"
- criteria = "safe-to-deploy"
- delta = "0.20.0 -> 0.21.0"
- notes = "Maintained by the Glean and Application Services team."
-+[[audits.uniffi_build]]
-+who = "Mike Hommey <mh+mozilla@glandium.org>"
-+criteria = "safe-to-deploy"
-+delta = "0.21.0 -> 0.21.1"
-+notes = "No changes."
-+
-+[[audits.uniffi_checksum_derive]]
-+who = "Mike Hommey <mh+mozilla@glandium.org>"
-+criteria = "safe-to-deploy"
-+version = "0.21.1"
-+notes = "I authored this crate."
-+
- [[audits.uniffi_macros]]
- who = "Travis Long <tlong@mozilla.com>"
- criteria = "safe-to-deploy"
- version = "0.19.3"
- notes = "Maintained by the Glean and Application Services teams."
- [[audits.uniffi_macros]]
- who = "Jan-Erik Rediger <jrediger@mozilla.com>"
-@@ -1538,16 +1562,22 @@ criteria = "safe-to-deploy"
- delta = "0.19.6 -> 0.20.0"
- [[audits.uniffi_macros]]
- who = "Jan-Erik Rediger <jrediger@mozilla.com>"
- criteria = "safe-to-deploy"
- delta = "0.20.0 -> 0.21.0"
- notes = "Maintained by the Glean and Application Services team."
-+[[audits.uniffi_macros]]
-+who = "Mike Hommey <mh+mozilla@glandium.org>"
-+criteria = "safe-to-deploy"
-+delta = "0.21.0 -> 0.21.1"
-+notes = "No changes."
-+
- [[audits.uniffi_meta]]
- who = "Jan-Erik Rediger <jrediger@mozilla.com>"
- criteria = "safe-to-deploy"
- version = "0.19.6"
- notes = "Maintained by the Glean and Application Services team."
- [[audits.uniffi_meta]]
- who = "Perry McManis <pmcmanis@mozilla.com>"
-@@ -1555,16 +1585,22 @@ criteria = "safe-to-deploy"
- delta = "0.19.6 -> 0.20.0"
- [[audits.uniffi_meta]]
- who = "Jan-Erik Rediger <jrediger@mozilla.com>"
- criteria = "safe-to-deploy"
- delta = "0.20.0 -> 0.21.0"
- notes = "Maintained by the Glean and Application Services team."
-+[[audits.uniffi_meta]]
-+who = "Mike Hommey <mh+mozilla@glandium.org>"
-+criteria = "safe-to-deploy"
-+delta = "0.21.0 -> 0.21.1"
-+notes = "I authored the changes in this version."
-+
- [[audits.void]]
- who = "Bobby Holley <bobbyholley@gmail.com>"
- criteria = "safe-to-deploy"
- version = "1.0.2"
- notes = "Very small crate, just hosts the Void type for easier cross-crate interfacing."
- [[audits.wasm-encoder]]
- who = "Ryan Hunt <rhunt@eqrion.net>"
-diff --git a/supply-chain/config.toml b/supply-chain/config.toml
---- a/supply-chain/config.toml
-+++ b/supply-chain/config.toml
-@@ -149,16 +149,20 @@ notes = "We're not shipping this and hav
- [policy.storage]
- audit-as-crates-io = false
- notes = "This is a first-party crate which is entirely unrelated to the crates.io package of the same name."
- [policy.tabs]
- audit-as-crates-io = false
- 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."
-+[policy.uniffi_bindgen]
-+audit-as-crates-io = false
-+notes = "This is a first-party crate, normally vendored, but currently patched in-tree until next update."
-+
- [policy.viaduct]
- audit-as-crates-io = false
- 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."
- [policy.webdriver]
- audit-as-crates-io = false
- criteria = "safe-to-run"
- 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."
-diff --git a/third_party/rust/uniffi/.cargo-checksum.json b/third_party/rust/uniffi/.cargo-checksum.json
---- a/third_party/rust/uniffi/.cargo-checksum.json
-+++ b/third_party/rust/uniffi/.cargo-checksum.json
-@@ -1,1 +1,1 @@
--{"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"}
-\ No newline at end of file
-+{"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"}
-\ No newline at end of file
-diff --git a/third_party/rust/uniffi/Cargo.toml b/third_party/rust/uniffi/Cargo.toml
---- a/third_party/rust/uniffi/Cargo.toml
-+++ b/third_party/rust/uniffi/Cargo.toml
-@@ -7,28 +7,27 @@
- #
- # If you are reading this file be aware that the original Cargo.toml
- # will likely look very different (and much more reasonable).
- # See Cargo.toml.orig for the original contents.
- [package]
- edition = "2021"
- name = "uniffi"
--version = "0.21.0"
-+version = "0.21.1"
- authors = ["Firefox Sync Team <sync-team@mozilla.com>"]
- description = "a multi-language bindings generator for rust (runtime support code)"
- homepage = "https://mozilla.github.io/uniffi-rs"
- documentation = "https://mozilla.github.io/uniffi-rs"
- keywords = [
-     "ffi",
-     "bindgen",
- ]
- license = "MPL-2.0"
- repository = "https://github.com/mozilla/uniffi-rs"
--resolver = "2"
- [dependencies.anyhow]
- version = "1"
- [dependencies.bytes]
- version = "1.0"
- [dependencies.camino]
-@@ -45,20 +44,20 @@ version = "1.12"
- [dependencies.paste]
- version = "1.0"
- [dependencies.static_assertions]
- version = "1.1.0"
- [dependencies.uniffi_bindgen]
--version = "=0.21.0"
-+version = "=0.21.1"
- optional = true
- [dependencies.uniffi_macros]
--version = "=0.21.0"
-+version = "=0.21.1"
- [dev-dependencies.trybuild]
- version = "1"
- [features]
- builtin-bindgen = ["uniffi_bindgen"]
- default = []
-diff --git a/third_party/rust/uniffi_bindgen/.cargo-checksum.json b/third_party/rust/uniffi_bindgen/.cargo-checksum.json
---- a/third_party/rust/uniffi_bindgen/.cargo-checksum.json
-+++ b/third_party/rust/uniffi_bindgen/.cargo-checksum.json
-@@ -1,1 +1,1 @@
--{"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"}
-\ No newline at end of file
-+{"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"}
-\ No newline at end of file
-diff --git a/third_party/rust/uniffi_bindgen/Cargo.lock b/third_party/rust/uniffi_bindgen/Cargo.lock
---- a/third_party/rust/uniffi_bindgen/Cargo.lock
-+++ b/third_party/rust/uniffi_bindgen/Cargo.lock
-@@ -1,17 +1,17 @@
- # This file is automatically @generated by Cargo.
- # It is not intended for manual editing.
- version = 3
- [[package]]
- name = "anyhow"
--version = "1.0.65"
-+version = "1.0.66"
- source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "98161a4e3e2184da77bb14f02184cdd111e83bbbcc9979dfee3c44b9a85f5602"
-+checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6"
- [[package]]
- name = "askama"
- version = "0.11.1"
- source = "registry+https://github.com/rust-lang/crates.io-index"
- checksum = "fb98f10f371286b177db5eeb9a6e5396609555686a35e1d4f7b9a9c6d8af0139"
- dependencies = [
-  "askama_derive",
-@@ -94,19 +94,19 @@ checksum = "88ad0e1e3e88dd237a156ab9f571
- [[package]]
- name = "cfg-if"
- version = "1.0.0"
- source = "registry+https://github.com/rust-lang/crates.io-index"
- checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
- [[package]]
- name = "clap"
--version = "3.2.22"
-+version = "3.2.23"
- source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "86447ad904c7fb335a790c9d7fe3d0d971dc523b8ccd1561a520de9a85302750"
-+checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5"
- dependencies = [
-  "atty",
-  "bitflags",
-  "clap_derive",
-  "clap_lex",
-  "indexmap",
-  "once_cell",
-  "strsim",
-@@ -133,19 +133,19 @@ version = "0.2.4"
- source = "registry+https://github.com/rust-lang/crates.io-index"
- checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
- dependencies = [
-  "os_str_bytes",
- ]
- [[package]]
- name = "fs-err"
--version = "2.8.1"
-+version = "2.9.0"
- source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "64db3e262960f0662f43a6366788d5f10f7f244b8f7d7d987f560baf5ded5c50"
-+checksum = "0845fa252299212f0389d64ba26f34fa32cfe41588355f21ed507c59a0f64541"
- [[package]]
- name = "goblin"
- version = "0.5.4"
- source = "registry+https://github.com/rust-lang/crates.io-index"
- checksum = "a7666983ed0dd8d21a6f6576ee00053ca0926fb281a5522577a4dbd0f1b54143"
- dependencies = [
-  "log",
-@@ -171,35 +171,35 @@ version = "0.1.19"
- source = "registry+https://github.com/rust-lang/crates.io-index"
- checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
- dependencies = [
-  "libc",
- ]
- [[package]]
- name = "indexmap"
--version = "1.9.1"
-+version = "1.9.2"
- source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e"
-+checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
- dependencies = [
-  "autocfg",
-  "hashbrown",
- ]
- [[package]]
- name = "itoa"
- version = "1.0.4"
- source = "registry+https://github.com/rust-lang/crates.io-index"
- checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc"
- [[package]]
- name = "libc"
--version = "0.2.135"
-+version = "0.2.138"
- source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "68783febc7782c6c5cb401fbda4de5a9898be1762314da0bb2c10ced61f18b0c"
-+checksum = "db6d7e329c562c5dfab7a46a2afabc8b987ab9a4834c9d1ca04dc54c1546cef8"
- [[package]]
- name = "log"
- version = "0.4.17"
- source = "registry+https://github.com/rust-lang/crates.io-index"
- checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
- dependencies = [
-  "cfg-if",
-@@ -240,31 +240,31 @@ source = "registry+https://github.com/ru
- checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36"
- dependencies = [
-  "memchr",
-  "minimal-lexical",
- ]
- [[package]]
- name = "once_cell"
--version = "1.15.0"
-+version = "1.16.0"
- source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1"
-+checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860"
- [[package]]
- name = "os_str_bytes"
--version = "6.3.0"
-+version = "6.4.1"
- source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "9ff7415e9ae3fff1225851df9e0d9e4e5479f947619774677a63572e55e80eff"
-+checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee"
- [[package]]
- name = "paste"
--version = "1.0.9"
-+version = "1.0.10"
- source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "b1de2e551fb905ac83f73f7aedf2f0cb4a0da7e35efa24a202a936269f1f18e1"
-+checksum = "cf1c2c742266c2f1041c914ba65355a83ae8747b05f208319784083583494b4b"
- [[package]]
- name = "plain"
- version = "0.2.3"
- source = "registry+https://github.com/rust-lang/crates.io-index"
- checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6"
- [[package]]
-@@ -288,19 +288,19 @@ checksum = "a1be40180e52ecc98ad80b184934
- dependencies = [
-  "proc-macro2",
-  "quote",
-  "version_check",
- ]
- [[package]]
- name = "proc-macro2"
--version = "1.0.46"
-+version = "1.0.47"
- source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "94e2ef8dbfc347b10c094890f778ee2e36ca9bb4262e86dc99cd217e35f3470b"
-+checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725"
- dependencies = [
-  "unicode-ident",
- ]
- [[package]]
- name = "quote"
- version = "1.0.21"
- source = "registry+https://github.com/rust-lang/crates.io-index"
-@@ -332,56 +332,62 @@ checksum = "bdbda6ac5cd1321e724fa9cee216
- dependencies = [
-  "proc-macro2",
-  "quote",
-  "syn",
- ]
- [[package]]
- name = "serde"
--version = "1.0.145"
-+version = "1.0.150"
- source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b"
-+checksum = "e326c9ec8042f1b5da33252c8a37e9ffbd2c9bef0155215b6e6c80c790e05f91"
- dependencies = [
-  "serde_derive",
- ]
- [[package]]
- name = "serde_derive"
--version = "1.0.145"
-+version = "1.0.150"
- source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c"
-+checksum = "42a3df25b0713732468deadad63ab9da1f1fd75a48a15024b50363f128db627e"
- dependencies = [
-  "proc-macro2",
-  "quote",
-  "syn",
- ]
- [[package]]
- name = "serde_json"
--version = "1.0.86"
-+version = "1.0.89"
- source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "41feea4228a6f1cd09ec7a3593a682276702cd67b5273544757dae23c096f074"
-+checksum = "020ff22c755c2ed3f8cf162dbb41a7268d934702f3ed3631656ea597e08fc3db"
- dependencies = [
-  "itoa",
-  "ryu",
-  "serde",
- ]
- [[package]]
-+name = "siphasher"
-+version = "0.3.10"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
-+
-+[[package]]
- name = "strsim"
- version = "0.10.0"
- source = "registry+https://github.com/rust-lang/crates.io-index"
- checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
- [[package]]
- name = "syn"
--version = "1.0.102"
-+version = "1.0.105"
- source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "3fcd952facd492f9be3ef0d0b7032a6e442ee9b361d4acc2b1d0c4aaa5f613a1"
-+checksum = "60b9b43d45702de4c839cb9b51d9f529c5dd26a4aff255b42b1ebc03e88ee908"
- dependencies = [
-  "proc-macro2",
-  "quote",
-  "unicode-ident",
- ]
- [[package]]
- name = "termcolor"
-@@ -389,25 +395,25 @@ version = "1.1.3"
- source = "registry+https://github.com/rust-lang/crates.io-index"
- checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
- dependencies = [
-  "winapi-util",
- ]
- [[package]]
- name = "textwrap"
--version = "0.15.1"
-+version = "0.16.0"
- source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "949517c0cf1bf4ee812e2e07e08ab448e3ae0d23472aee8a06c985f0c8815b16"
-+checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
- [[package]]
- name = "toml"
--version = "0.5.9"
-+version = "0.5.10"
- source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7"
-+checksum = "1333c76748e868a4d9d1017b5ab53171dfd095f70c712fdb4653a406547f598f"
- dependencies = [
-  "serde",
- ]
- [[package]]
- name = "unicase"
- version = "2.6.0"
- source = "registry+https://github.com/rust-lang/crates.io-index"
-@@ -419,17 +425,17 @@ dependencies = [
- [[package]]
- name = "unicode-ident"
- version = "1.0.5"
- source = "registry+https://github.com/rust-lang/crates.io-index"
- checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3"
- [[package]]
- name = "uniffi_bindgen"
--version = "0.21.0"
-+version = "0.21.1"
- dependencies = [
-  "anyhow",
-  "askama",
-  "bincode",
-  "camino",
-  "clap",
-  "fs-err",
-  "goblin",
-@@ -439,22 +445,34 @@ dependencies = [
-  "serde",
-  "serde_json",
-  "toml",
-  "uniffi_meta",
-  "weedle2",
- ]
- [[package]]
-+name = "uniffi_checksum_derive"
-+version = "0.21.1"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "78b6e16d46caf942016997af8bbdf4b163bf8ae3deb0b667d9643de7b7ffd4c9"
-+dependencies = [
-+ "quote",
-+ "syn",
-+]
-+
-+[[package]]
- name = "uniffi_meta"
--version = "0.21.0"
-+version = "0.21.1"
- source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "cd9417cc653937681436b93838d8c5f97a5b8c58697813982ee8810bd1dc3b57"
-+checksum = "729835442da829c9b6f7c111c76cf87b2498e129101203bec94f0c39a3296a38"
- dependencies = [
-  "serde",
-+ "siphasher",
-+ "uniffi_checksum_derive",
- ]
- [[package]]
- name = "version_check"
- version = "0.9.4"
- source = "registry+https://github.com/rust-lang/crates.io-index"
- checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
-diff --git a/third_party/rust/uniffi_bindgen/Cargo.toml b/third_party/rust/uniffi_bindgen/Cargo.toml
---- a/third_party/rust/uniffi_bindgen/Cargo.toml
-+++ b/third_party/rust/uniffi_bindgen/Cargo.toml
-@@ -7,28 +7,27 @@
- #
- # If you are reading this file be aware that the original Cargo.toml
- # will likely look very different (and much more reasonable).
- # See Cargo.toml.orig for the original contents.
- [package]
- edition = "2021"
- name = "uniffi_bindgen"
--version = "0.21.0"
-+version = "0.21.1"
- authors = ["Firefox Sync Team <sync-team@mozilla.com>"]
- description = "a multi-language bindings generator for rust (codegen and cli tooling)"
- homepage = "https://mozilla.github.io/uniffi-rs"
- documentation = "https://mozilla.github.io/uniffi-rs"
- keywords = [
-     "ffi",
-     "bindgen",
- ]
- license = "MPL-2.0"
- repository = "https://github.com/mozilla/uniffi-rs"
--resolver = "2"
- [[bin]]
- name = "uniffi-bindgen"
- path = "src/main.rs"
- [dependencies.anyhow]
- version = "1"
-@@ -71,12 +70,12 @@ version = "1"
- [dependencies.serde_json]
- version = "1.0.80"
- [dependencies.toml]
- version = "0.5"
- [dependencies.uniffi_meta]
--version = "=0.21.0"
-+version = "=0.21.1"
- [dependencies.weedle2]
- version = "4.0.0"
-diff --git a/third_party/rust/uniffi_bindgen/src/interface/attributes.rs b/third_party/rust/uniffi_bindgen/src/interface/attributes.rs
---- a/third_party/rust/uniffi_bindgen/src/interface/attributes.rs
-+++ b/third_party/rust/uniffi_bindgen/src/interface/attributes.rs
-@@ -10,23 +10,24 @@
- //! support. You can also use the [`parse_attributes`] function to parse an
- //! `ExtendedAttributeList` into a vec of same.
- //!
- //! We only support a small number of attributes, so it's manageable to have them
- //! all handled by a single abstraction. This might need to be refactored in future
- //! if we grow significantly more complicated attribute handling.
- use anyhow::{bail, Result};
-+use uniffi_meta::Checksum;
- /// Represents an attribute parsed from UDL, like `[ByRef]` or `[Throws]`.
- ///
- /// This is a convenience enum for parsing UDL attributes and erroring out if we encounter
- /// any unsupported ones. These don't convert directly into parts of a `ComponentInterface`, but
- /// may influence the properties of things like functions and arguments.
--#[derive(Debug, Clone, Hash)]
-+#[derive(Debug, Clone, Checksum)]
- pub(super) enum Attribute {
-     ByRef,
-     Enum,
-     Error,
-     Name(String),
-     SelfType(SelfType),
-     Threadsafe, // N.B. the `[Threadsafe]` attribute is deprecated and will be removed
-     Throws(String),
-@@ -114,17 +115,17 @@ where
-         validator(attr)?;
-     }
-     Ok(attrs)
- }
- /// Attributes that can be attached to an `enum` definition in the UDL.
- /// There's only one case here: using `[Error]` to mark an enum as an error class.
--#[derive(Debug, Clone, Hash, Default)]
-+#[derive(Debug, Clone, Checksum, Default)]
- pub(super) struct EnumAttributes(Vec<Attribute>);
- impl EnumAttributes {
-     pub fn contains_error_attr(&self) -> bool {
-         self.0.iter().any(|attr| attr.is_error())
-     }
- }
-@@ -150,17 +151,17 @@ impl<T: TryInto<EnumAttributes, Error = 
-         }
-     }
- }
- /// Represents UDL attributes that might appear on a function.
- ///
- /// This supports the `[Throws=ErrorName]` attribute for functions that
- /// can produce an error.
--#[derive(Debug, Clone, Hash, Default)]
-+#[derive(Debug, Clone, Checksum, Default)]
- pub(super) struct FunctionAttributes(Vec<Attribute>);
- impl FunctionAttributes {
-     pub(super) fn get_throws_err(&self) -> Option<&str> {
-         self.0.iter().find_map(|attr| match attr {
-             // This will hopefully return a helpful compilation error
-             // if the error is not defined.
-             Attribute::Throws(inner) => Some(inner.as_ref()),
-@@ -193,17 +194,17 @@ impl<T: TryInto<FunctionAttributes, Erro
-         }
-     }
- }
- /// Represents UDL attributes that might appear on a function argument.
- ///
- /// This supports the `[ByRef]` attribute for arguments that should be passed
- /// by reference in the generated Rust scaffolding.
--#[derive(Debug, Clone, Hash, Default)]
-+#[derive(Debug, Clone, Checksum, Default)]
- pub(super) struct ArgumentAttributes(Vec<Attribute>);
- impl ArgumentAttributes {
-     pub fn by_ref(&self) -> bool {
-         self.0.iter().any(|attr| matches!(attr, Attribute::ByRef))
-     }
- }
-@@ -228,17 +229,17 @@ impl<T: TryInto<ArgumentAttributes, Erro
-         match value {
-             None => Ok(Default::default()),
-             Some(v) => v.try_into(),
-         }
-     }
- }
- /// Represents UDL attributes that might appear on an `interface` definition.
--#[derive(Debug, Clone, Hash, Default)]
-+#[derive(Debug, Clone, Checksum, Default)]
- pub(super) struct InterfaceAttributes(Vec<Attribute>);
- impl InterfaceAttributes {
-     pub fn contains_enum_attr(&self) -> bool {
-         self.0.iter().any(|attr| attr.is_enum())
-     }
-     pub fn contains_error_attr(&self) -> bool {
-@@ -282,17 +283,17 @@ impl<T: TryInto<InterfaceAttributes, Err
-         }
-     }
- }
- /// Represents UDL attributes that might appear on a constructor.
- ///
- /// This supports the `[Throws=ErrorName]` attribute for constructors that can produce
- /// an error, and the `[Name=MethodName]` for non-default constructors.
--#[derive(Debug, Clone, Hash, Default)]
-+#[derive(Debug, Clone, Checksum, Default)]
- pub(super) struct ConstructorAttributes(Vec<Attribute>);
- impl ConstructorAttributes {
-     pub(super) fn get_throws_err(&self) -> Option<&str> {
-         self.0.iter().find_map(|attr| match attr {
-             // This will hopefully return a helpful compilation error
-             // if the error is not defined.
-             Attribute::Throws(inner) => Some(inner.as_ref()),
-@@ -321,17 +322,17 @@ impl TryFrom<&weedle::attribute::Extende
-         Ok(Self(attrs))
-     }
- }
- /// Represents UDL attributes that might appear on a method.
- ///
- /// This supports the `[Throws=ErrorName]` attribute for methods that can produce
- /// an error, and the `[Self=ByArc]` attribute for methods that take `Arc<Self>` as receiver.
--#[derive(Debug, Clone, Hash, Default)]
-+#[derive(Debug, Clone, Checksum, Default)]
- pub(super) struct MethodAttributes(Vec<Attribute>);
- impl MethodAttributes {
-     pub(super) fn get_throws_err(&self) -> Option<&str> {
-         self.0.iter().find_map(|attr| match attr {
-             // This will hopefully return a helpful compilation error
-             // if the error is not defined.
-             Attribute::Throws(inner) => Some(inner.as_ref()),
-@@ -370,17 +371,17 @@ impl<T: TryInto<MethodAttributes, Error 
-     }
- }
- /// Represents the different possible types of method call receiver.
- ///
- /// Actually we only support one of these right now, `[Self=ByArc]`.
- /// We might add more in future, e.g. a `[Self=ByRef]` if there are cases
- /// where we need to force the receiver to be taken by reference.
--#[derive(Debug, Clone, Hash)]
-+#[derive(Debug, Clone, Checksum)]
- pub(super) enum SelfType {
-     ByArc, // Method receiver is `Arc<Self>`.
- }
- impl TryFrom<&weedle::attribute::IdentifierOrString<'_>> for SelfType {
-     type Error = anyhow::Error;
-     fn try_from(nm: &weedle::attribute::IdentifierOrString<'_>) -> Result<Self, Self::Error> {
-         Ok(match nm {
-@@ -393,17 +394,17 @@ impl TryFrom<&weedle::attribute::Identif
-             }
-         })
-     }
- }
- /// Represents UDL attributes that might appear on a typedef
- ///
- /// This supports the `[External="crate_name"]` and `[Custom]` attributes for types.
--#[derive(Debug, Clone, Hash, Default)]
-+#[derive(Debug, Clone, Checksum, Default)]
- pub(super) struct TypedefAttributes(Vec<Attribute>);
- impl TypedefAttributes {
-     pub(super) fn get_crate_name(&self) -> String {
-         self.0
-             .iter()
-             .find_map(|attr| match attr {
-                 Attribute::External(crate_name) => Some(crate_name.clone()),
-diff --git a/third_party/rust/uniffi_bindgen/src/interface/callbacks.rs b/third_party/rust/uniffi_bindgen/src/interface/callbacks.rs
---- a/third_party/rust/uniffi_bindgen/src/interface/callbacks.rs
-+++ b/third_party/rust/uniffi_bindgen/src/interface/callbacks.rs
-@@ -28,29 +28,35 @@
- //! # };
- //! # "##)?;
- //! let callback = ci.get_callback_interface_definition("Example").unwrap();
- //! assert_eq!(callback.name(), "Example");
- //! assert_eq!(callback.methods()[0].name(), "hello");
- //! # Ok::<(), anyhow::Error>(())
- //! ```
--use std::hash::{Hash, Hasher};
--
- use anyhow::{bail, Result};
-+use uniffi_meta::Checksum;
- use super::ffi::{FFIArgument, FFIFunction, FFIType};
- use super::object::Method;
- use super::types::{Type, TypeIterator};
- use super::{APIConverter, ComponentInterface};
--#[derive(Debug, Clone)]
-+#[derive(Debug, Clone, Checksum)]
- pub struct CallbackInterface {
-     pub(super) name: String,
-     pub(super) methods: Vec<Method>,
-+    // We don't include the FFIFunc in the hash calculation, because:
-+    //  - it is entirely determined by the other fields,
-+    //    so excluding it is safe.
-+    //  - its `name` property includes a checksum derived from  the very
-+    //    hash value we're trying to calculate here, so excluding it
-+    //    avoids a weird circular depenendency in the calculation.
-+    #[checksum_ignore]
-     pub(super) ffi_init_callback: FFIFunction,
- }
- impl CallbackInterface {
-     fn new(name: String) -> CallbackInterface {
-         CallbackInterface {
-             name,
-             methods: Default::default(),
-@@ -83,29 +89,16 @@ impl CallbackInterface {
-         self.ffi_init_callback.return_type = None;
-     }
-     pub fn iter_types(&self) -> TypeIterator<'_> {
-         Box::new(self.methods.iter().flat_map(Method::iter_types))
-     }
- }
--impl Hash for CallbackInterface {
--    fn hash<H: Hasher>(&self, state: &mut H) {
--        // We don't include the FFIFunc in the hash calculation, because:
--        //  - it is entirely determined by the other fields,
--        //    so excluding it is safe.
--        //  - its `name` property includes a checksum derived from  the very
--        //    hash value we're trying to calculate here, so excluding it
--        //    avoids a weird circular depenendency in the calculation.
--        self.name.hash(state);
--        self.methods.hash(state);
--    }
--}
--
- impl APIConverter<CallbackInterface> for weedle::CallbackInterfaceDefinition<'_> {
-     fn convert(&self, ci: &mut ComponentInterface) -> Result<CallbackInterface> {
-         if self.attributes.is_some() {
-             bail!("callback interface attributes are not supported yet");
-         }
-         if self.inheritance.is_some() {
-             bail!("callback interface inheritence is not supported");
-         }
-diff --git a/third_party/rust/uniffi_bindgen/src/interface/enum_.rs b/third_party/rust/uniffi_bindgen/src/interface/enum_.rs
---- a/third_party/rust/uniffi_bindgen/src/interface/enum_.rs
-+++ b/third_party/rust/uniffi_bindgen/src/interface/enum_.rs
-@@ -72,27 +72,28 @@
- //! assert_eq!(e.variants()[0].fields().len(), 0);
- //! assert_eq!(e.variants()[1].name(), "One");
- //! assert_eq!(e.variants()[1].fields().len(), 1);
- //! assert_eq!(e.variants()[1].fields()[0].name(), "first");
- //! # Ok::<(), anyhow::Error>(())
- //! ```
- use anyhow::{bail, Result};
-+use uniffi_meta::Checksum;
- use super::record::Field;
- use super::types::{Type, TypeIterator};
- use super::{APIConverter, ComponentInterface};
- /// Represents an enum with named variants, each of which may have named
- /// and typed fields.
- ///
- /// Enums are passed across the FFI by serializing to a bytebuffer, with a
- /// i32 indicating the variant followed by the serialization of each field.
--#[derive(Debug, Clone, Hash)]
-+#[derive(Debug, Clone, Checksum)]
- pub struct Enum {
-     pub(super) name: String,
-     pub(super) variants: Vec<Variant>,
-     // "Flat" enums do not have, and will never have, variants with associated data.
-     pub(super) flat: bool,
- }
- impl Enum {
-@@ -169,17 +170,17 @@ impl APIConverter<Enum> for weedle::Inte
-             flat: false,
-         })
-     }
- }
- /// Represents an individual variant in an Enum.
- ///
- /// Each variant has a name and zero or more fields.
--#[derive(Debug, Clone, Default, Hash)]
-+#[derive(Debug, Clone, Default, Checksum)]
- pub struct Variant {
-     pub(super) name: String,
-     pub(super) fields: Vec<Field>,
- }
- impl Variant {
-     pub fn name(&self) -> &str {
-         &self.name
-diff --git a/third_party/rust/uniffi_bindgen/src/interface/error.rs b/third_party/rust/uniffi_bindgen/src/interface/error.rs
---- a/third_party/rust/uniffi_bindgen/src/interface/error.rs
-+++ b/third_party/rust/uniffi_bindgen/src/interface/error.rs
-@@ -78,28 +78,29 @@
- //! assert_eq!(err.variants()[2].fields().len(), 2);
- //! assert_eq!(err.variants()[2].fields()[0].name(), "x");
- //! assert_eq!(err.variants()[2].fields()[1].name(), "y");
- //! assert_eq!(err.is_flat(), false);
- //! # Ok::<(), anyhow::Error>(())
- //! ```
- use anyhow::Result;
-+use uniffi_meta::Checksum;
- use super::enum_::{Enum, Variant};
- use super::types::{Type, TypeIterator};
- use super::{APIConverter, ComponentInterface};
- /// Represents an Error that might be thrown by functions/methods in the component interface.
- ///
- /// Errors are represented in the UDL as enums with the special `[Error]` attribute, but
- /// they're handled in the FFI very differently. We create them in `uniffi::call_with_result()` if
- /// the wrapped function returns an `Err` value
- /// struct and assign an integer error code to each variant.
--#[derive(Debug, Clone, Hash)]
-+#[derive(Debug, Clone, Checksum)]
- pub struct Error {
-     pub name: String,
-     enum_: Enum,
- }
- impl Error {
-     pub fn from_enum(enum_: Enum) -> Self {
-         Self {
-diff --git a/third_party/rust/uniffi_bindgen/src/interface/function.rs b/third_party/rust/uniffi_bindgen/src/interface/function.rs
---- a/third_party/rust/uniffi_bindgen/src/interface/function.rs
-+++ b/third_party/rust/uniffi_bindgen/src/interface/function.rs
-@@ -27,40 +27,47 @@
- //! # "##)?;
- //! let func = ci.get_function_definition("hello").unwrap();
- //! assert_eq!(func.name(), "hello");
- //! assert!(matches!(func.return_type(), Some(Type::String)));
- //! assert_eq!(func.arguments().len(), 0);
- //! # Ok::<(), anyhow::Error>(())
- //! ```
- use std::convert::TryFrom;
--use std::hash::{Hash, Hasher};
- use anyhow::{bail, Result};
-+use uniffi_meta::Checksum;
- use super::ffi::{FFIArgument, FFIFunction};
- use super::literal::{convert_default_value, Literal};
- use super::types::{Type, TypeIterator};
- use super::{
-     attributes::{ArgumentAttributes, FunctionAttributes},
-     convert_type,
- };
- use super::{APIConverter, ComponentInterface};
- /// Represents a standalone function.
- ///
- /// Each `Function` corresponds to a standalone function in the rust module,
- /// and has a corresponding standalone function in the foreign language bindings.
- ///
- /// In the FFI, this will be a standalone function with appropriately lowered types.
--#[derive(Debug, Clone)]
-+#[derive(Debug, Clone, Checksum)]
- pub struct Function {
-     pub(super) name: String,
-     pub(super) arguments: Vec<Argument>,
-     pub(super) return_type: Option<Type>,
-+    // We don't include the FFIFunc in the hash calculation, because:
-+    //  - it is entirely determined by the other fields,
-+    //    so excluding it is safe.
-+    //  - its `name` property includes a checksum derived from  the very
-+    //    hash value we're trying to calculate here, so excluding it
-+    //    avoids a weird circular depenendency in the calculation.
-+    #[checksum_ignore]
-     pub(super) ffi_func: FFIFunction,
-     pub(super) attributes: FunctionAttributes,
- }
- impl Function {
-     pub fn name(&self) -> &str {
-         &self.name
-     }
-@@ -137,31 +144,16 @@ impl From<uniffi_meta::FnMetadata> for F
-             arguments,
-             return_type,
-             ffi_func,
-             attributes: Default::default(),
-         }
-     }
- }
--impl Hash for Function {
--    fn hash<H: Hasher>(&self, state: &mut H) {
--        // We don't include the FFIFunc in the hash calculation, because:
--        //  - it is entirely determined by the other fields,
--        //    so excluding it is safe.
--        //  - its `name` property includes a checksum derived from  the very
--        //    hash value we're trying to calculate here, so excluding it
--        //    avoids a weird circular depenendency in the calculation.
--        self.name.hash(state);
--        self.arguments.hash(state);
--        self.return_type.hash(state);
--        self.attributes.hash(state);
--    }
--}
--
- impl APIConverter<Function> for weedle::namespace::NamespaceMember<'_> {
-     fn convert(&self, ci: &mut ComponentInterface) -> Result<Function> {
-         match self {
-             weedle::namespace::NamespaceMember::Operation(f) => f.convert(ci),
-             _ => bail!("no support for namespace member type {:?} yet", self),
-         }
-     }
- }
-@@ -180,17 +172,17 @@ impl APIConverter<Function> for weedle::
-             attributes: FunctionAttributes::try_from(self.attributes.as_ref())?,
-         })
-     }
- }
- /// Represents an argument to a function/constructor/method call.
- ///
- /// Each argument has a name and a type, along with some optional metadata.
--#[derive(Debug, Clone, Hash)]
-+#[derive(Debug, Clone, Checksum)]
- pub struct Argument {
-     pub(super) name: String,
-     pub(super) type_: Type,
-     pub(super) by_ref: bool,
-     pub(super) optional: bool,
-     pub(super) default: Option<Literal>,
- }
-diff --git a/third_party/rust/uniffi_bindgen/src/interface/literal.rs b/third_party/rust/uniffi_bindgen/src/interface/literal.rs
---- a/third_party/rust/uniffi_bindgen/src/interface/literal.rs
-+++ b/third_party/rust/uniffi_bindgen/src/interface/literal.rs
-@@ -3,22 +3,23 @@
-  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- //! # Support for literal values.
- //!
- //! This module provides support for interpreting literal values from the UDL,
- //! which appear in places such as default arguments.
- use anyhow::{bail, Result};
-+use uniffi_meta::Checksum;
- use super::types::Type;
- // Represents a literal value.
- // Used for e.g. default argument values.
--#[derive(Debug, Clone, Hash)]
-+#[derive(Debug, Clone, Checksum)]
- pub enum Literal {
-     Boolean(bool),
-     String(String),
-     // Integers are represented as the widest representation we can.
-     // Number formatting vary with language and radix, so we avoid a lot of parsing and
-     // formatting duplication by using only signed and unsigned variants.
-     UInt(u64, Radix, Type),
-     Int(i64, Radix, Type),
-@@ -30,17 +31,17 @@ pub enum Literal {
-     Enum(String, Type),
-     EmptySequence,
-     EmptyMap,
-     Null,
- }
- // Represent the radix of integer literal values.
- // We preserve the radix into the generated bindings for readability reasons.
--#[derive(Debug, Clone, Copy, Hash)]
-+#[derive(Debug, Clone, Copy, Checksum)]
- pub enum Radix {
-     Decimal = 10,
-     Octal = 8,
-     Hexadecimal = 16,
- }
- pub(super) fn convert_default_value(
-     default_value: &weedle::literal::DefaultValue<'_>,
-diff --git a/third_party/rust/uniffi_bindgen/src/interface/mod.rs b/third_party/rust/uniffi_bindgen/src/interface/mod.rs
---- a/third_party/rust/uniffi_bindgen/src/interface/mod.rs
-+++ b/third_party/rust/uniffi_bindgen/src/interface/mod.rs
-@@ -39,22 +39,17 @@
- //!     guarantee that there's not some edge-case where it produces valid-but-incorrect code.
- //!
- //!   * There is a *lot* of cloning going on, in the spirit of "first make it work". There's probably
- //!     a good opportunity here for e.g. interned strings, but we're nowhere near the point were we need
- //!     that kind of optimization just yet.
- //!
- //!   * Error messages and general developer experience leave a lot to be desired.
--use std::{
--    collections::HashSet,
--    convert::TryFrom,
--    hash::{Hash, Hasher},
--    iter,
--};
-+use std::{collections::HashSet, convert::TryFrom, iter};
- use anyhow::{bail, Result};
- pub mod types;
- pub use types::Type;
- use types::{TypeIterator, TypeUniverse};
- mod attributes;
-@@ -72,47 +67,51 @@ mod namespace;
- pub use namespace::Namespace;
- mod object;
- pub use object::{Constructor, Method, Object};
- mod record;
- pub use record::{Field, Record};
- pub mod ffi;
- pub use ffi::{FFIArgument, FFIFunction, FFIType};
--use uniffi_meta::{MethodMetadata, ObjectMetadata};
-+use uniffi_meta::{Checksum, MethodMetadata, ObjectMetadata};
- /// The main public interface for this module, representing the complete details of an interface exposed
- /// by a rust component and the details of consuming it via an extern-C FFI layer.
- ///
--#[derive(Debug, Default)]
-+#[derive(Debug, Default, Checksum)]
- pub struct ComponentInterface {
-     /// Every ComponentInterface gets tagged with the version of uniffi used to create it.
-     /// This helps us avoid using a lib compiled with one version together with bindings created
-     /// using a different version, which might introduce unsafety.
-     uniffi_version: String,
-     /// All of the types used in the interface.
-+    // We can't checksum `self.types`, but its contents are implied by the other fields
-+    // anyway, so it's safe to ignore it.
-+    #[checksum_ignore]
-     pub(super) types: TypeUniverse,
-     /// The unique prefix that we'll use for namespacing when exposing this component's API.
-     namespace: String,
-     /// The internal unique prefix used to namespace FFI symbols
-+    #[checksum_ignore]
-     ffi_namespace: String,
-     /// The high-level API provided by the component.
-     enums: Vec<Enum>,
-     records: Vec<Record>,
-     functions: Vec<Function>,
-     objects: Vec<Object>,
-     callback_interfaces: Vec<CallbackInterface>,
-     errors: Vec<Error>,
- }
- impl ComponentInterface {
-     /// Parse a `ComponentInterface` from a string containing a WebIDL definition.
-     pub fn from_webidl(idl: &str) -> Result<Self> {
-         let mut ci = Self {
--            uniffi_version: env!("CARGO_PKG_VERSION").to_string(),
-+            uniffi_version: "0.21.0".to_string(),
-             ..Default::default()
-         };
-         // There's some lifetime thing with the errors returned from weedle::Definitions::parse
-         // that my own lifetime is too short to worry about figuring out; unwrap and move on.
-         // Note we use `weedle::Definitions::parse` instead of `weedle::parse` so
-         // on parse errors we can see how far weedle got, which helps locate the problem.
-         use weedle::Parse; // this trait must be in scope for parse to work.
-@@ -316,26 +315,18 @@ impl ComponentInterface {
-     /// version of that interface. It offers the following properties:
-     ///
-     ///   - Two ComponentIntefaces generated from the same WebIDL file, using the same version of uniffi
-     ///     and the same version of Rust, will always have the same checksum value.
-     ///   - Two ComponentInterfaces will, with high probability, have different checksum values if:
-     ///         - They were generated from two different WebIDL files.
-     ///         - They were generated by two different versions of uniffi
-     ///
--    /// The checksum may or may not change depending on the version of Rust used; since we expect
--    /// consumers to be using the same executable to generate both the scaffolding and the bindings,
--    /// assuming the same version of Rust seems acceptable.
--    ///
-     /// Note that this is designed to prevent accidents, not attacks, so there is no need for the
-     /// checksum to be cryptographically secure.
--    ///
--    /// TODO: it's not clear to me if the derivation of `Hash` is actually deterministic enough to
--    /// ensure the guarantees above, or if it might be sensitive to e.g. compiler-driven re-ordering
--    /// of struct field. Let's see how it goes...
-     pub fn checksum(&self) -> u16 {
-         uniffi_meta::checksum(self)
-     }
-     /// The namespace to use in FFI-level function definitions.
-     ///
-     /// The value returned by this method is used as a prefix to namespace all UDL-defined FFI
-     /// functions used in this ComponentInterface.
-@@ -667,33 +658,16 @@ impl ComponentInterface {
-         }
-         for callback in self.callback_interfaces.iter_mut() {
-             callback.derive_ffi_funcs(&ci_prefix);
-         }
-         Ok(())
-     }
- }
--/// `ComponentInterface` structs can be hashed, but this is mostly a convenient way to
--/// produce a checksum of their contents. They're not really intended to live in a hashtable.
--impl Hash for ComponentInterface {
--    fn hash<H: Hasher>(&self, state: &mut H) {
--        // We can't hash `self.types`, but its contents are implied by the other fields
--        // anyway, so it's safe to ignore it.
--        self.uniffi_version.hash(state);
--        self.namespace.hash(state);
--        self.enums.hash(state);
--        self.records.hash(state);
--        self.functions.hash(state);
--        self.objects.hash(state);
--        self.callback_interfaces.hash(state);
--        self.errors.hash(state);
--    }
--}
--
- fn get_or_insert_object<'a>(objects: &'a mut Vec<Object>, name: &str) -> &'a mut Object {
-     // The find-based way of writing this currently runs into a borrow checker
-     // error, so we use position
-     match objects.iter_mut().position(|o| o.name == name) {
-         Some(idx) => &mut objects[idx],
-         None => {
-             objects.push(Object::new(name.to_owned()));
-             objects.last_mut().unwrap()
-diff --git a/third_party/rust/uniffi_bindgen/src/interface/object.rs b/third_party/rust/uniffi_bindgen/src/interface/object.rs
---- a/third_party/rust/uniffi_bindgen/src/interface/object.rs
-+++ b/third_party/rust/uniffi_bindgen/src/interface/object.rs
-@@ -53,20 +53,20 @@
- //! # "##)?;
- //! let obj = ci.get_object_definition("Example").unwrap();
- //! assert_eq!(obj.name(), "Example");
- //! assert_eq!(obj.constructors().len(), 0);
- //! # Ok::<(), anyhow::Error>(())
- //! ```
- use std::convert::TryFrom;
--use std::hash::{Hash, Hasher};
- use std::{collections::HashSet, iter};
- use anyhow::{bail, Result};
-+use uniffi_meta::Checksum;
- use super::ffi::{FFIArgument, FFIFunction, FFIType};
- use super::function::Argument;
- use super::types::{Type, TypeIterator};
- use super::{
-     attributes::{ConstructorAttributes, InterfaceAttributes, MethodAttributes},
-     convert_type,
- };
-@@ -81,22 +81,30 @@ use super::{APIConverter, ComponentInter
- /// At the FFI layer, objects are represented by an opaque integer handle and a set of functions
- /// a common prefix. The object's constuctors are functions that return new objects by handle,
- /// and its methods are functions that take a handle as first argument. The foreign language
- /// binding code is expected to stitch these functions back together into an appropriate class
- /// definition (or that language's equivalent thereof).
- ///
- /// TODO:
- ///  - maybe "Class" would be a better name than "Object" here?
--#[derive(Debug, Clone)]
-+#[derive(Debug, Clone, Checksum)]
- pub struct Object {
-     pub(super) name: String,
-     pub(super) constructors: Vec<Constructor>,
-     pub(super) methods: Vec<Method>,
-+    // We don't include the FFIFunc in the hash calculation, because:
-+    //  - it is entirely determined by the other fields,
-+    //    so excluding it is safe.
-+    //  - its `name` property includes a checksum derived from  the very
-+    //    hash value we're trying to calculate here, so excluding it
-+    //    avoids a weird circular depenendency in the calculation.
-+    #[checksum_ignore]
-     pub(super) ffi_func_free: FFIFunction,
-+    #[checksum_ignore]
-     pub(super) uses_deprecated_threadsafe_attribute: bool,
- }
- impl Object {
-     pub(super) fn new(name: String) -> Object {
-         Object {
-             name,
-             constructors: Default::default(),
-@@ -185,30 +193,16 @@ impl Object {
-                 .iter()
-                 .map(Method::iter_types)
-                 .chain(self.constructors.iter().map(Constructor::iter_types))
-                 .flatten(),
-         )
-     }
- }
--impl Hash for Object {
--    fn hash<H: Hasher>(&self, state: &mut H) {
--        // We don't include the FFIFunc in the hash calculation, because:
--        //  - it is entirely determined by the other fields,
--        //    so excluding it is safe.
--        //  - its `name` property includes a checksum derived from  the very
--        //    hash value we're trying to calculate here, so excluding it
--        //    avoids a weird circular depenendency in the calculation.
--        self.name.hash(state);
--        self.constructors.hash(state);
--        self.methods.hash(state);
--    }
--}
--
- impl APIConverter<Object> for weedle::InterfaceDefinition<'_> {
-     fn convert(&self, ci: &mut ComponentInterface) -> Result<Object> {
-         if self.inheritance.is_some() {
-             bail!("interface inheritence is not supported");
-         }
-         let mut object = Object::new(self.identifier.0.to_string());
-         let attributes = match &self.attributes {
-             Some(attrs) => InterfaceAttributes::try_from(attrs)?,
-@@ -240,20 +234,27 @@ impl APIConverter<Object> for weedle::In
-         Ok(object)
-     }
- }
- // Represents a constructor for an object type.
- //
- // In the FFI, this will be a function that returns a pointer to an instance
- // of the corresponding object type.
--#[derive(Debug, Clone)]
-+#[derive(Debug, Clone, Checksum)]
- pub struct Constructor {
-     pub(super) name: String,
-     pub(super) arguments: Vec<Argument>,
-+    // We don't include the FFIFunc in the hash calculation, because:
-+    //  - it is entirely determined by the other fields,
-+    //    so excluding it is safe.
-+    //  - its `name` property includes a checksum derived from  the very
-+    //    hash value we're trying to calculate here, so excluding it
-+    //    avoids a weird circular depenendency in the calculation.
-+    #[checksum_ignore]
-     pub(super) ffi_func: FFIFunction,
-     pub(super) attributes: ConstructorAttributes,
- }
- impl Constructor {
-     pub fn name(&self) -> &str {
-         &self.name
-     }
-@@ -294,30 +295,16 @@ impl Constructor {
-         self.ffi_func.return_type = Some(FFIType::RustArcPtr(obj_name.to_string()));
-     }
-     pub fn iter_types(&self) -> TypeIterator<'_> {
-         Box::new(self.arguments.iter().flat_map(Argument::iter_types))
-     }
- }
--impl Hash for Constructor {
--    fn hash<H: Hasher>(&self, state: &mut H) {
--        // We don't include the FFIFunc in the hash calculation, because:
--        //  - it is entirely determined by the other fields,
--        //    so excluding it is safe.
--        //  - its `name` property includes a checksum derived from  the very
--        //    hash value we're trying to calculate here, so excluding it
--        //    avoids a weird circular depenendency in the calculation.
--        self.name.hash(state);
--        self.arguments.hash(state);
--        self.attributes.hash(state);
--    }
--}
--
- impl Default for Constructor {
-     fn default() -> Self {
-         Constructor {
-             name: String::from("new"),
-             arguments: Vec::new(),
-             ffi_func: Default::default(),
-             attributes: Default::default(),
-         }
-@@ -338,22 +325,29 @@ impl APIConverter<Constructor> for weedl
-         })
-     }
- }
- // Represents an instance method for an object type.
- //
- // The FFI will represent this as a function whose first/self argument is a
- // `FFIType::RustArcPtr` to the instance.
--#[derive(Debug, Clone)]
-+#[derive(Debug, Clone, Checksum)]
- pub struct Method {
-     pub(super) name: String,
-     pub(super) object_name: String,
-+    pub(super) arguments: Vec<Argument>,
-     pub(super) return_type: Option<Type>,
--    pub(super) arguments: Vec<Argument>,
-+    // We don't include the FFIFunc in the hash calculation, because:
-+    //  - it is entirely determined by the other fields,
-+    //    so excluding it is safe.
-+    //  - its `name` property includes a checksum derived from  the very
-+    //    hash value we're trying to calculate here, so excluding it
-+    //    avoids a weird circular depenendency in the calculation.
-+    #[checksum_ignore]
-     pub(super) ffi_func: FFIFunction,
-     pub(super) attributes: MethodAttributes,
- }
- impl Method {
-     pub fn name(&self) -> &str {
-         &self.name
-     }
-@@ -445,32 +439,16 @@ impl From<uniffi_meta::MethodMetadata> f
-             arguments,
-             return_type,
-             ffi_func,
-             attributes: Default::default(),
-         }
-     }
- }
--impl Hash for Method {
--    fn hash<H: Hasher>(&self, state: &mut H) {
--        // We don't include the FFIFunc in the hash calculation, because:
--        //  - it is entirely determined by the other fields,
--        //    so excluding it is safe.
--        //  - its `name` property includes a checksum derived from  the very
--        //    hash value we're trying to calculate here, so excluding it
--        //    avoids a weird circular depenendency in the calculation.
--        self.name.hash(state);
--        self.object_name.hash(state);
--        self.arguments.hash(state);
--        self.return_type.hash(state);
--        self.attributes.hash(state);
--    }
--}
--
- impl APIConverter<Method> for weedle::interface::OperationInterfaceMember<'_> {
-     fn convert(&self, ci: &mut ComponentInterface) -> Result<Method> {
-         if self.special.is_some() {
-             bail!("special operations not supported");
-         }
-         if self.modifier.is_some() {
-             bail!("method modifiers are not supported")
-         }
-diff --git a/third_party/rust/uniffi_bindgen/src/interface/record.rs b/third_party/rust/uniffi_bindgen/src/interface/record.rs
---- a/third_party/rust/uniffi_bindgen/src/interface/record.rs
-+++ b/third_party/rust/uniffi_bindgen/src/interface/record.rs
-@@ -40,30 +40,31 @@
- //! let record = ci.get_record_definition("Example").unwrap();
- //! assert_eq!(record.name(), "Example");
- //! assert_eq!(record.fields()[0].name(), "name");
- //! assert_eq!(record.fields()[1].name(), "value");
- //! # Ok::<(), anyhow::Error>(())
- //! ```
- use anyhow::{bail, Result};
-+use uniffi_meta::Checksum;
- use super::types::{Type, TypeIterator};
- use super::{
-     convert_type,
-     literal::{convert_default_value, Literal},
- };
- use super::{APIConverter, ComponentInterface};
- /// Represents a "data class" style object, for passing around complex values.
- ///
- /// In the FFI these are represented as a byte buffer, which one side explicitly
- /// serializes the data into and the other serializes it out of. So I guess they're
- /// kind of like "pass by clone" values.
--#[derive(Debug, Clone, Hash)]
-+#[derive(Debug, Clone, Checksum)]
- pub struct Record {
-     pub(super) name: String,
-     pub(super) fields: Vec<Field>,
- }
- impl Record {
-     pub fn name(&self) -> &str {
-         &self.name
-@@ -104,17 +105,17 @@ impl APIConverter<Record> for weedle::Di
-         Ok(Record {
-             name: self.identifier.0.to_string(),
-             fields: self.members.body.convert(ci)?,
-         })
-     }
- }
- // Represents an individual field on a Record.
--#[derive(Debug, Clone, Hash)]
-+#[derive(Debug, Clone, Checksum)]
- pub struct Field {
-     pub(super) name: String,
-     pub(super) type_: Type,
-     pub(super) required: bool,
-     pub(super) default: Option<Literal>,
- }
- impl Field {
-diff --git a/third_party/rust/uniffi_bindgen/src/interface/types/mod.rs b/third_party/rust/uniffi_bindgen/src/interface/types/mod.rs
---- a/third_party/rust/uniffi_bindgen/src/interface/types/mod.rs
-+++ b/third_party/rust/uniffi_bindgen/src/interface/types/mod.rs
-@@ -20,28 +20,29 @@
- //! As a developer working on UniFFI itself, you're likely to spend a fair bit of time thinking
- //! about how these API-level types map into the lower-level types of the FFI layer as represented
- //! by the [`ffi::FFIType`](super::ffi::FFIType) enum, but that's a detail that is invisible to end users.
- use std::{collections::hash_map::Entry, collections::BTreeSet, collections::HashMap, iter};
- use anyhow::{bail, Result};
- use heck::ToUpperCamelCase;
-+use uniffi_meta::Checksum;
- use super::ffi::FFIType;
- mod finder;
- pub(super) use finder::TypeFinder;
- mod resolver;
- pub(super) use resolver::{resolve_builtin_type, TypeResolver};
- /// Represents all the different high-level types that can be used in a component interface.
- /// At this level we identify user-defined types by name, without knowing any details
- /// of their internal structure apart from what type of thing they are (record, enum, etc).
--#[derive(Debug, Clone, Eq, PartialEq, Hash, Ord, PartialOrd)]
-+#[derive(Debug, Clone, Eq, PartialEq, Checksum, Ord, PartialOrd)]
- pub enum Type {
-     // Primitive types.
-     UInt8,
-     Int8,
-     UInt16,
-     Int16,
-     UInt32,
-     Int32,
-diff --git a/third_party/rust/uniffi_build/.cargo-checksum.json b/third_party/rust/uniffi_build/.cargo-checksum.json
---- a/third_party/rust/uniffi_build/.cargo-checksum.json
-+++ b/third_party/rust/uniffi_build/.cargo-checksum.json
-@@ -1,1 +1,1 @@
--{"files":{"Cargo.toml":"bf9105f53978ecdccad9a75fc3645f97982d3c4162a5a9b49ab16554162b51c1","src/lib.rs":"485a0c0ab99077a1d4037f4deec9801e87a248196e7589a002556fb84973528a"},"package":"510287c368a9386eb731ebe824a6fc6c82a105e20d020af1aa20519c1c1561db"}
-\ No newline at end of file
-+{"files":{"Cargo.toml":"30736876caf953bd0040b6c0fc824744556bf52fe23d656c7d01442d4c180674","src/lib.rs":"485a0c0ab99077a1d4037f4deec9801e87a248196e7589a002556fb84973528a"},"package":"d035e50433ee3d52ab0dcdcf3b9b26f2cc2ec39294b3c07d95865a518709455f"}
-\ No newline at end of file
-diff --git a/third_party/rust/uniffi_build/Cargo.toml b/third_party/rust/uniffi_build/Cargo.toml
---- a/third_party/rust/uniffi_build/Cargo.toml
-+++ b/third_party/rust/uniffi_build/Cargo.toml
-@@ -7,34 +7,33 @@
- #
- # If you are reading this file be aware that the original Cargo.toml
- # will likely look very different (and much more reasonable).
- # See Cargo.toml.orig for the original contents.
- [package]
- edition = "2021"
- name = "uniffi_build"
--version = "0.21.0"
-+version = "0.21.1"
- authors = ["Firefox Sync Team <sync-team@mozilla.com>"]
- description = "a multi-language bindings generator for rust (build script helpers)"
- homepage = "https://mozilla.github.io/uniffi-rs"
- documentation = "https://mozilla.github.io/uniffi-rs"
- keywords = [
-     "ffi",
-     "bindgen",
- ]
- license = "MPL-2.0"
- repository = "https://github.com/mozilla/uniffi-rs"
--resolver = "2"
- [dependencies.anyhow]
- version = "1"
- [dependencies.camino]
- version = "1.0.8"
- [dependencies.uniffi_bindgen]
--version = "=0.21.0"
-+version = "=0.21.1"
- optional = true
- [features]
- builtin-bindgen = ["uniffi_bindgen"]
- default = []
-diff --git a/third_party/rust/uniffi_checksum_derive/.cargo-checksum.json b/third_party/rust/uniffi_checksum_derive/.cargo-checksum.json
-new file mode 100644
---- /dev/null
-+++ b/third_party/rust/uniffi_checksum_derive/.cargo-checksum.json
-@@ -0,0 +1,1 @@
-+{"files":{"Cargo.toml":"2ab3c60724c4c504297f8876bf0a8d1291f76a2fc46f5e83634aa147e89ffc71","src/lib.rs":"c68c69a1cf6a69e5fe78f7b069364a265c5bb6ce8c0abf0b5745eca01c79604a"},"package":"78b6e16d46caf942016997af8bbdf4b163bf8ae3deb0b667d9643de7b7ffd4c9"}
-\ No newline at end of file
-diff --git a/third_party/rust/uniffi_checksum_derive/Cargo.toml b/third_party/rust/uniffi_checksum_derive/Cargo.toml
-new file mode 100644
---- /dev/null
-+++ b/third_party/rust/uniffi_checksum_derive/Cargo.toml
-@@ -0,0 +1,42 @@
-+# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
-+#
-+# When uploading crates to the registry Cargo will automatically
-+# "normalize" Cargo.toml files for maximal compatibility
-+# with all versions of Cargo and also rewrite `path` dependencies
-+# to registry (e.g., crates.io) dependencies.
-+#
-+# If you are reading this file be aware that the original Cargo.toml
-+# will likely look very different (and much more reasonable).
-+# See Cargo.toml.orig for the original contents.
-+
-+[package]
-+edition = "2021"
-+name = "uniffi_checksum_derive"
-+version = "0.21.1"
-+authors = ["Firefox Sync Team <sync-team@mozilla.com>"]
-+description = "a multi-language bindings generator for rust (checksum custom derive)"
-+homepage = "https://mozilla.github.io/uniffi-rs"
-+documentation = "https://mozilla.github.io/uniffi-rs"
-+keywords = [
-+    "ffi",
-+    "bindgen",
-+]
-+license = "MPL-2.0"
-+repository = "https://github.com/mozilla/uniffi-rs"
-+
-+[lib]
-+proc-macro = true
-+
-+[dependencies.quote]
-+version = "1.0"
-+
-+[dependencies.syn]
-+version = "1.0"
-+features = [
-+    "derive",
-+    "parsing",
-+]
-+
-+[features]
-+default = []
-+nightly = []
-diff --git a/third_party/rust/uniffi_checksum_derive/src/lib.rs b/third_party/rust/uniffi_checksum_derive/src/lib.rs
-new file mode 100644
---- /dev/null
-+++ b/third_party/rust/uniffi_checksum_derive/src/lib.rs
-@@ -0,0 +1,134 @@
-+/* This Source Code Form is subject to the terms of the Mozilla Public
-+ * License, v. 2.0. If a copy of the MPL was not distributed with this
-+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-+#![cfg_attr(feature = "nightly", feature(proc_macro_expand))]
-+
-+//! Custom derive for uniffi_meta::Checksum
-+
-+use proc_macro::TokenStream;
-+use quote::{format_ident, quote};
-+use syn::{parse_macro_input, Attribute, Data, DeriveInput, Expr, ExprLit, Fields, Index, Lit};
-+
-+fn has_ignore_attribute(attrs: &[Attribute]) -> bool {
-+    attrs.iter().any(|attr| {
-+        if attr.path.is_ident("checksum_ignore") {
-+            if !attr.tokens.is_empty() {
-+                panic!("#[checksum_ignore] doesn't accept extra information");
-+            }
-+            true
-+        } else {
-+            false
-+        }
-+    })
-+}
-+
-+#[proc_macro_derive(Checksum, attributes(checksum_ignore))]
-+pub fn checksum_derive(input: TokenStream) -> TokenStream {
-+    let input: DeriveInput = parse_macro_input!(input);
-+
-+    let name = input.ident;
-+
-+    let (impl_generics, ty_generics, where_clause) = input.generics.split_for_impl();
-+
-+    let code = match input.data {
-+        Data::Enum(enum_)
-+            if enum_.variants.len() == 1
-+                && enum_
-+                    .variants
-+                    .iter()
-+                    .all(|variant| matches!(variant.fields, Fields::Unit)) =>
-+        {
-+            quote!()
-+        }
-+        Data::Enum(enum_) => {
-+            let mut next_discriminant = 0u64;
-+            let match_inner = enum_.variants.iter().map(|variant| {
-+                let ident = &variant.ident;
-+                if has_ignore_attribute(&variant.attrs) {
-+                    panic!("#[checksum_ignore] is not supported in enums");
-+                }
-+                match &variant.discriminant {
-+                    Some((_, Expr::Lit(ExprLit { lit: Lit::Int(value), .. }))) => {
-+                        next_discriminant = value.base10_parse::<u64>().unwrap();
-+                    }
-+                    Some(_) => {
-+                        panic!("#[derive(Checksum)] doesn't support non-numeric explicit discriminants in enums");
-+                    }
-+                    None => {}
-+                }
-+                let discriminant = quote! { state.write(&#next_discriminant.to_le_bytes()) };
-+                next_discriminant += 1;
-+                match &variant.fields {
-+                    Fields::Unnamed(fields) => {
-+                        let field_idents = fields
-+                            .unnamed
-+                            .iter()
-+                            .enumerate()
-+                            .map(|(num, _)| format_ident!("__self_{}", num));
-+                        let field_stmts = field_idents
-+                            .clone()
-+                            .map(|ident| quote! { Checksum::checksum(#ident, state); });
-+                        quote! {
-+                            Self::#ident(#(#field_idents,)*) => {
-+                                #discriminant;
-+                                #(#field_stmts)*
-+                            }
-+                        }
-+                    }
-+                    Fields::Named(fields) => {
-+                        let field_idents = fields
-+                            .named
-+                            .iter()
-+                            .map(|field| field.ident.as_ref().unwrap());
-+                        let field_stmts = field_idents
-+                            .clone()
-+                            .map(|ident| quote! { Checksum::checksum(#ident, state); });
-+                        quote! {
-+                            Self::#ident { #(#field_idents,)* } => {
-+                                #discriminant;
-+                                #(#field_stmts)*
-+                            }
-+                        }
-+                    }
-+                    Fields::Unit => quote! { Self::#ident => #discriminant, },
-+                }
-+            });
-+            quote! {
-+                match self {
-+                    #(#match_inner)*
-+                }
-+            }
-+        }
-+        Data::Struct(struct_) => {
-+            let stmts = struct_
-+                .fields
-+                .iter()
-+                .enumerate()
-+                .filter_map(|(num, field)| {
-+                    (!has_ignore_attribute(&field.attrs)).then(|| match field.ident.as_ref() {
-+                        Some(ident) => quote! { Checksum::checksum(&self.#ident, state); },
-+                        None => {
-+                            let i = Index::from(num);
-+                            quote! { Checksum::checksum(&self.#i, state); }
-+                        }
-+                    })
-+                });
-+            quote! {
-+                #(#stmts)*
-+            }
-+        }
-+        Data::Union(_) => {
-+            panic!("#[derive(Checksum)] is not supported for unions");
-+        }
-+    };
-+
-+    quote! {
-+        #[automatically_derived]
-+        impl #impl_generics Checksum for #name #ty_generics #where_clause {
-+            fn checksum<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
-+                #code
-+            }
-+        }
-+    }
-+    .into()
-+}
-diff --git a/third_party/rust/uniffi_macros/.cargo-checksum.json b/third_party/rust/uniffi_macros/.cargo-checksum.json
---- a/third_party/rust/uniffi_macros/.cargo-checksum.json
-+++ b/third_party/rust/uniffi_macros/.cargo-checksum.json
-@@ -1,1 +1,1 @@
--{"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"}
-\ No newline at end of file
-+{"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"}
-\ No newline at end of file
-diff --git a/third_party/rust/uniffi_macros/Cargo.toml b/third_party/rust/uniffi_macros/Cargo.toml
---- a/third_party/rust/uniffi_macros/Cargo.toml
-+++ b/third_party/rust/uniffi_macros/Cargo.toml
-@@ -7,28 +7,27 @@
- #
- # If you are reading this file be aware that the original Cargo.toml
- # will likely look very different (and much more reasonable).
- # See Cargo.toml.orig for the original contents.
- [package]
- edition = "2021"
- name = "uniffi_macros"
--version = "0.21.0"
-+version = "0.21.1"
- authors = ["Firefox Sync Team <sync-team@mozilla.com>"]
- description = "a multi-language bindings generator for rust (convenience macros)"
- homepage = "https://mozilla.github.io/uniffi-rs"
- documentation = "https://mozilla.github.io/uniffi-rs"
- keywords = [
-     "ffi",
-     "bindgen",
- ]
- license = "MPL-2.0"
- repository = "https://github.com/mozilla/uniffi-rs"
--resolver = "2"
- [lib]
- proc-macro = true
- [dependencies.bincode]
- version = "1.3"
- [dependencies.camino]
-@@ -55,17 +54,17 @@ features = [
-     "full",
-     "visit-mut",
- ]
- [dependencies.toml]
- version = "0.5.9"
- [dependencies.uniffi_build]
--version = "=0.21.0"
-+version = "=0.21.1"
- [dependencies.uniffi_meta]
--version = "=0.21.0"
-+version = "=0.21.1"
- [features]
- builtin-bindgen = ["uniffi_build/builtin-bindgen"]
- default = []
- nightly = []
-diff --git a/third_party/rust/uniffi_meta/.cargo-checksum.json b/third_party/rust/uniffi_meta/.cargo-checksum.json
---- a/third_party/rust/uniffi_meta/.cargo-checksum.json
-+++ b/third_party/rust/uniffi_meta/.cargo-checksum.json
-@@ -1,1 +1,1 @@
--{"files":{"Cargo.toml":"4a474782b3acac7e99435c0cfc6cd4790817ee5c15980b10dc927d95795b977f","src/lib.rs":"dc4c91763c01e8c09ef55cdb103bc02c7aba71c5660ba88f776a8a03a747d6e8"},"package":"cd9417cc653937681436b93838d8c5f97a5b8c58697813982ee8810bd1dc3b57"}
-\ No newline at end of file
-+{"files":{"Cargo.toml":"4c34032ec5fadf8b996c671425d5afa38e0e5c223ab0b2ed3b44099fb78157d3","src/lib.rs":"a9854421f120e1c4a9d7d36bb006a4c5e7d2e054564f95aa9b6956e7ebb348fd"},"package":"729835442da829c9b6f7c111c76cf87b2498e129101203bec94f0c39a3296a38"}
-\ No newline at end of file
-diff --git a/third_party/rust/uniffi_meta/Cargo.toml b/third_party/rust/uniffi_meta/Cargo.toml
---- a/third_party/rust/uniffi_meta/Cargo.toml
-+++ b/third_party/rust/uniffi_meta/Cargo.toml
-@@ -7,22 +7,27 @@
- #
- # If you are reading this file be aware that the original Cargo.toml
- # will likely look very different (and much more reasonable).
- # See Cargo.toml.orig for the original contents.
- [package]
- edition = "2021"
- name = "uniffi_meta"
--version = "0.21.0"
-+version = "0.21.1"
- description = "uniffi_meta"
- homepage = "https://mozilla.github.io/uniffi-rs"
- keywords = [
-     "ffi",
-     "bindgen",
- ]
- license = "MPL-2.0"
- repository = "https://github.com/mozilla/uniffi-rs"
--resolver = "2"
- [dependencies.serde]
- version = "1.0.136"
- features = ["derive"]
-+
-+[dependencies.siphasher]
-+version = "0.3"
-+
-+[dependencies.uniffi_checksum_derive]
-+version = "0.21.0"
-diff --git a/third_party/rust/uniffi_meta/src/lib.rs b/third_party/rust/uniffi_meta/src/lib.rs
---- a/third_party/rust/uniffi_meta/src/lib.rs
-+++ b/third_party/rust/uniffi_meta/src/lib.rs
-@@ -1,57 +1,127 @@
- /* This Source Code Form is subject to the terms of the Mozilla Public
-  * License, v. 2.0. If a copy of the MPL was not distributed with this
-  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
--use std::{
--    collections::hash_map::DefaultHasher,
--    hash::{Hash, Hasher},
--};
-+use std::hash::Hasher;
-+pub use uniffi_checksum_derive::Checksum;
- use serde::{Deserialize, Serialize};
--#[derive(Clone, Debug, Hash, Deserialize, Serialize)]
-+/// Similar to std::hash::Hash.
-+///
-+/// Implementations of this trait are expected to update the hasher state in
-+/// the same way across platforms. #[derive(Checksum)] will do the right thing.
-+pub trait Checksum {
-+    fn checksum<H: Hasher>(&self, state: &mut H);
-+}
-+
-+impl Checksum for bool {
-+    fn checksum<H: Hasher>(&self, state: &mut H) {
-+        state.write_u8(*self as u8);
-+    }
-+}
-+
-+impl Checksum for u64 {
-+    fn checksum<H: Hasher>(&self, state: &mut H) {
-+        state.write(&self.to_le_bytes());
-+    }
-+}
-+
-+impl Checksum for i64 {
-+    fn checksum<H: Hasher>(&self, state: &mut H) {
-+        state.write(&self.to_le_bytes());
-+    }
-+}
-+
-+impl<T: Checksum> Checksum for Box<T> {
-+    fn checksum<H: Hasher>(&self, state: &mut H) {
-+        (**self).checksum(state)
-+    }
-+}
-+
-+impl<T: Checksum> Checksum for [T] {
-+    fn checksum<H: Hasher>(&self, state: &mut H) {
-+        state.write(&(self.len() as u64).to_le_bytes());
-+        for item in self {
-+            Checksum::checksum(item, state);
-+        }
-+    }
-+}
-+
-+impl<T: Checksum> Checksum for Vec<T> {
-+    fn checksum<H: Hasher>(&self, state: &mut H) {
-+        Checksum::checksum(&**self, state);
-+    }
-+}
-+
-+impl<T: Checksum> Checksum for Option<T> {
-+    fn checksum<H: Hasher>(&self, state: &mut H) {
-+        match self {
-+            None => state.write(&0u64.to_le_bytes()),
-+            Some(value) => {
-+                state.write(&1u64.to_le_bytes());
-+                Checksum::checksum(value, state)
-+            }
-+        }
-+    }
-+}
-+
-+impl Checksum for str {
-+    fn checksum<H: Hasher>(&self, state: &mut H) {
-+        state.write(self.as_bytes());
-+        state.write_u8(0xff);
-+    }
-+}
-+
-+impl Checksum for String {
-+    fn checksum<H: Hasher>(&self, state: &mut H) {
-+        (**self).checksum(state)
-+    }
-+}
-+
-+#[derive(Clone, Debug, Checksum, Deserialize, Serialize)]
- pub struct FnMetadata {
-     pub module_path: Vec<String>,
-     pub name: String,
-     pub inputs: Vec<FnParamMetadata>,
-     pub return_type: Option<Type>,
- }
- impl FnMetadata {
-     pub fn ffi_symbol_name(&self) -> String {
-         fn_ffi_symbol_name(&self.module_path, &self.name, checksum(self))
-     }
- }
--#[derive(Clone, Debug, Hash, Deserialize, Serialize)]
-+#[derive(Clone, Debug, Checksum, Deserialize, Serialize)]
- pub struct MethodMetadata {
-     pub module_path: Vec<String>,
-     pub self_name: String,
-     pub name: String,
-     pub inputs: Vec<FnParamMetadata>,
-     pub return_type: Option<Type>,
- }
- impl MethodMetadata {
-     pub fn ffi_symbol_name(&self) -> String {
-         let full_name = format!("impl_{}_{}", self.self_name, self.name);
-         fn_ffi_symbol_name(&self.module_path, &full_name, checksum(self))
-     }
- }
--#[derive(Clone, Debug, Hash, Deserialize, Serialize)]
-+#[derive(Clone, Debug, Checksum, Deserialize, Serialize)]
- pub struct FnParamMetadata {
-     pub name: String,
-     #[serde(rename = "type")]
-     pub ty: Type,
- }
--#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Deserialize, Serialize)]
-+#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Checksum, Deserialize, Serialize)]
- pub enum Type {
-     U8,
-     U16,
-     U32,
-     U64,
-     I8,
-     I16,
-     I32,
-@@ -73,63 +143,63 @@ pub enum Type {
-     ArcObject {
-         object_name: String,
-     },
-     Unresolved {
-         name: String,
-     },
- }
--#[derive(Clone, Debug, Hash, Deserialize, Serialize)]
-+#[derive(Clone, Debug, Checksum, Deserialize, Serialize)]
- pub struct RecordMetadata {
-     pub module_path: Vec<String>,
-     pub name: String,
-     pub fields: Vec<FieldMetadata>,
- }
--#[derive(Clone, Debug, Hash, Deserialize, Serialize)]
-+#[derive(Clone, Debug, Checksum, Deserialize, Serialize)]
- pub struct FieldMetadata {
-     pub name: String,
-     #[serde(rename = "type")]
-     pub ty: Type,
- }
--#[derive(Clone, Debug, Hash, Deserialize, Serialize)]
-+#[derive(Clone, Debug, Checksum, Deserialize, Serialize)]
- pub struct ObjectMetadata {
-     pub module_path: Vec<String>,
-     pub name: String,
- }
- impl ObjectMetadata {
-     /// FFI symbol name for the `free` function for this object.
-     ///
-     /// This function is used to free the memory used by this object.
-     pub fn free_ffi_symbol_name(&self) -> String {
-         let free_name = format!("object_free_{}", self.name);
-         fn_ffi_symbol_name(&self.module_path, &free_name, checksum(self))
-     }
- }
--/// Returns the last 16 bits of the value's hash as computed with [`DefaultHasher`].
-+/// Returns the last 16 bits of the value's hash as computed with [`SipHasher13`].
- ///
- /// To be used as a checksum of FFI symbols, as a safeguard against different UniFFI versions being
- /// used for scaffolding and bindings generation.
--pub fn checksum<T: Hash>(val: &T) -> u16 {
--    let mut hasher = DefaultHasher::new();
--    val.hash(&mut hasher);
-+pub fn checksum<T: Checksum>(val: &T) -> u16 {
-+    let mut hasher = siphasher::sip::SipHasher13::new();
-+    val.checksum(&mut hasher);
-     (hasher.finish() & 0x000000000000FFFF) as u16
- }
- pub fn fn_ffi_symbol_name(mod_path: &[String], name: &str, checksum: u16) -> String {
-     let mod_path = mod_path.join("__");
-     format!("_uniffi_{mod_path}_{name}_{checksum:x}")
- }
- /// Enum covering all the possible metadata types
--#[derive(Clone, Debug, Hash, Deserialize, Serialize)]
-+#[derive(Clone, Debug, Checksum, Deserialize, Serialize)]
- pub enum Metadata {
-     Func(FnMetadata),
-     Method(MethodMetadata),
-     Record(RecordMetadata),
-     Object(ObjectMetadata),
- }
- impl From<FnMetadata> for Metadata {
-
This page took 0.24021 seconds and 4 git commands to generate.