Live video on the AT Protocol

Add 'rust/iroh-streamplace/' from commit '0b3bbbf8912a1d2d6a843a1473fed0d295567f81'

git-subtree-dir: rust/iroh-streamplace
git-subtree-mainline: 6b4b6c09e891ff9b42631b18c86582fc85c19a4d
git-subtree-split: 0b3bbbf8912a1d2d6a843a1473fed0d295567f81

+8239
+1
rust/iroh-streamplace/.gitignore
··· 1 + /target
+4639
rust/iroh-streamplace/Cargo.lock
··· 1 + # This file is automatically @generated by Cargo. 2 + # It is not intended for manual editing. 3 + version = 4 4 + 5 + [[package]] 6 + name = "acto" 7 + version = "0.7.4" 8 + source = "registry+https://github.com/rust-lang/crates.io-index" 9 + checksum = "a026259da4f1a13b4af60cda453c392de64c58c12d239c560923e0382f42f2b9" 10 + dependencies = [ 11 + "parking_lot", 12 + "pin-project-lite", 13 + "rustc_version", 14 + "smol_str", 15 + "tokio", 16 + "tracing", 17 + ] 18 + 19 + [[package]] 20 + name = "addr2line" 21 + version = "0.24.2" 22 + source = "registry+https://github.com/rust-lang/crates.io-index" 23 + checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" 24 + dependencies = [ 25 + "gimli", 26 + ] 27 + 28 + [[package]] 29 + name = "adler2" 30 + version = "2.0.1" 31 + source = "registry+https://github.com/rust-lang/crates.io-index" 32 + checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" 33 + 34 + [[package]] 35 + name = "aead" 36 + version = "0.5.2" 37 + source = "registry+https://github.com/rust-lang/crates.io-index" 38 + checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" 39 + dependencies = [ 40 + "bytes", 41 + "crypto-common", 42 + "generic-array", 43 + ] 44 + 45 + [[package]] 46 + name = "aho-corasick" 47 + version = "1.1.3" 48 + source = "registry+https://github.com/rust-lang/crates.io-index" 49 + checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 50 + dependencies = [ 51 + "memchr", 52 + ] 53 + 54 + [[package]] 55 + name = "allocator-api2" 56 + version = "0.2.21" 57 + source = "registry+https://github.com/rust-lang/crates.io-index" 58 + checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" 59 + 60 + [[package]] 61 + name = "android-tzdata" 62 + version = "0.1.1" 63 + source = "registry+https://github.com/rust-lang/crates.io-index" 64 + checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" 65 + 66 + [[package]] 67 + name = "android_system_properties" 68 + version = "0.1.5" 69 + source = "registry+https://github.com/rust-lang/crates.io-index" 70 + checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 71 + dependencies = [ 72 + "libc", 73 + ] 74 + 75 + [[package]] 76 + name = "anyhow" 77 + version = "1.0.99" 78 + source = "registry+https://github.com/rust-lang/crates.io-index" 79 + checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100" 80 + dependencies = [ 81 + "backtrace", 82 + ] 83 + 84 + [[package]] 85 + name = "arrayref" 86 + version = "0.3.9" 87 + source = "registry+https://github.com/rust-lang/crates.io-index" 88 + checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" 89 + 90 + [[package]] 91 + name = "arrayvec" 92 + version = "0.7.6" 93 + source = "registry+https://github.com/rust-lang/crates.io-index" 94 + checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" 95 + 96 + [[package]] 97 + name = "askama" 98 + version = "0.12.1" 99 + source = "registry+https://github.com/rust-lang/crates.io-index" 100 + checksum = "b79091df18a97caea757e28cd2d5fda49c6cd4bd01ddffd7ff01ace0c0ad2c28" 101 + dependencies = [ 102 + "askama_derive", 103 + "askama_escape", 104 + ] 105 + 106 + [[package]] 107 + name = "askama_derive" 108 + version = "0.12.5" 109 + source = "registry+https://github.com/rust-lang/crates.io-index" 110 + checksum = "19fe8d6cb13c4714962c072ea496f3392015f0989b1a2847bb4b2d9effd71d83" 111 + dependencies = [ 112 + "askama_parser", 113 + "basic-toml", 114 + "mime", 115 + "mime_guess", 116 + "proc-macro2", 117 + "quote", 118 + "serde", 119 + "syn 2.0.104", 120 + ] 121 + 122 + [[package]] 123 + name = "askama_escape" 124 + version = "0.10.3" 125 + source = "registry+https://github.com/rust-lang/crates.io-index" 126 + checksum = "619743e34b5ba4e9703bba34deac3427c72507c7159f5fd030aea8cac0cfe341" 127 + 128 + [[package]] 129 + name = "askama_parser" 130 + version = "0.2.1" 131 + source = "registry+https://github.com/rust-lang/crates.io-index" 132 + checksum = "acb1161c6b64d1c3d83108213c2a2533a342ac225aabd0bda218278c2ddb00c0" 133 + dependencies = [ 134 + "nom", 135 + ] 136 + 137 + [[package]] 138 + name = "async-compat" 139 + version = "0.2.4" 140 + source = "registry+https://github.com/rust-lang/crates.io-index" 141 + checksum = "7bab94bde396a3f7b4962e396fdad640e241ed797d4d8d77fc8c237d14c58fc0" 142 + dependencies = [ 143 + "futures-core", 144 + "futures-io", 145 + "once_cell", 146 + "pin-project-lite", 147 + "tokio", 148 + ] 149 + 150 + [[package]] 151 + name = "async-trait" 152 + version = "0.1.88" 153 + source = "registry+https://github.com/rust-lang/crates.io-index" 154 + checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" 155 + dependencies = [ 156 + "proc-macro2", 157 + "quote", 158 + "syn 2.0.104", 159 + ] 160 + 161 + [[package]] 162 + name = "async_io_stream" 163 + version = "0.3.3" 164 + source = "registry+https://github.com/rust-lang/crates.io-index" 165 + checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" 166 + dependencies = [ 167 + "futures", 168 + "pharos", 169 + "rustc_version", 170 + ] 171 + 172 + [[package]] 173 + name = "atomic-polyfill" 174 + version = "1.0.3" 175 + source = "registry+https://github.com/rust-lang/crates.io-index" 176 + checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4" 177 + dependencies = [ 178 + "critical-section", 179 + ] 180 + 181 + [[package]] 182 + name = "atomic-waker" 183 + version = "1.1.2" 184 + source = "registry+https://github.com/rust-lang/crates.io-index" 185 + checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" 186 + 187 + [[package]] 188 + name = "attohttpc" 189 + version = "0.30.1" 190 + source = "registry+https://github.com/rust-lang/crates.io-index" 191 + checksum = "16e2cdb6d5ed835199484bb92bb8b3edd526effe995c61732580439c1a67e2e9" 192 + dependencies = [ 193 + "base64", 194 + "http", 195 + "log", 196 + "url", 197 + ] 198 + 199 + [[package]] 200 + name = "autocfg" 201 + version = "1.5.0" 202 + source = "registry+https://github.com/rust-lang/crates.io-index" 203 + checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" 204 + 205 + [[package]] 206 + name = "backon" 207 + version = "1.5.2" 208 + source = "registry+https://github.com/rust-lang/crates.io-index" 209 + checksum = "592277618714fbcecda9a02ba7a8781f319d26532a88553bbacc77ba5d2b3a8d" 210 + dependencies = [ 211 + "fastrand", 212 + "gloo-timers", 213 + "tokio", 214 + ] 215 + 216 + [[package]] 217 + name = "backtrace" 218 + version = "0.3.75" 219 + source = "registry+https://github.com/rust-lang/crates.io-index" 220 + checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" 221 + dependencies = [ 222 + "addr2line", 223 + "cfg-if", 224 + "libc", 225 + "miniz_oxide", 226 + "object", 227 + "rustc-demangle", 228 + "windows-targets 0.52.6", 229 + ] 230 + 231 + [[package]] 232 + name = "base16ct" 233 + version = "0.2.0" 234 + source = "registry+https://github.com/rust-lang/crates.io-index" 235 + checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" 236 + 237 + [[package]] 238 + name = "base32" 239 + version = "0.5.1" 240 + source = "registry+https://github.com/rust-lang/crates.io-index" 241 + checksum = "022dfe9eb35f19ebbcb51e0b40a5ab759f46ad60cadf7297e0bd085afb50e076" 242 + 243 + [[package]] 244 + name = "base64" 245 + version = "0.22.1" 246 + source = "registry+https://github.com/rust-lang/crates.io-index" 247 + checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 248 + 249 + [[package]] 250 + name = "base64ct" 251 + version = "1.8.0" 252 + source = "registry+https://github.com/rust-lang/crates.io-index" 253 + checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" 254 + 255 + [[package]] 256 + name = "basic-toml" 257 + version = "0.1.10" 258 + source = "registry+https://github.com/rust-lang/crates.io-index" 259 + checksum = "ba62675e8242a4c4e806d12f11d136e626e6c8361d6b829310732241652a178a" 260 + dependencies = [ 261 + "serde", 262 + ] 263 + 264 + [[package]] 265 + name = "bincode" 266 + version = "1.3.3" 267 + source = "registry+https://github.com/rust-lang/crates.io-index" 268 + checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" 269 + dependencies = [ 270 + "serde", 271 + ] 272 + 273 + [[package]] 274 + name = "bitflags" 275 + version = "2.9.1" 276 + source = "registry+https://github.com/rust-lang/crates.io-index" 277 + checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" 278 + 279 + [[package]] 280 + name = "blake3" 281 + version = "1.8.2" 282 + source = "registry+https://github.com/rust-lang/crates.io-index" 283 + checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" 284 + dependencies = [ 285 + "arrayref", 286 + "arrayvec", 287 + "cc", 288 + "cfg-if", 289 + "constant_time_eq", 290 + ] 291 + 292 + [[package]] 293 + name = "block-buffer" 294 + version = "0.10.4" 295 + source = "registry+https://github.com/rust-lang/crates.io-index" 296 + checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 297 + dependencies = [ 298 + "generic-array", 299 + ] 300 + 301 + [[package]] 302 + name = "bounded-integer" 303 + version = "0.5.8" 304 + source = "registry+https://github.com/rust-lang/crates.io-index" 305 + checksum = "102dbef1187b1893e6dfe05a774e79fd52265f49f214f6879c8ff49f52c8188b" 306 + 307 + [[package]] 308 + name = "btparse" 309 + version = "0.2.0" 310 + source = "registry+https://github.com/rust-lang/crates.io-index" 311 + checksum = "387e80962b798815a2b5c4bcfdb6bf626fa922ffe9f74e373103b858738e9f31" 312 + 313 + [[package]] 314 + name = "bumpalo" 315 + version = "3.19.0" 316 + source = "registry+https://github.com/rust-lang/crates.io-index" 317 + checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" 318 + 319 + [[package]] 320 + name = "byteorder" 321 + version = "1.5.0" 322 + source = "registry+https://github.com/rust-lang/crates.io-index" 323 + checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 324 + 325 + [[package]] 326 + name = "bytes" 327 + version = "1.10.1" 328 + source = "registry+https://github.com/rust-lang/crates.io-index" 329 + checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" 330 + 331 + [[package]] 332 + name = "camino" 333 + version = "1.1.10" 334 + source = "registry+https://github.com/rust-lang/crates.io-index" 335 + checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab" 336 + dependencies = [ 337 + "serde", 338 + ] 339 + 340 + [[package]] 341 + name = "cargo-platform" 342 + version = "0.1.9" 343 + source = "registry+https://github.com/rust-lang/crates.io-index" 344 + checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" 345 + dependencies = [ 346 + "serde", 347 + ] 348 + 349 + [[package]] 350 + name = "cargo_metadata" 351 + version = "0.15.4" 352 + source = "registry+https://github.com/rust-lang/crates.io-index" 353 + checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a" 354 + dependencies = [ 355 + "camino", 356 + "cargo-platform", 357 + "semver", 358 + "serde", 359 + "serde_json", 360 + "thiserror 1.0.69", 361 + ] 362 + 363 + [[package]] 364 + name = "cc" 365 + version = "1.2.31" 366 + source = "registry+https://github.com/rust-lang/crates.io-index" 367 + checksum = "c3a42d84bb6b69d3a8b3eaacf0d88f179e1929695e1ad012b6cf64d9caaa5fd2" 368 + dependencies = [ 369 + "shlex", 370 + ] 371 + 372 + [[package]] 373 + name = "cfg-if" 374 + version = "1.0.1" 375 + source = "registry+https://github.com/rust-lang/crates.io-index" 376 + checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" 377 + 378 + [[package]] 379 + name = "cfg_aliases" 380 + version = "0.2.1" 381 + source = "registry+https://github.com/rust-lang/crates.io-index" 382 + checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" 383 + 384 + [[package]] 385 + name = "chacha20" 386 + version = "0.9.1" 387 + source = "registry+https://github.com/rust-lang/crates.io-index" 388 + checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" 389 + dependencies = [ 390 + "cfg-if", 391 + "cipher", 392 + "cpufeatures", 393 + ] 394 + 395 + [[package]] 396 + name = "chrono" 397 + version = "0.4.41" 398 + source = "registry+https://github.com/rust-lang/crates.io-index" 399 + checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" 400 + dependencies = [ 401 + "android-tzdata", 402 + "iana-time-zone", 403 + "num-traits", 404 + "serde", 405 + "windows-link", 406 + ] 407 + 408 + [[package]] 409 + name = "cipher" 410 + version = "0.4.4" 411 + source = "registry+https://github.com/rust-lang/crates.io-index" 412 + checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" 413 + dependencies = [ 414 + "crypto-common", 415 + "inout", 416 + "zeroize", 417 + ] 418 + 419 + [[package]] 420 + name = "cobs" 421 + version = "0.3.0" 422 + source = "registry+https://github.com/rust-lang/crates.io-index" 423 + checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1" 424 + dependencies = [ 425 + "thiserror 2.0.12", 426 + ] 427 + 428 + [[package]] 429 + name = "color-backtrace" 430 + version = "0.7.0" 431 + source = "registry+https://github.com/rust-lang/crates.io-index" 432 + checksum = "2123a5984bd52ca861c66f66a9ab9883b27115c607f801f86c1bc2a84eb69f0f" 433 + dependencies = [ 434 + "backtrace", 435 + "btparse", 436 + "termcolor", 437 + ] 438 + 439 + [[package]] 440 + name = "const-oid" 441 + version = "0.9.6" 442 + source = "registry+https://github.com/rust-lang/crates.io-index" 443 + checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" 444 + 445 + [[package]] 446 + name = "constant_time_eq" 447 + version = "0.3.1" 448 + source = "registry+https://github.com/rust-lang/crates.io-index" 449 + checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" 450 + 451 + [[package]] 452 + name = "cordyceps" 453 + version = "0.3.4" 454 + source = "registry+https://github.com/rust-lang/crates.io-index" 455 + checksum = "688d7fbb8092b8de775ef2536f36c8c31f2bc4006ece2e8d8ad2d17d00ce0a2a" 456 + dependencies = [ 457 + "loom", 458 + "tracing", 459 + ] 460 + 461 + [[package]] 462 + name = "core-foundation" 463 + version = "0.9.4" 464 + source = "registry+https://github.com/rust-lang/crates.io-index" 465 + checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 466 + dependencies = [ 467 + "core-foundation-sys", 468 + "libc", 469 + ] 470 + 471 + [[package]] 472 + name = "core-foundation-sys" 473 + version = "0.8.7" 474 + source = "registry+https://github.com/rust-lang/crates.io-index" 475 + checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 476 + 477 + [[package]] 478 + name = "cpufeatures" 479 + version = "0.2.17" 480 + source = "registry+https://github.com/rust-lang/crates.io-index" 481 + checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" 482 + dependencies = [ 483 + "libc", 484 + ] 485 + 486 + [[package]] 487 + name = "crc" 488 + version = "3.3.0" 489 + source = "registry+https://github.com/rust-lang/crates.io-index" 490 + checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" 491 + dependencies = [ 492 + "crc-catalog", 493 + ] 494 + 495 + [[package]] 496 + name = "crc-catalog" 497 + version = "2.4.0" 498 + source = "registry+https://github.com/rust-lang/crates.io-index" 499 + checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" 500 + 501 + [[package]] 502 + name = "critical-section" 503 + version = "1.2.0" 504 + source = "registry+https://github.com/rust-lang/crates.io-index" 505 + checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" 506 + 507 + [[package]] 508 + name = "crossbeam-channel" 509 + version = "0.5.15" 510 + source = "registry+https://github.com/rust-lang/crates.io-index" 511 + checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" 512 + dependencies = [ 513 + "crossbeam-utils", 514 + ] 515 + 516 + [[package]] 517 + name = "crossbeam-epoch" 518 + version = "0.9.18" 519 + source = "registry+https://github.com/rust-lang/crates.io-index" 520 + checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" 521 + dependencies = [ 522 + "crossbeam-utils", 523 + ] 524 + 525 + [[package]] 526 + name = "crossbeam-utils" 527 + version = "0.8.21" 528 + source = "registry+https://github.com/rust-lang/crates.io-index" 529 + checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 530 + 531 + [[package]] 532 + name = "crypto-common" 533 + version = "0.1.6" 534 + source = "registry+https://github.com/rust-lang/crates.io-index" 535 + checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 536 + dependencies = [ 537 + "generic-array", 538 + "rand_core 0.6.4", 539 + "typenum", 540 + ] 541 + 542 + [[package]] 543 + name = "crypto_box" 544 + version = "0.9.1" 545 + source = "registry+https://github.com/rust-lang/crates.io-index" 546 + checksum = "16182b4f39a82ec8a6851155cc4c0cda3065bb1db33651726a29e1951de0f009" 547 + dependencies = [ 548 + "aead", 549 + "chacha20", 550 + "crypto_secretbox", 551 + "curve25519-dalek", 552 + "salsa20", 553 + "serdect", 554 + "subtle", 555 + "zeroize", 556 + ] 557 + 558 + [[package]] 559 + name = "crypto_secretbox" 560 + version = "0.1.1" 561 + source = "registry+https://github.com/rust-lang/crates.io-index" 562 + checksum = "b9d6cf87adf719ddf43a805e92c6870a531aedda35ff640442cbaf8674e141e1" 563 + dependencies = [ 564 + "aead", 565 + "chacha20", 566 + "cipher", 567 + "generic-array", 568 + "poly1305", 569 + "salsa20", 570 + "subtle", 571 + "zeroize", 572 + ] 573 + 574 + [[package]] 575 + name = "curve25519-dalek" 576 + version = "4.1.3" 577 + source = "registry+https://github.com/rust-lang/crates.io-index" 578 + checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" 579 + dependencies = [ 580 + "cfg-if", 581 + "cpufeatures", 582 + "curve25519-dalek-derive", 583 + "digest", 584 + "fiat-crypto", 585 + "rand_core 0.6.4", 586 + "rustc_version", 587 + "serde", 588 + "subtle", 589 + "zeroize", 590 + ] 591 + 592 + [[package]] 593 + name = "curve25519-dalek-derive" 594 + version = "0.1.1" 595 + source = "registry+https://github.com/rust-lang/crates.io-index" 596 + checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" 597 + dependencies = [ 598 + "proc-macro2", 599 + "quote", 600 + "syn 2.0.104", 601 + ] 602 + 603 + [[package]] 604 + name = "data-encoding" 605 + version = "2.9.0" 606 + source = "registry+https://github.com/rust-lang/crates.io-index" 607 + checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" 608 + 609 + [[package]] 610 + name = "der" 611 + version = "0.7.10" 612 + source = "registry+https://github.com/rust-lang/crates.io-index" 613 + checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" 614 + dependencies = [ 615 + "const-oid", 616 + "der_derive", 617 + "pem-rfc7468", 618 + "zeroize", 619 + ] 620 + 621 + [[package]] 622 + name = "der_derive" 623 + version = "0.7.3" 624 + source = "registry+https://github.com/rust-lang/crates.io-index" 625 + checksum = "8034092389675178f570469e6c3b0465d3d30b4505c294a6550db47f3c17ad18" 626 + dependencies = [ 627 + "proc-macro2", 628 + "quote", 629 + "syn 2.0.104", 630 + ] 631 + 632 + [[package]] 633 + name = "deranged" 634 + version = "0.4.0" 635 + source = "registry+https://github.com/rust-lang/crates.io-index" 636 + checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" 637 + dependencies = [ 638 + "powerfmt", 639 + ] 640 + 641 + [[package]] 642 + name = "derive_more" 643 + version = "1.0.0" 644 + source = "registry+https://github.com/rust-lang/crates.io-index" 645 + checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" 646 + dependencies = [ 647 + "derive_more-impl 1.0.0", 648 + ] 649 + 650 + [[package]] 651 + name = "derive_more" 652 + version = "2.0.1" 653 + source = "registry+https://github.com/rust-lang/crates.io-index" 654 + checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" 655 + dependencies = [ 656 + "derive_more-impl 2.0.1", 657 + ] 658 + 659 + [[package]] 660 + name = "derive_more-impl" 661 + version = "1.0.0" 662 + source = "registry+https://github.com/rust-lang/crates.io-index" 663 + checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" 664 + dependencies = [ 665 + "proc-macro2", 666 + "quote", 667 + "syn 2.0.104", 668 + "unicode-xid", 669 + ] 670 + 671 + [[package]] 672 + name = "derive_more-impl" 673 + version = "2.0.1" 674 + source = "registry+https://github.com/rust-lang/crates.io-index" 675 + checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" 676 + dependencies = [ 677 + "proc-macro2", 678 + "quote", 679 + "syn 2.0.104", 680 + "unicode-xid", 681 + ] 682 + 683 + [[package]] 684 + name = "diatomic-waker" 685 + version = "0.2.3" 686 + source = "registry+https://github.com/rust-lang/crates.io-index" 687 + checksum = "ab03c107fafeb3ee9f5925686dbb7a73bc76e3932abb0d2b365cb64b169cf04c" 688 + 689 + [[package]] 690 + name = "digest" 691 + version = "0.10.7" 692 + source = "registry+https://github.com/rust-lang/crates.io-index" 693 + checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 694 + dependencies = [ 695 + "block-buffer", 696 + "crypto-common", 697 + "subtle", 698 + ] 699 + 700 + [[package]] 701 + name = "displaydoc" 702 + version = "0.2.5" 703 + source = "registry+https://github.com/rust-lang/crates.io-index" 704 + checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 705 + dependencies = [ 706 + "proc-macro2", 707 + "quote", 708 + "syn 2.0.104", 709 + ] 710 + 711 + [[package]] 712 + name = "dlopen2" 713 + version = "0.5.0" 714 + source = "registry+https://github.com/rust-lang/crates.io-index" 715 + checksum = "09b4f5f101177ff01b8ec4ecc81eead416a8aa42819a2869311b3420fa114ffa" 716 + dependencies = [ 717 + "libc", 718 + "once_cell", 719 + "winapi", 720 + ] 721 + 722 + [[package]] 723 + name = "document-features" 724 + version = "0.2.11" 725 + source = "registry+https://github.com/rust-lang/crates.io-index" 726 + checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" 727 + dependencies = [ 728 + "litrs", 729 + ] 730 + 731 + [[package]] 732 + name = "dyn-clone" 733 + version = "1.0.20" 734 + source = "registry+https://github.com/rust-lang/crates.io-index" 735 + checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" 736 + 737 + [[package]] 738 + name = "ed25519" 739 + version = "2.2.3" 740 + source = "registry+https://github.com/rust-lang/crates.io-index" 741 + checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" 742 + dependencies = [ 743 + "pkcs8", 744 + "serde", 745 + "signature", 746 + ] 747 + 748 + [[package]] 749 + name = "ed25519-dalek" 750 + version = "2.2.0" 751 + source = "registry+https://github.com/rust-lang/crates.io-index" 752 + checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" 753 + dependencies = [ 754 + "curve25519-dalek", 755 + "ed25519", 756 + "rand_core 0.6.4", 757 + "serde", 758 + "sha2", 759 + "subtle", 760 + "zeroize", 761 + ] 762 + 763 + [[package]] 764 + name = "embedded-io" 765 + version = "0.4.0" 766 + source = "registry+https://github.com/rust-lang/crates.io-index" 767 + checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" 768 + 769 + [[package]] 770 + name = "embedded-io" 771 + version = "0.6.1" 772 + source = "registry+https://github.com/rust-lang/crates.io-index" 773 + checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" 774 + 775 + [[package]] 776 + name = "enum-as-inner" 777 + version = "0.6.1" 778 + source = "registry+https://github.com/rust-lang/crates.io-index" 779 + checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" 780 + dependencies = [ 781 + "heck", 782 + "proc-macro2", 783 + "quote", 784 + "syn 2.0.104", 785 + ] 786 + 787 + [[package]] 788 + name = "enumflags2" 789 + version = "0.7.12" 790 + source = "registry+https://github.com/rust-lang/crates.io-index" 791 + checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef" 792 + dependencies = [ 793 + "enumflags2_derive", 794 + ] 795 + 796 + [[package]] 797 + name = "enumflags2_derive" 798 + version = "0.7.12" 799 + source = "registry+https://github.com/rust-lang/crates.io-index" 800 + checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" 801 + dependencies = [ 802 + "proc-macro2", 803 + "quote", 804 + "syn 2.0.104", 805 + ] 806 + 807 + [[package]] 808 + name = "equivalent" 809 + version = "1.0.2" 810 + source = "registry+https://github.com/rust-lang/crates.io-index" 811 + checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 812 + 813 + [[package]] 814 + name = "fallible-iterator" 815 + version = "0.3.0" 816 + source = "registry+https://github.com/rust-lang/crates.io-index" 817 + checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" 818 + 819 + [[package]] 820 + name = "fastrand" 821 + version = "2.3.0" 822 + source = "registry+https://github.com/rust-lang/crates.io-index" 823 + checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 824 + 825 + [[package]] 826 + name = "fiat-crypto" 827 + version = "0.2.9" 828 + source = "registry+https://github.com/rust-lang/crates.io-index" 829 + checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" 830 + 831 + [[package]] 832 + name = "fnv" 833 + version = "1.0.7" 834 + source = "registry+https://github.com/rust-lang/crates.io-index" 835 + checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 836 + 837 + [[package]] 838 + name = "foldhash" 839 + version = "0.1.5" 840 + source = "registry+https://github.com/rust-lang/crates.io-index" 841 + checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" 842 + 843 + [[package]] 844 + name = "form_urlencoded" 845 + version = "1.2.1" 846 + source = "registry+https://github.com/rust-lang/crates.io-index" 847 + checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 848 + dependencies = [ 849 + "percent-encoding", 850 + ] 851 + 852 + [[package]] 853 + name = "fs-err" 854 + version = "2.11.0" 855 + source = "registry+https://github.com/rust-lang/crates.io-index" 856 + checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41" 857 + dependencies = [ 858 + "autocfg", 859 + ] 860 + 861 + [[package]] 862 + name = "futures" 863 + version = "0.3.31" 864 + source = "registry+https://github.com/rust-lang/crates.io-index" 865 + checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" 866 + dependencies = [ 867 + "futures-channel", 868 + "futures-core", 869 + "futures-executor", 870 + "futures-io", 871 + "futures-sink", 872 + "futures-task", 873 + "futures-util", 874 + ] 875 + 876 + [[package]] 877 + name = "futures-buffered" 878 + version = "0.2.12" 879 + source = "registry+https://github.com/rust-lang/crates.io-index" 880 + checksum = "a8e0e1f38ec07ba4abbde21eed377082f17ccb988be9d988a5adbf4bafc118fd" 881 + dependencies = [ 882 + "cordyceps", 883 + "diatomic-waker", 884 + "futures-core", 885 + "pin-project-lite", 886 + "spin 0.10.0", 887 + ] 888 + 889 + [[package]] 890 + name = "futures-channel" 891 + version = "0.3.31" 892 + source = "registry+https://github.com/rust-lang/crates.io-index" 893 + checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" 894 + dependencies = [ 895 + "futures-core", 896 + "futures-sink", 897 + ] 898 + 899 + [[package]] 900 + name = "futures-core" 901 + version = "0.3.31" 902 + source = "registry+https://github.com/rust-lang/crates.io-index" 903 + checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 904 + 905 + [[package]] 906 + name = "futures-executor" 907 + version = "0.3.31" 908 + source = "registry+https://github.com/rust-lang/crates.io-index" 909 + checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" 910 + dependencies = [ 911 + "futures-core", 912 + "futures-task", 913 + "futures-util", 914 + ] 915 + 916 + [[package]] 917 + name = "futures-io" 918 + version = "0.3.31" 919 + source = "registry+https://github.com/rust-lang/crates.io-index" 920 + checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" 921 + 922 + [[package]] 923 + name = "futures-lite" 924 + version = "2.6.1" 925 + source = "registry+https://github.com/rust-lang/crates.io-index" 926 + checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" 927 + dependencies = [ 928 + "fastrand", 929 + "futures-core", 930 + "futures-io", 931 + "parking", 932 + "pin-project-lite", 933 + ] 934 + 935 + [[package]] 936 + name = "futures-macro" 937 + version = "0.3.31" 938 + source = "registry+https://github.com/rust-lang/crates.io-index" 939 + checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" 940 + dependencies = [ 941 + "proc-macro2", 942 + "quote", 943 + "syn 2.0.104", 944 + ] 945 + 946 + [[package]] 947 + name = "futures-sink" 948 + version = "0.3.31" 949 + source = "registry+https://github.com/rust-lang/crates.io-index" 950 + checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" 951 + 952 + [[package]] 953 + name = "futures-task" 954 + version = "0.3.31" 955 + source = "registry+https://github.com/rust-lang/crates.io-index" 956 + checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" 957 + 958 + [[package]] 959 + name = "futures-util" 960 + version = "0.3.31" 961 + source = "registry+https://github.com/rust-lang/crates.io-index" 962 + checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" 963 + dependencies = [ 964 + "futures-channel", 965 + "futures-core", 966 + "futures-io", 967 + "futures-macro", 968 + "futures-sink", 969 + "futures-task", 970 + "memchr", 971 + "pin-project-lite", 972 + "pin-utils", 973 + "slab", 974 + ] 975 + 976 + [[package]] 977 + name = "generator" 978 + version = "0.8.5" 979 + source = "registry+https://github.com/rust-lang/crates.io-index" 980 + checksum = "d18470a76cb7f8ff746cf1f7470914f900252ec36bbc40b569d74b1258446827" 981 + dependencies = [ 982 + "cc", 983 + "cfg-if", 984 + "libc", 985 + "log", 986 + "rustversion", 987 + "windows", 988 + ] 989 + 990 + [[package]] 991 + name = "generic-array" 992 + version = "0.14.7" 993 + source = "registry+https://github.com/rust-lang/crates.io-index" 994 + checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 995 + dependencies = [ 996 + "typenum", 997 + "version_check", 998 + "zeroize", 999 + ] 1000 + 1001 + [[package]] 1002 + name = "getrandom" 1003 + version = "0.2.16" 1004 + source = "registry+https://github.com/rust-lang/crates.io-index" 1005 + checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" 1006 + dependencies = [ 1007 + "cfg-if", 1008 + "js-sys", 1009 + "libc", 1010 + "wasi 0.11.1+wasi-snapshot-preview1", 1011 + "wasm-bindgen", 1012 + ] 1013 + 1014 + [[package]] 1015 + name = "getrandom" 1016 + version = "0.3.3" 1017 + source = "registry+https://github.com/rust-lang/crates.io-index" 1018 + checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" 1019 + dependencies = [ 1020 + "cfg-if", 1021 + "js-sys", 1022 + "libc", 1023 + "r-efi", 1024 + "wasi 0.14.2+wasi-0.2.4", 1025 + "wasm-bindgen", 1026 + ] 1027 + 1028 + [[package]] 1029 + name = "gimli" 1030 + version = "0.31.1" 1031 + source = "registry+https://github.com/rust-lang/crates.io-index" 1032 + checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" 1033 + 1034 + [[package]] 1035 + name = "glob" 1036 + version = "0.3.2" 1037 + source = "registry+https://github.com/rust-lang/crates.io-index" 1038 + checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" 1039 + 1040 + [[package]] 1041 + name = "gloo-timers" 1042 + version = "0.3.0" 1043 + source = "registry+https://github.com/rust-lang/crates.io-index" 1044 + checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" 1045 + dependencies = [ 1046 + "futures-channel", 1047 + "futures-core", 1048 + "js-sys", 1049 + "wasm-bindgen", 1050 + ] 1051 + 1052 + [[package]] 1053 + name = "goblin" 1054 + version = "0.8.2" 1055 + source = "registry+https://github.com/rust-lang/crates.io-index" 1056 + checksum = "1b363a30c165f666402fe6a3024d3bec7ebc898f96a4a23bd1c99f8dbf3f4f47" 1057 + dependencies = [ 1058 + "log", 1059 + "plain", 1060 + "scroll", 1061 + ] 1062 + 1063 + [[package]] 1064 + name = "h2" 1065 + version = "0.4.11" 1066 + source = "registry+https://github.com/rust-lang/crates.io-index" 1067 + checksum = "17da50a276f1e01e0ba6c029e47b7100754904ee8a278f886546e98575380785" 1068 + dependencies = [ 1069 + "atomic-waker", 1070 + "bytes", 1071 + "fnv", 1072 + "futures-core", 1073 + "futures-sink", 1074 + "http", 1075 + "indexmap", 1076 + "slab", 1077 + "tokio", 1078 + "tokio-util", 1079 + "tracing", 1080 + ] 1081 + 1082 + [[package]] 1083 + name = "hash32" 1084 + version = "0.2.1" 1085 + source = "registry+https://github.com/rust-lang/crates.io-index" 1086 + checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" 1087 + dependencies = [ 1088 + "byteorder", 1089 + ] 1090 + 1091 + [[package]] 1092 + name = "hashbrown" 1093 + version = "0.15.4" 1094 + source = "registry+https://github.com/rust-lang/crates.io-index" 1095 + checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" 1096 + dependencies = [ 1097 + "allocator-api2", 1098 + "equivalent", 1099 + "foldhash", 1100 + ] 1101 + 1102 + [[package]] 1103 + name = "heapless" 1104 + version = "0.7.17" 1105 + source = "registry+https://github.com/rust-lang/crates.io-index" 1106 + checksum = "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f" 1107 + dependencies = [ 1108 + "atomic-polyfill", 1109 + "hash32", 1110 + "rustc_version", 1111 + "serde", 1112 + "spin 0.9.8", 1113 + "stable_deref_trait", 1114 + ] 1115 + 1116 + [[package]] 1117 + name = "heck" 1118 + version = "0.5.0" 1119 + source = "registry+https://github.com/rust-lang/crates.io-index" 1120 + checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 1121 + 1122 + [[package]] 1123 + name = "hex" 1124 + version = "0.4.3" 1125 + source = "registry+https://github.com/rust-lang/crates.io-index" 1126 + checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 1127 + 1128 + [[package]] 1129 + name = "hickory-proto" 1130 + version = "0.25.2" 1131 + source = "registry+https://github.com/rust-lang/crates.io-index" 1132 + checksum = "f8a6fe56c0038198998a6f217ca4e7ef3a5e51f46163bd6dd60b5c71ca6c6502" 1133 + dependencies = [ 1134 + "async-trait", 1135 + "cfg-if", 1136 + "data-encoding", 1137 + "enum-as-inner", 1138 + "futures-channel", 1139 + "futures-io", 1140 + "futures-util", 1141 + "idna", 1142 + "ipnet", 1143 + "once_cell", 1144 + "rand 0.9.2", 1145 + "ring", 1146 + "thiserror 2.0.12", 1147 + "tinyvec", 1148 + "tokio", 1149 + "tracing", 1150 + "url", 1151 + ] 1152 + 1153 + [[package]] 1154 + name = "hickory-resolver" 1155 + version = "0.25.2" 1156 + source = "registry+https://github.com/rust-lang/crates.io-index" 1157 + checksum = "dc62a9a99b0bfb44d2ab95a7208ac952d31060efc16241c87eaf36406fecf87a" 1158 + dependencies = [ 1159 + "cfg-if", 1160 + "futures-util", 1161 + "hickory-proto", 1162 + "ipconfig", 1163 + "moka", 1164 + "once_cell", 1165 + "parking_lot", 1166 + "rand 0.9.2", 1167 + "resolv-conf", 1168 + "smallvec", 1169 + "thiserror 2.0.12", 1170 + "tokio", 1171 + "tracing", 1172 + ] 1173 + 1174 + [[package]] 1175 + name = "hmac" 1176 + version = "0.12.1" 1177 + source = "registry+https://github.com/rust-lang/crates.io-index" 1178 + checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" 1179 + dependencies = [ 1180 + "digest", 1181 + ] 1182 + 1183 + [[package]] 1184 + name = "hmac-sha1" 1185 + version = "0.2.2" 1186 + source = "registry+https://github.com/rust-lang/crates.io-index" 1187 + checksum = "6b05da5b9e5d4720bfb691eebb2b9d42da3570745da71eac8a1f5bb7e59aab88" 1188 + dependencies = [ 1189 + "hmac", 1190 + "sha1", 1191 + ] 1192 + 1193 + [[package]] 1194 + name = "hmac-sha256" 1195 + version = "1.1.12" 1196 + source = "registry+https://github.com/rust-lang/crates.io-index" 1197 + checksum = "ad6880c8d4a9ebf39c6e8b77007ce223f646a4d21ce29d99f70cb16420545425" 1198 + 1199 + [[package]] 1200 + name = "hostname-validator" 1201 + version = "1.1.1" 1202 + source = "registry+https://github.com/rust-lang/crates.io-index" 1203 + checksum = "f558a64ac9af88b5ba400d99b579451af0d39c6d360980045b91aac966d705e2" 1204 + 1205 + [[package]] 1206 + name = "http" 1207 + version = "1.3.1" 1208 + source = "registry+https://github.com/rust-lang/crates.io-index" 1209 + checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" 1210 + dependencies = [ 1211 + "bytes", 1212 + "fnv", 1213 + "itoa", 1214 + ] 1215 + 1216 + [[package]] 1217 + name = "http-body" 1218 + version = "1.0.1" 1219 + source = "registry+https://github.com/rust-lang/crates.io-index" 1220 + checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" 1221 + dependencies = [ 1222 + "bytes", 1223 + "http", 1224 + ] 1225 + 1226 + [[package]] 1227 + name = "http-body-util" 1228 + version = "0.1.3" 1229 + source = "registry+https://github.com/rust-lang/crates.io-index" 1230 + checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" 1231 + dependencies = [ 1232 + "bytes", 1233 + "futures-core", 1234 + "http", 1235 + "http-body", 1236 + "pin-project-lite", 1237 + ] 1238 + 1239 + [[package]] 1240 + name = "httparse" 1241 + version = "1.10.1" 1242 + source = "registry+https://github.com/rust-lang/crates.io-index" 1243 + checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" 1244 + 1245 + [[package]] 1246 + name = "httpdate" 1247 + version = "1.0.3" 1248 + source = "registry+https://github.com/rust-lang/crates.io-index" 1249 + checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" 1250 + 1251 + [[package]] 1252 + name = "hyper" 1253 + version = "1.6.0" 1254 + source = "registry+https://github.com/rust-lang/crates.io-index" 1255 + checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" 1256 + dependencies = [ 1257 + "bytes", 1258 + "futures-channel", 1259 + "futures-util", 1260 + "h2", 1261 + "http", 1262 + "http-body", 1263 + "httparse", 1264 + "httpdate", 1265 + "itoa", 1266 + "pin-project-lite", 1267 + "smallvec", 1268 + "tokio", 1269 + "want", 1270 + ] 1271 + 1272 + [[package]] 1273 + name = "hyper-rustls" 1274 + version = "0.27.7" 1275 + source = "registry+https://github.com/rust-lang/crates.io-index" 1276 + checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" 1277 + dependencies = [ 1278 + "http", 1279 + "hyper", 1280 + "hyper-util", 1281 + "rustls", 1282 + "rustls-pki-types", 1283 + "tokio", 1284 + "tokio-rustls", 1285 + "tower-service", 1286 + "webpki-roots 1.0.2", 1287 + ] 1288 + 1289 + [[package]] 1290 + name = "hyper-util" 1291 + version = "0.1.16" 1292 + source = "registry+https://github.com/rust-lang/crates.io-index" 1293 + checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e" 1294 + dependencies = [ 1295 + "base64", 1296 + "bytes", 1297 + "futures-channel", 1298 + "futures-core", 1299 + "futures-util", 1300 + "http", 1301 + "http-body", 1302 + "hyper", 1303 + "ipnet", 1304 + "libc", 1305 + "percent-encoding", 1306 + "pin-project-lite", 1307 + "socket2 0.6.0", 1308 + "tokio", 1309 + "tower-service", 1310 + "tracing", 1311 + ] 1312 + 1313 + [[package]] 1314 + name = "iana-time-zone" 1315 + version = "0.1.63" 1316 + source = "registry+https://github.com/rust-lang/crates.io-index" 1317 + checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" 1318 + dependencies = [ 1319 + "android_system_properties", 1320 + "core-foundation-sys", 1321 + "iana-time-zone-haiku", 1322 + "js-sys", 1323 + "log", 1324 + "wasm-bindgen", 1325 + "windows-core", 1326 + ] 1327 + 1328 + [[package]] 1329 + name = "iana-time-zone-haiku" 1330 + version = "0.1.2" 1331 + source = "registry+https://github.com/rust-lang/crates.io-index" 1332 + checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" 1333 + dependencies = [ 1334 + "cc", 1335 + ] 1336 + 1337 + [[package]] 1338 + name = "icu_collections" 1339 + version = "2.0.0" 1340 + source = "registry+https://github.com/rust-lang/crates.io-index" 1341 + checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" 1342 + dependencies = [ 1343 + "displaydoc", 1344 + "potential_utf", 1345 + "yoke", 1346 + "zerofrom", 1347 + "zerovec", 1348 + ] 1349 + 1350 + [[package]] 1351 + name = "icu_locale_core" 1352 + version = "2.0.0" 1353 + source = "registry+https://github.com/rust-lang/crates.io-index" 1354 + checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" 1355 + dependencies = [ 1356 + "displaydoc", 1357 + "litemap", 1358 + "tinystr", 1359 + "writeable", 1360 + "zerovec", 1361 + ] 1362 + 1363 + [[package]] 1364 + name = "icu_normalizer" 1365 + version = "2.0.0" 1366 + source = "registry+https://github.com/rust-lang/crates.io-index" 1367 + checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" 1368 + dependencies = [ 1369 + "displaydoc", 1370 + "icu_collections", 1371 + "icu_normalizer_data", 1372 + "icu_properties", 1373 + "icu_provider", 1374 + "smallvec", 1375 + "zerovec", 1376 + ] 1377 + 1378 + [[package]] 1379 + name = "icu_normalizer_data" 1380 + version = "2.0.0" 1381 + source = "registry+https://github.com/rust-lang/crates.io-index" 1382 + checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" 1383 + 1384 + [[package]] 1385 + name = "icu_properties" 1386 + version = "2.0.1" 1387 + source = "registry+https://github.com/rust-lang/crates.io-index" 1388 + checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" 1389 + dependencies = [ 1390 + "displaydoc", 1391 + "icu_collections", 1392 + "icu_locale_core", 1393 + "icu_properties_data", 1394 + "icu_provider", 1395 + "potential_utf", 1396 + "zerotrie", 1397 + "zerovec", 1398 + ] 1399 + 1400 + [[package]] 1401 + name = "icu_properties_data" 1402 + version = "2.0.1" 1403 + source = "registry+https://github.com/rust-lang/crates.io-index" 1404 + checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" 1405 + 1406 + [[package]] 1407 + name = "icu_provider" 1408 + version = "2.0.0" 1409 + source = "registry+https://github.com/rust-lang/crates.io-index" 1410 + checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" 1411 + dependencies = [ 1412 + "displaydoc", 1413 + "icu_locale_core", 1414 + "stable_deref_trait", 1415 + "tinystr", 1416 + "writeable", 1417 + "yoke", 1418 + "zerofrom", 1419 + "zerotrie", 1420 + "zerovec", 1421 + ] 1422 + 1423 + [[package]] 1424 + name = "idna" 1425 + version = "1.0.3" 1426 + source = "registry+https://github.com/rust-lang/crates.io-index" 1427 + checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" 1428 + dependencies = [ 1429 + "idna_adapter", 1430 + "smallvec", 1431 + "utf8_iter", 1432 + ] 1433 + 1434 + [[package]] 1435 + name = "idna_adapter" 1436 + version = "1.2.1" 1437 + source = "registry+https://github.com/rust-lang/crates.io-index" 1438 + checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" 1439 + dependencies = [ 1440 + "icu_normalizer", 1441 + "icu_properties", 1442 + ] 1443 + 1444 + [[package]] 1445 + name = "igd-next" 1446 + version = "0.16.2" 1447 + source = "registry+https://github.com/rust-lang/crates.io-index" 1448 + checksum = "516893339c97f6011282d5825ac94fc1c7aad5cad26bdc2d0cee068c0bf97f97" 1449 + dependencies = [ 1450 + "async-trait", 1451 + "attohttpc", 1452 + "bytes", 1453 + "futures", 1454 + "http", 1455 + "http-body-util", 1456 + "hyper", 1457 + "hyper-util", 1458 + "log", 1459 + "rand 0.9.2", 1460 + "tokio", 1461 + "url", 1462 + "xmltree", 1463 + ] 1464 + 1465 + [[package]] 1466 + name = "imsg" 1467 + version = "0.1.0" 1468 + source = "git+https://github.com/n0-computer/imsg?branch=main#9165b1c6d6bc27ea324a01b1090fb7f269f05dc2" 1469 + dependencies = [ 1470 + "anyhow", 1471 + "bytes", 1472 + "iroh", 1473 + "n0-future 0.2.0", 1474 + "thiserror 2.0.12", 1475 + "tokio", 1476 + "tokio-util", 1477 + "tracing", 1478 + ] 1479 + 1480 + [[package]] 1481 + name = "indexmap" 1482 + version = "2.10.0" 1483 + source = "registry+https://github.com/rust-lang/crates.io-index" 1484 + checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" 1485 + dependencies = [ 1486 + "equivalent", 1487 + "hashbrown", 1488 + ] 1489 + 1490 + [[package]] 1491 + name = "inout" 1492 + version = "0.1.4" 1493 + source = "registry+https://github.com/rust-lang/crates.io-index" 1494 + checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" 1495 + dependencies = [ 1496 + "generic-array", 1497 + ] 1498 + 1499 + [[package]] 1500 + name = "instant" 1501 + version = "0.1.13" 1502 + source = "registry+https://github.com/rust-lang/crates.io-index" 1503 + checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" 1504 + dependencies = [ 1505 + "cfg-if", 1506 + "js-sys", 1507 + "wasm-bindgen", 1508 + "web-sys", 1509 + ] 1510 + 1511 + [[package]] 1512 + name = "io-uring" 1513 + version = "0.7.9" 1514 + source = "registry+https://github.com/rust-lang/crates.io-index" 1515 + checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4" 1516 + dependencies = [ 1517 + "bitflags", 1518 + "cfg-if", 1519 + "libc", 1520 + ] 1521 + 1522 + [[package]] 1523 + name = "ipconfig" 1524 + version = "0.3.2" 1525 + source = "registry+https://github.com/rust-lang/crates.io-index" 1526 + checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" 1527 + dependencies = [ 1528 + "socket2 0.5.10", 1529 + "widestring", 1530 + "windows-sys 0.48.0", 1531 + "winreg", 1532 + ] 1533 + 1534 + [[package]] 1535 + name = "ipnet" 1536 + version = "2.11.0" 1537 + source = "registry+https://github.com/rust-lang/crates.io-index" 1538 + checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" 1539 + 1540 + [[package]] 1541 + name = "iri-string" 1542 + version = "0.7.8" 1543 + source = "registry+https://github.com/rust-lang/crates.io-index" 1544 + checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" 1545 + dependencies = [ 1546 + "memchr", 1547 + "serde", 1548 + ] 1549 + 1550 + [[package]] 1551 + name = "iroh" 1552 + version = "0.91.1" 1553 + source = "registry+https://github.com/rust-lang/crates.io-index" 1554 + checksum = "c6a98c47bb5f720edeb77be502a8acd238a3c0755f0b1ad865a716224d794a59" 1555 + dependencies = [ 1556 + "aead", 1557 + "backon", 1558 + "bytes", 1559 + "cfg_aliases", 1560 + "crypto_box", 1561 + "data-encoding", 1562 + "der", 1563 + "derive_more 2.0.1", 1564 + "ed25519-dalek", 1565 + "futures-buffered", 1566 + "futures-util", 1567 + "getrandom 0.3.3", 1568 + "hickory-resolver", 1569 + "http", 1570 + "igd-next", 1571 + "instant", 1572 + "iroh-base", 1573 + "iroh-metrics", 1574 + "iroh-quinn", 1575 + "iroh-quinn-proto", 1576 + "iroh-quinn-udp", 1577 + "iroh-relay", 1578 + "n0-future 0.1.3", 1579 + "n0-snafu", 1580 + "n0-watcher", 1581 + "nested_enum_utils", 1582 + "netdev", 1583 + "netwatch", 1584 + "pin-project", 1585 + "pkarr", 1586 + "portmapper", 1587 + "rand 0.8.5", 1588 + "reqwest", 1589 + "ring", 1590 + "rustls", 1591 + "rustls-pki-types", 1592 + "rustls-webpki", 1593 + "serde", 1594 + "smallvec", 1595 + "snafu", 1596 + "spki", 1597 + "strum", 1598 + "stun-rs", 1599 + "surge-ping", 1600 + "swarm-discovery", 1601 + "time", 1602 + "tokio", 1603 + "tokio-stream", 1604 + "tokio-util", 1605 + "tracing", 1606 + "url", 1607 + "wasm-bindgen-futures", 1608 + "webpki-roots 0.26.11", 1609 + "z32", 1610 + ] 1611 + 1612 + [[package]] 1613 + name = "iroh-base" 1614 + version = "0.91.1" 1615 + source = "registry+https://github.com/rust-lang/crates.io-index" 1616 + checksum = "78bde4e612191173e8ade55e3aa719044514edfff952292ffbf581be35cbb59c" 1617 + dependencies = [ 1618 + "curve25519-dalek", 1619 + "data-encoding", 1620 + "derive_more 2.0.1", 1621 + "ed25519-dalek", 1622 + "n0-snafu", 1623 + "nested_enum_utils", 1624 + "rand_core 0.6.4", 1625 + "serde", 1626 + "snafu", 1627 + "url", 1628 + ] 1629 + 1630 + [[package]] 1631 + name = "iroh-metrics" 1632 + version = "0.35.0" 1633 + source = "registry+https://github.com/rust-lang/crates.io-index" 1634 + checksum = "c8922c169f1b84d39d325c02ef1bbe1419d4de6e35f0403462b3c7e60cc19634" 1635 + dependencies = [ 1636 + "iroh-metrics-derive", 1637 + "itoa", 1638 + "postcard", 1639 + "serde", 1640 + "snafu", 1641 + "tracing", 1642 + ] 1643 + 1644 + [[package]] 1645 + name = "iroh-metrics-derive" 1646 + version = "0.2.0" 1647 + source = "registry+https://github.com/rust-lang/crates.io-index" 1648 + checksum = "8d12f5c45c4ed2436302a4e03cad9a0ad34b2962ad0c5791e1019c0ee30eeb09" 1649 + dependencies = [ 1650 + "heck", 1651 + "proc-macro2", 1652 + "quote", 1653 + "syn 2.0.104", 1654 + ] 1655 + 1656 + [[package]] 1657 + name = "iroh-quinn" 1658 + version = "0.14.0" 1659 + source = "registry+https://github.com/rust-lang/crates.io-index" 1660 + checksum = "0cde160ebee7aabede6ae887460cd303c8b809054224815addf1469d54a6fcf7" 1661 + dependencies = [ 1662 + "bytes", 1663 + "cfg_aliases", 1664 + "iroh-quinn-proto", 1665 + "iroh-quinn-udp", 1666 + "pin-project-lite", 1667 + "rustc-hash", 1668 + "rustls", 1669 + "socket2 0.5.10", 1670 + "thiserror 2.0.12", 1671 + "tokio", 1672 + "tracing", 1673 + "web-time", 1674 + ] 1675 + 1676 + [[package]] 1677 + name = "iroh-quinn-proto" 1678 + version = "0.13.0" 1679 + source = "registry+https://github.com/rust-lang/crates.io-index" 1680 + checksum = "929d5d8fa77d5c304d3ee7cae9aede31f13908bd049f9de8c7c0094ad6f7c535" 1681 + dependencies = [ 1682 + "bytes", 1683 + "getrandom 0.2.16", 1684 + "rand 0.8.5", 1685 + "ring", 1686 + "rustc-hash", 1687 + "rustls", 1688 + "rustls-pki-types", 1689 + "slab", 1690 + "thiserror 2.0.12", 1691 + "tinyvec", 1692 + "tracing", 1693 + "web-time", 1694 + ] 1695 + 1696 + [[package]] 1697 + name = "iroh-quinn-udp" 1698 + version = "0.5.7" 1699 + source = "registry+https://github.com/rust-lang/crates.io-index" 1700 + checksum = "c53afaa1049f7c83ea1331f5ebb9e6ebc5fdd69c468b7a22dd598b02c9bcc973" 1701 + dependencies = [ 1702 + "cfg_aliases", 1703 + "libc", 1704 + "once_cell", 1705 + "socket2 0.5.10", 1706 + "tracing", 1707 + "windows-sys 0.59.0", 1708 + ] 1709 + 1710 + [[package]] 1711 + name = "iroh-relay" 1712 + version = "0.91.1" 1713 + source = "registry+https://github.com/rust-lang/crates.io-index" 1714 + checksum = "9f19e43de2cfc04748054e1cbf7854ae1e192ddc45a4adeae7be7076a8f1fd43" 1715 + dependencies = [ 1716 + "blake3", 1717 + "bytes", 1718 + "cfg_aliases", 1719 + "data-encoding", 1720 + "derive_more 2.0.1", 1721 + "getrandom 0.3.3", 1722 + "hickory-resolver", 1723 + "http", 1724 + "http-body-util", 1725 + "hyper", 1726 + "hyper-util", 1727 + "iroh-base", 1728 + "iroh-metrics", 1729 + "iroh-quinn", 1730 + "iroh-quinn-proto", 1731 + "lru", 1732 + "n0-future 0.1.3", 1733 + "n0-snafu", 1734 + "nested_enum_utils", 1735 + "num_enum", 1736 + "pin-project", 1737 + "pkarr", 1738 + "postcard", 1739 + "rand 0.8.5", 1740 + "reqwest", 1741 + "rustls", 1742 + "rustls-pki-types", 1743 + "rustls-webpki", 1744 + "serde", 1745 + "serde_bytes", 1746 + "sha1", 1747 + "snafu", 1748 + "strum", 1749 + "tokio", 1750 + "tokio-rustls", 1751 + "tokio-util", 1752 + "tokio-websockets", 1753 + "tracing", 1754 + "url", 1755 + "webpki-roots 0.26.11", 1756 + "ws_stream_wasm", 1757 + "z32", 1758 + ] 1759 + 1760 + [[package]] 1761 + name = "iroh-streamplace" 1762 + version = "0.1.0" 1763 + dependencies = [ 1764 + "anyhow", 1765 + "async-trait", 1766 + "bytes", 1767 + "imsg", 1768 + "iroh", 1769 + "n0-future 0.2.0", 1770 + "snafu", 1771 + "tokio", 1772 + "tracing", 1773 + "tracing-subscriber", 1774 + "uniffi", 1775 + "url", 1776 + ] 1777 + 1778 + [[package]] 1779 + name = "itoa" 1780 + version = "1.0.15" 1781 + source = "registry+https://github.com/rust-lang/crates.io-index" 1782 + checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" 1783 + 1784 + [[package]] 1785 + name = "js-sys" 1786 + version = "0.3.77" 1787 + source = "registry+https://github.com/rust-lang/crates.io-index" 1788 + checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" 1789 + dependencies = [ 1790 + "once_cell", 1791 + "wasm-bindgen", 1792 + ] 1793 + 1794 + [[package]] 1795 + name = "lazy_static" 1796 + version = "1.5.0" 1797 + source = "registry+https://github.com/rust-lang/crates.io-index" 1798 + checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 1799 + 1800 + [[package]] 1801 + name = "libc" 1802 + version = "0.2.174" 1803 + source = "registry+https://github.com/rust-lang/crates.io-index" 1804 + checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" 1805 + 1806 + [[package]] 1807 + name = "litemap" 1808 + version = "0.8.0" 1809 + source = "registry+https://github.com/rust-lang/crates.io-index" 1810 + checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" 1811 + 1812 + [[package]] 1813 + name = "litrs" 1814 + version = "0.4.2" 1815 + source = "registry+https://github.com/rust-lang/crates.io-index" 1816 + checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" 1817 + 1818 + [[package]] 1819 + name = "lock_api" 1820 + version = "0.4.13" 1821 + source = "registry+https://github.com/rust-lang/crates.io-index" 1822 + checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" 1823 + dependencies = [ 1824 + "autocfg", 1825 + "scopeguard", 1826 + ] 1827 + 1828 + [[package]] 1829 + name = "log" 1830 + version = "0.4.27" 1831 + source = "registry+https://github.com/rust-lang/crates.io-index" 1832 + checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" 1833 + 1834 + [[package]] 1835 + name = "loom" 1836 + version = "0.7.2" 1837 + source = "registry+https://github.com/rust-lang/crates.io-index" 1838 + checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" 1839 + dependencies = [ 1840 + "cfg-if", 1841 + "generator", 1842 + "scoped-tls", 1843 + "tracing", 1844 + "tracing-subscriber", 1845 + ] 1846 + 1847 + [[package]] 1848 + name = "lru" 1849 + version = "0.13.0" 1850 + source = "registry+https://github.com/rust-lang/crates.io-index" 1851 + checksum = "227748d55f2f0ab4735d87fd623798cb6b664512fe979705f829c9f81c934465" 1852 + dependencies = [ 1853 + "hashbrown", 1854 + ] 1855 + 1856 + [[package]] 1857 + name = "lru-slab" 1858 + version = "0.1.2" 1859 + source = "registry+https://github.com/rust-lang/crates.io-index" 1860 + checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" 1861 + 1862 + [[package]] 1863 + name = "matchers" 1864 + version = "0.1.0" 1865 + source = "registry+https://github.com/rust-lang/crates.io-index" 1866 + checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" 1867 + dependencies = [ 1868 + "regex-automata 0.1.10", 1869 + ] 1870 + 1871 + [[package]] 1872 + name = "md5" 1873 + version = "0.7.0" 1874 + source = "registry+https://github.com/rust-lang/crates.io-index" 1875 + checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" 1876 + 1877 + [[package]] 1878 + name = "memchr" 1879 + version = "2.7.5" 1880 + source = "registry+https://github.com/rust-lang/crates.io-index" 1881 + checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" 1882 + 1883 + [[package]] 1884 + name = "mime" 1885 + version = "0.3.17" 1886 + source = "registry+https://github.com/rust-lang/crates.io-index" 1887 + checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 1888 + 1889 + [[package]] 1890 + name = "mime_guess" 1891 + version = "2.0.5" 1892 + source = "registry+https://github.com/rust-lang/crates.io-index" 1893 + checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" 1894 + dependencies = [ 1895 + "mime", 1896 + "unicase", 1897 + ] 1898 + 1899 + [[package]] 1900 + name = "minimal-lexical" 1901 + version = "0.2.1" 1902 + source = "registry+https://github.com/rust-lang/crates.io-index" 1903 + checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 1904 + 1905 + [[package]] 1906 + name = "miniz_oxide" 1907 + version = "0.8.9" 1908 + source = "registry+https://github.com/rust-lang/crates.io-index" 1909 + checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" 1910 + dependencies = [ 1911 + "adler2", 1912 + ] 1913 + 1914 + [[package]] 1915 + name = "mio" 1916 + version = "1.0.4" 1917 + source = "registry+https://github.com/rust-lang/crates.io-index" 1918 + checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" 1919 + dependencies = [ 1920 + "libc", 1921 + "wasi 0.11.1+wasi-snapshot-preview1", 1922 + "windows-sys 0.59.0", 1923 + ] 1924 + 1925 + [[package]] 1926 + name = "moka" 1927 + version = "0.12.10" 1928 + source = "registry+https://github.com/rust-lang/crates.io-index" 1929 + checksum = "a9321642ca94a4282428e6ea4af8cc2ca4eac48ac7a6a4ea8f33f76d0ce70926" 1930 + dependencies = [ 1931 + "crossbeam-channel", 1932 + "crossbeam-epoch", 1933 + "crossbeam-utils", 1934 + "loom", 1935 + "parking_lot", 1936 + "portable-atomic", 1937 + "rustc_version", 1938 + "smallvec", 1939 + "tagptr", 1940 + "thiserror 1.0.69", 1941 + "uuid", 1942 + ] 1943 + 1944 + [[package]] 1945 + name = "n0-future" 1946 + version = "0.1.3" 1947 + source = "registry+https://github.com/rust-lang/crates.io-index" 1948 + checksum = "7bb0e5d99e681ab3c938842b96fcb41bf8a7bb4bfdb11ccbd653a7e83e06c794" 1949 + dependencies = [ 1950 + "cfg_aliases", 1951 + "derive_more 1.0.0", 1952 + "futures-buffered", 1953 + "futures-lite", 1954 + "futures-util", 1955 + "js-sys", 1956 + "pin-project", 1957 + "send_wrapper", 1958 + "tokio", 1959 + "tokio-util", 1960 + "wasm-bindgen", 1961 + "wasm-bindgen-futures", 1962 + "web-time", 1963 + ] 1964 + 1965 + [[package]] 1966 + name = "n0-future" 1967 + version = "0.2.0" 1968 + source = "registry+https://github.com/rust-lang/crates.io-index" 1969 + checksum = "89d7dd42bd0114c9daa9c4f2255d692a73bba45767ec32cf62892af6fe5d31f6" 1970 + dependencies = [ 1971 + "cfg_aliases", 1972 + "derive_more 1.0.0", 1973 + "futures-buffered", 1974 + "futures-lite", 1975 + "futures-util", 1976 + "js-sys", 1977 + "pin-project", 1978 + "send_wrapper", 1979 + "tokio", 1980 + "tokio-util", 1981 + "wasm-bindgen", 1982 + "wasm-bindgen-futures", 1983 + "web-time", 1984 + ] 1985 + 1986 + [[package]] 1987 + name = "n0-snafu" 1988 + version = "0.2.1" 1989 + source = "registry+https://github.com/rust-lang/crates.io-index" 1990 + checksum = "c4fed465ff57041f29db78a9adc8864296ef93c6c16029f9e192dc303404ebd0" 1991 + dependencies = [ 1992 + "anyhow", 1993 + "btparse", 1994 + "color-backtrace", 1995 + "snafu", 1996 + "tracing-error", 1997 + ] 1998 + 1999 + [[package]] 2000 + name = "n0-watcher" 2001 + version = "0.3.0" 2002 + source = "registry+https://github.com/rust-lang/crates.io-index" 2003 + checksum = "c31462392a10d5ada4b945e840cbec2d5f3fee752b96c4b33eb41414d8f45c2a" 2004 + dependencies = [ 2005 + "derive_more 1.0.0", 2006 + "n0-future 0.1.3", 2007 + "snafu", 2008 + ] 2009 + 2010 + [[package]] 2011 + name = "nested_enum_utils" 2012 + version = "0.2.2" 2013 + source = "registry+https://github.com/rust-lang/crates.io-index" 2014 + checksum = "43fa9161ed44d30e9702fe42bd78693bceac0fed02f647da749f36109023d3a3" 2015 + dependencies = [ 2016 + "proc-macro-crate", 2017 + "proc-macro2", 2018 + "quote", 2019 + "syn 1.0.109", 2020 + ] 2021 + 2022 + [[package]] 2023 + name = "netdev" 2024 + version = "0.36.0" 2025 + source = "registry+https://github.com/rust-lang/crates.io-index" 2026 + checksum = "862209dce034f82a44c95ce2b5183730d616f2a68746b9c1959aa2572e77c0a1" 2027 + dependencies = [ 2028 + "dlopen2", 2029 + "ipnet", 2030 + "libc", 2031 + "netlink-packet-core", 2032 + "netlink-packet-route 0.22.0", 2033 + "netlink-sys", 2034 + "once_cell", 2035 + "system-configuration", 2036 + "windows-sys 0.59.0", 2037 + ] 2038 + 2039 + [[package]] 2040 + name = "netlink-packet-core" 2041 + version = "0.7.0" 2042 + source = "registry+https://github.com/rust-lang/crates.io-index" 2043 + checksum = "72724faf704479d67b388da142b186f916188505e7e0b26719019c525882eda4" 2044 + dependencies = [ 2045 + "anyhow", 2046 + "byteorder", 2047 + "netlink-packet-utils", 2048 + ] 2049 + 2050 + [[package]] 2051 + name = "netlink-packet-route" 2052 + version = "0.22.0" 2053 + source = "registry+https://github.com/rust-lang/crates.io-index" 2054 + checksum = "fc0e7987b28514adf555dc1f9a5c30dfc3e50750bbaffb1aec41ca7b23dcd8e4" 2055 + dependencies = [ 2056 + "anyhow", 2057 + "bitflags", 2058 + "byteorder", 2059 + "libc", 2060 + "log", 2061 + "netlink-packet-core", 2062 + "netlink-packet-utils", 2063 + ] 2064 + 2065 + [[package]] 2066 + name = "netlink-packet-route" 2067 + version = "0.24.0" 2068 + source = "registry+https://github.com/rust-lang/crates.io-index" 2069 + checksum = "56d83370a96813d7c977f8b63054f1162df6e5784f1c598d689236564fb5a6f2" 2070 + dependencies = [ 2071 + "anyhow", 2072 + "bitflags", 2073 + "byteorder", 2074 + "libc", 2075 + "log", 2076 + "netlink-packet-core", 2077 + "netlink-packet-utils", 2078 + ] 2079 + 2080 + [[package]] 2081 + name = "netlink-packet-utils" 2082 + version = "0.5.2" 2083 + source = "registry+https://github.com/rust-lang/crates.io-index" 2084 + checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" 2085 + dependencies = [ 2086 + "anyhow", 2087 + "byteorder", 2088 + "paste", 2089 + "thiserror 1.0.69", 2090 + ] 2091 + 2092 + [[package]] 2093 + name = "netlink-proto" 2094 + version = "0.11.5" 2095 + source = "registry+https://github.com/rust-lang/crates.io-index" 2096 + checksum = "72452e012c2f8d612410d89eea01e2d9b56205274abb35d53f60200b2ec41d60" 2097 + dependencies = [ 2098 + "bytes", 2099 + "futures", 2100 + "log", 2101 + "netlink-packet-core", 2102 + "netlink-sys", 2103 + "thiserror 2.0.12", 2104 + ] 2105 + 2106 + [[package]] 2107 + name = "netlink-sys" 2108 + version = "0.8.7" 2109 + source = "registry+https://github.com/rust-lang/crates.io-index" 2110 + checksum = "16c903aa70590cb93691bf97a767c8d1d6122d2cc9070433deb3bbf36ce8bd23" 2111 + dependencies = [ 2112 + "bytes", 2113 + "futures", 2114 + "libc", 2115 + "log", 2116 + "tokio", 2117 + ] 2118 + 2119 + [[package]] 2120 + name = "netwatch" 2121 + version = "0.8.0" 2122 + source = "registry+https://github.com/rust-lang/crates.io-index" 2123 + checksum = "8901dbb408894af3df3fc51420ba0c6faf3a7d896077b797c39b7001e2f787bd" 2124 + dependencies = [ 2125 + "atomic-waker", 2126 + "bytes", 2127 + "cfg_aliases", 2128 + "derive_more 2.0.1", 2129 + "iroh-quinn-udp", 2130 + "js-sys", 2131 + "libc", 2132 + "n0-future 0.1.3", 2133 + "n0-watcher", 2134 + "nested_enum_utils", 2135 + "netdev", 2136 + "netlink-packet-core", 2137 + "netlink-packet-route 0.24.0", 2138 + "netlink-proto", 2139 + "netlink-sys", 2140 + "pin-project-lite", 2141 + "serde", 2142 + "snafu", 2143 + "socket2 0.6.0", 2144 + "time", 2145 + "tokio", 2146 + "tokio-util", 2147 + "tracing", 2148 + "web-sys", 2149 + "windows", 2150 + "windows-result", 2151 + "wmi", 2152 + ] 2153 + 2154 + [[package]] 2155 + name = "no-std-net" 2156 + version = "0.6.0" 2157 + source = "registry+https://github.com/rust-lang/crates.io-index" 2158 + checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" 2159 + 2160 + [[package]] 2161 + name = "nom" 2162 + version = "7.1.3" 2163 + source = "registry+https://github.com/rust-lang/crates.io-index" 2164 + checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 2165 + dependencies = [ 2166 + "memchr", 2167 + "minimal-lexical", 2168 + ] 2169 + 2170 + [[package]] 2171 + name = "ntimestamp" 2172 + version = "1.0.0" 2173 + source = "registry+https://github.com/rust-lang/crates.io-index" 2174 + checksum = "c50f94c405726d3e0095e89e72f75ce7f6587b94a8bd8dc8054b73f65c0fd68c" 2175 + dependencies = [ 2176 + "base32", 2177 + "document-features", 2178 + "getrandom 0.2.16", 2179 + "httpdate", 2180 + "js-sys", 2181 + "once_cell", 2182 + "serde", 2183 + ] 2184 + 2185 + [[package]] 2186 + name = "nu-ansi-term" 2187 + version = "0.46.0" 2188 + source = "registry+https://github.com/rust-lang/crates.io-index" 2189 + checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" 2190 + dependencies = [ 2191 + "overload", 2192 + "winapi", 2193 + ] 2194 + 2195 + [[package]] 2196 + name = "num-conv" 2197 + version = "0.1.0" 2198 + source = "registry+https://github.com/rust-lang/crates.io-index" 2199 + checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" 2200 + 2201 + [[package]] 2202 + name = "num-traits" 2203 + version = "0.2.19" 2204 + source = "registry+https://github.com/rust-lang/crates.io-index" 2205 + checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 2206 + dependencies = [ 2207 + "autocfg", 2208 + ] 2209 + 2210 + [[package]] 2211 + name = "num_enum" 2212 + version = "0.7.4" 2213 + source = "registry+https://github.com/rust-lang/crates.io-index" 2214 + checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a" 2215 + dependencies = [ 2216 + "num_enum_derive", 2217 + "rustversion", 2218 + ] 2219 + 2220 + [[package]] 2221 + name = "num_enum_derive" 2222 + version = "0.7.4" 2223 + source = "registry+https://github.com/rust-lang/crates.io-index" 2224 + checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" 2225 + dependencies = [ 2226 + "proc-macro-crate", 2227 + "proc-macro2", 2228 + "quote", 2229 + "syn 2.0.104", 2230 + ] 2231 + 2232 + [[package]] 2233 + name = "object" 2234 + version = "0.36.7" 2235 + source = "registry+https://github.com/rust-lang/crates.io-index" 2236 + checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" 2237 + dependencies = [ 2238 + "memchr", 2239 + ] 2240 + 2241 + [[package]] 2242 + name = "once_cell" 2243 + version = "1.21.3" 2244 + source = "registry+https://github.com/rust-lang/crates.io-index" 2245 + checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 2246 + dependencies = [ 2247 + "critical-section", 2248 + "portable-atomic", 2249 + ] 2250 + 2251 + [[package]] 2252 + name = "opaque-debug" 2253 + version = "0.3.1" 2254 + source = "registry+https://github.com/rust-lang/crates.io-index" 2255 + checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" 2256 + 2257 + [[package]] 2258 + name = "overload" 2259 + version = "0.1.1" 2260 + source = "registry+https://github.com/rust-lang/crates.io-index" 2261 + checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" 2262 + 2263 + [[package]] 2264 + name = "parking" 2265 + version = "2.2.1" 2266 + source = "registry+https://github.com/rust-lang/crates.io-index" 2267 + checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" 2268 + 2269 + [[package]] 2270 + name = "parking_lot" 2271 + version = "0.12.4" 2272 + source = "registry+https://github.com/rust-lang/crates.io-index" 2273 + checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" 2274 + dependencies = [ 2275 + "lock_api", 2276 + "parking_lot_core", 2277 + ] 2278 + 2279 + [[package]] 2280 + name = "parking_lot_core" 2281 + version = "0.9.11" 2282 + source = "registry+https://github.com/rust-lang/crates.io-index" 2283 + checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" 2284 + dependencies = [ 2285 + "cfg-if", 2286 + "libc", 2287 + "redox_syscall", 2288 + "smallvec", 2289 + "windows-targets 0.52.6", 2290 + ] 2291 + 2292 + [[package]] 2293 + name = "paste" 2294 + version = "1.0.15" 2295 + source = "registry+https://github.com/rust-lang/crates.io-index" 2296 + checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" 2297 + 2298 + [[package]] 2299 + name = "pem-rfc7468" 2300 + version = "0.7.0" 2301 + source = "registry+https://github.com/rust-lang/crates.io-index" 2302 + checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" 2303 + dependencies = [ 2304 + "base64ct", 2305 + ] 2306 + 2307 + [[package]] 2308 + name = "percent-encoding" 2309 + version = "2.3.1" 2310 + source = "registry+https://github.com/rust-lang/crates.io-index" 2311 + checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 2312 + 2313 + [[package]] 2314 + name = "pest" 2315 + version = "2.8.1" 2316 + source = "registry+https://github.com/rust-lang/crates.io-index" 2317 + checksum = "1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323" 2318 + dependencies = [ 2319 + "memchr", 2320 + "thiserror 2.0.12", 2321 + "ucd-trie", 2322 + ] 2323 + 2324 + [[package]] 2325 + name = "pest_derive" 2326 + version = "2.8.1" 2327 + source = "registry+https://github.com/rust-lang/crates.io-index" 2328 + checksum = "bb056d9e8ea77922845ec74a1c4e8fb17e7c218cc4fc11a15c5d25e189aa40bc" 2329 + dependencies = [ 2330 + "pest", 2331 + "pest_generator", 2332 + ] 2333 + 2334 + [[package]] 2335 + name = "pest_generator" 2336 + version = "2.8.1" 2337 + source = "registry+https://github.com/rust-lang/crates.io-index" 2338 + checksum = "87e404e638f781eb3202dc82db6760c8ae8a1eeef7fb3fa8264b2ef280504966" 2339 + dependencies = [ 2340 + "pest", 2341 + "pest_meta", 2342 + "proc-macro2", 2343 + "quote", 2344 + "syn 2.0.104", 2345 + ] 2346 + 2347 + [[package]] 2348 + name = "pest_meta" 2349 + version = "2.8.1" 2350 + source = "registry+https://github.com/rust-lang/crates.io-index" 2351 + checksum = "edd1101f170f5903fde0914f899bb503d9ff5271d7ba76bbb70bea63690cc0d5" 2352 + dependencies = [ 2353 + "pest", 2354 + "sha2", 2355 + ] 2356 + 2357 + [[package]] 2358 + name = "pharos" 2359 + version = "0.5.3" 2360 + source = "registry+https://github.com/rust-lang/crates.io-index" 2361 + checksum = "e9567389417feee6ce15dd6527a8a1ecac205ef62c2932bcf3d9f6fc5b78b414" 2362 + dependencies = [ 2363 + "futures", 2364 + "rustc_version", 2365 + ] 2366 + 2367 + [[package]] 2368 + name = "pin-project" 2369 + version = "1.1.10" 2370 + source = "registry+https://github.com/rust-lang/crates.io-index" 2371 + checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" 2372 + dependencies = [ 2373 + "pin-project-internal", 2374 + ] 2375 + 2376 + [[package]] 2377 + name = "pin-project-internal" 2378 + version = "1.1.10" 2379 + source = "registry+https://github.com/rust-lang/crates.io-index" 2380 + checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" 2381 + dependencies = [ 2382 + "proc-macro2", 2383 + "quote", 2384 + "syn 2.0.104", 2385 + ] 2386 + 2387 + [[package]] 2388 + name = "pin-project-lite" 2389 + version = "0.2.16" 2390 + source = "registry+https://github.com/rust-lang/crates.io-index" 2391 + checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" 2392 + 2393 + [[package]] 2394 + name = "pin-utils" 2395 + version = "0.1.0" 2396 + source = "registry+https://github.com/rust-lang/crates.io-index" 2397 + checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 2398 + 2399 + [[package]] 2400 + name = "pkarr" 2401 + version = "3.10.0" 2402 + source = "registry+https://github.com/rust-lang/crates.io-index" 2403 + checksum = "5eb1f2f4311bae1da11f930c804c724c9914cf55ae51a9ee0440fc98826984f7" 2404 + dependencies = [ 2405 + "async-compat", 2406 + "base32", 2407 + "bytes", 2408 + "cfg_aliases", 2409 + "document-features", 2410 + "dyn-clone", 2411 + "ed25519-dalek", 2412 + "futures-buffered", 2413 + "futures-lite", 2414 + "getrandom 0.2.16", 2415 + "log", 2416 + "lru", 2417 + "ntimestamp", 2418 + "reqwest", 2419 + "self_cell", 2420 + "serde", 2421 + "sha1_smol", 2422 + "simple-dns", 2423 + "thiserror 2.0.12", 2424 + "tokio", 2425 + "tracing", 2426 + "url", 2427 + "wasm-bindgen-futures", 2428 + ] 2429 + 2430 + [[package]] 2431 + name = "pkcs8" 2432 + version = "0.10.2" 2433 + source = "registry+https://github.com/rust-lang/crates.io-index" 2434 + checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" 2435 + dependencies = [ 2436 + "der", 2437 + "spki", 2438 + ] 2439 + 2440 + [[package]] 2441 + name = "plain" 2442 + version = "0.2.3" 2443 + source = "registry+https://github.com/rust-lang/crates.io-index" 2444 + checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" 2445 + 2446 + [[package]] 2447 + name = "pnet_base" 2448 + version = "0.34.0" 2449 + source = "registry+https://github.com/rust-lang/crates.io-index" 2450 + checksum = "fe4cf6fb3ab38b68d01ab2aea03ed3d1132b4868fa4e06285f29f16da01c5f4c" 2451 + dependencies = [ 2452 + "no-std-net", 2453 + ] 2454 + 2455 + [[package]] 2456 + name = "pnet_macros" 2457 + version = "0.34.0" 2458 + source = "registry+https://github.com/rust-lang/crates.io-index" 2459 + checksum = "688b17499eee04a0408aca0aa5cba5fc86401d7216de8a63fdf7a4c227871804" 2460 + dependencies = [ 2461 + "proc-macro2", 2462 + "quote", 2463 + "regex", 2464 + "syn 2.0.104", 2465 + ] 2466 + 2467 + [[package]] 2468 + name = "pnet_macros_support" 2469 + version = "0.34.0" 2470 + source = "registry+https://github.com/rust-lang/crates.io-index" 2471 + checksum = "eea925b72f4bd37f8eab0f221bbe4c78b63498350c983ffa9dd4bcde7e030f56" 2472 + dependencies = [ 2473 + "pnet_base", 2474 + ] 2475 + 2476 + [[package]] 2477 + name = "pnet_packet" 2478 + version = "0.34.0" 2479 + source = "registry+https://github.com/rust-lang/crates.io-index" 2480 + checksum = "a9a005825396b7fe7a38a8e288dbc342d5034dac80c15212436424fef8ea90ba" 2481 + dependencies = [ 2482 + "glob", 2483 + "pnet_base", 2484 + "pnet_macros", 2485 + "pnet_macros_support", 2486 + ] 2487 + 2488 + [[package]] 2489 + name = "poly1305" 2490 + version = "0.8.0" 2491 + source = "registry+https://github.com/rust-lang/crates.io-index" 2492 + checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" 2493 + dependencies = [ 2494 + "cpufeatures", 2495 + "opaque-debug", 2496 + "universal-hash", 2497 + ] 2498 + 2499 + [[package]] 2500 + name = "portable-atomic" 2501 + version = "1.11.1" 2502 + source = "registry+https://github.com/rust-lang/crates.io-index" 2503 + checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" 2504 + 2505 + [[package]] 2506 + name = "portmapper" 2507 + version = "0.8.0" 2508 + source = "registry+https://github.com/rust-lang/crates.io-index" 2509 + checksum = "62f1975debe62a70557e42b9ff9466e4890cf9d3d156d296408a711f1c5f642b" 2510 + dependencies = [ 2511 + "base64", 2512 + "bytes", 2513 + "derive_more 2.0.1", 2514 + "futures-lite", 2515 + "futures-util", 2516 + "hyper-util", 2517 + "igd-next", 2518 + "iroh-metrics", 2519 + "libc", 2520 + "nested_enum_utils", 2521 + "netwatch", 2522 + "num_enum", 2523 + "rand 0.9.2", 2524 + "serde", 2525 + "smallvec", 2526 + "snafu", 2527 + "socket2 0.6.0", 2528 + "time", 2529 + "tokio", 2530 + "tokio-util", 2531 + "tower-layer", 2532 + "tracing", 2533 + "url", 2534 + ] 2535 + 2536 + [[package]] 2537 + name = "postcard" 2538 + version = "1.1.3" 2539 + source = "registry+https://github.com/rust-lang/crates.io-index" 2540 + checksum = "6764c3b5dd454e283a30e6dfe78e9b31096d9e32036b5d1eaac7a6119ccb9a24" 2541 + dependencies = [ 2542 + "cobs", 2543 + "embedded-io 0.4.0", 2544 + "embedded-io 0.6.1", 2545 + "heapless", 2546 + "postcard-derive", 2547 + "serde", 2548 + ] 2549 + 2550 + [[package]] 2551 + name = "postcard-derive" 2552 + version = "0.2.2" 2553 + source = "registry+https://github.com/rust-lang/crates.io-index" 2554 + checksum = "e0232bd009a197ceec9cc881ba46f727fcd8060a2d8d6a9dde7a69030a6fe2bb" 2555 + dependencies = [ 2556 + "proc-macro2", 2557 + "quote", 2558 + "syn 2.0.104", 2559 + ] 2560 + 2561 + [[package]] 2562 + name = "potential_utf" 2563 + version = "0.1.2" 2564 + source = "registry+https://github.com/rust-lang/crates.io-index" 2565 + checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" 2566 + dependencies = [ 2567 + "zerovec", 2568 + ] 2569 + 2570 + [[package]] 2571 + name = "powerfmt" 2572 + version = "0.2.0" 2573 + source = "registry+https://github.com/rust-lang/crates.io-index" 2574 + checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" 2575 + 2576 + [[package]] 2577 + name = "ppv-lite86" 2578 + version = "0.2.21" 2579 + source = "registry+https://github.com/rust-lang/crates.io-index" 2580 + checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" 2581 + dependencies = [ 2582 + "zerocopy", 2583 + ] 2584 + 2585 + [[package]] 2586 + name = "precis-core" 2587 + version = "0.1.11" 2588 + source = "registry+https://github.com/rust-lang/crates.io-index" 2589 + checksum = "9c2e7b31f132e0c6f8682cfb7bf4a5340dbe925b7986618d0826a56dfe0c8e56" 2590 + dependencies = [ 2591 + "precis-tools", 2592 + "ucd-parse", 2593 + "unicode-normalization", 2594 + ] 2595 + 2596 + [[package]] 2597 + name = "precis-profiles" 2598 + version = "0.1.12" 2599 + source = "registry+https://github.com/rust-lang/crates.io-index" 2600 + checksum = "dc4f67f78f50388f03494794766ba824a704db16fb5d400fe8d545fa7bc0d3f1" 2601 + dependencies = [ 2602 + "lazy_static", 2603 + "precis-core", 2604 + "precis-tools", 2605 + "unicode-normalization", 2606 + ] 2607 + 2608 + [[package]] 2609 + name = "precis-tools" 2610 + version = "0.1.9" 2611 + source = "registry+https://github.com/rust-lang/crates.io-index" 2612 + checksum = "6cc1eb2d5887ac7bfd2c0b745764db89edb84b856e4214e204ef48ef96d10c4a" 2613 + dependencies = [ 2614 + "lazy_static", 2615 + "regex", 2616 + "ucd-parse", 2617 + ] 2618 + 2619 + [[package]] 2620 + name = "proc-macro-crate" 2621 + version = "3.3.0" 2622 + source = "registry+https://github.com/rust-lang/crates.io-index" 2623 + checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" 2624 + dependencies = [ 2625 + "toml_edit", 2626 + ] 2627 + 2628 + [[package]] 2629 + name = "proc-macro2" 2630 + version = "1.0.95" 2631 + source = "registry+https://github.com/rust-lang/crates.io-index" 2632 + checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" 2633 + dependencies = [ 2634 + "unicode-ident", 2635 + ] 2636 + 2637 + [[package]] 2638 + name = "quinn" 2639 + version = "0.11.8" 2640 + source = "registry+https://github.com/rust-lang/crates.io-index" 2641 + checksum = "626214629cda6781b6dc1d316ba307189c85ba657213ce642d9c77670f8202c8" 2642 + dependencies = [ 2643 + "bytes", 2644 + "cfg_aliases", 2645 + "pin-project-lite", 2646 + "quinn-proto", 2647 + "quinn-udp", 2648 + "rustc-hash", 2649 + "rustls", 2650 + "socket2 0.5.10", 2651 + "thiserror 2.0.12", 2652 + "tokio", 2653 + "tracing", 2654 + "web-time", 2655 + ] 2656 + 2657 + [[package]] 2658 + name = "quinn-proto" 2659 + version = "0.11.12" 2660 + source = "registry+https://github.com/rust-lang/crates.io-index" 2661 + checksum = "49df843a9161c85bb8aae55f101bc0bac8bcafd637a620d9122fd7e0b2f7422e" 2662 + dependencies = [ 2663 + "bytes", 2664 + "getrandom 0.3.3", 2665 + "lru-slab", 2666 + "rand 0.9.2", 2667 + "ring", 2668 + "rustc-hash", 2669 + "rustls", 2670 + "rustls-pki-types", 2671 + "slab", 2672 + "thiserror 2.0.12", 2673 + "tinyvec", 2674 + "tracing", 2675 + "web-time", 2676 + ] 2677 + 2678 + [[package]] 2679 + name = "quinn-udp" 2680 + version = "0.5.13" 2681 + source = "registry+https://github.com/rust-lang/crates.io-index" 2682 + checksum = "fcebb1209ee276352ef14ff8732e24cc2b02bbac986cd74a4c81bcb2f9881970" 2683 + dependencies = [ 2684 + "cfg_aliases", 2685 + "libc", 2686 + "once_cell", 2687 + "socket2 0.5.10", 2688 + "tracing", 2689 + "windows-sys 0.59.0", 2690 + ] 2691 + 2692 + [[package]] 2693 + name = "quote" 2694 + version = "1.0.40" 2695 + source = "registry+https://github.com/rust-lang/crates.io-index" 2696 + checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" 2697 + dependencies = [ 2698 + "proc-macro2", 2699 + ] 2700 + 2701 + [[package]] 2702 + name = "quoted-string-parser" 2703 + version = "0.1.0" 2704 + source = "registry+https://github.com/rust-lang/crates.io-index" 2705 + checksum = "0dc75379cdb451d001f1cb667a9f74e8b355e9df84cc5193513cbe62b96fc5e9" 2706 + dependencies = [ 2707 + "pest", 2708 + "pest_derive", 2709 + ] 2710 + 2711 + [[package]] 2712 + name = "r-efi" 2713 + version = "5.3.0" 2714 + source = "registry+https://github.com/rust-lang/crates.io-index" 2715 + checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" 2716 + 2717 + [[package]] 2718 + name = "rand" 2719 + version = "0.8.5" 2720 + source = "registry+https://github.com/rust-lang/crates.io-index" 2721 + checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 2722 + dependencies = [ 2723 + "libc", 2724 + "rand_chacha 0.3.1", 2725 + "rand_core 0.6.4", 2726 + ] 2727 + 2728 + [[package]] 2729 + name = "rand" 2730 + version = "0.9.2" 2731 + source = "registry+https://github.com/rust-lang/crates.io-index" 2732 + checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" 2733 + dependencies = [ 2734 + "rand_chacha 0.9.0", 2735 + "rand_core 0.9.3", 2736 + ] 2737 + 2738 + [[package]] 2739 + name = "rand_chacha" 2740 + version = "0.3.1" 2741 + source = "registry+https://github.com/rust-lang/crates.io-index" 2742 + checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 2743 + dependencies = [ 2744 + "ppv-lite86", 2745 + "rand_core 0.6.4", 2746 + ] 2747 + 2748 + [[package]] 2749 + name = "rand_chacha" 2750 + version = "0.9.0" 2751 + source = "registry+https://github.com/rust-lang/crates.io-index" 2752 + checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" 2753 + dependencies = [ 2754 + "ppv-lite86", 2755 + "rand_core 0.9.3", 2756 + ] 2757 + 2758 + [[package]] 2759 + name = "rand_core" 2760 + version = "0.6.4" 2761 + source = "registry+https://github.com/rust-lang/crates.io-index" 2762 + checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 2763 + dependencies = [ 2764 + "getrandom 0.2.16", 2765 + ] 2766 + 2767 + [[package]] 2768 + name = "rand_core" 2769 + version = "0.9.3" 2770 + source = "registry+https://github.com/rust-lang/crates.io-index" 2771 + checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" 2772 + dependencies = [ 2773 + "getrandom 0.3.3", 2774 + ] 2775 + 2776 + [[package]] 2777 + name = "redox_syscall" 2778 + version = "0.5.17" 2779 + source = "registry+https://github.com/rust-lang/crates.io-index" 2780 + checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" 2781 + dependencies = [ 2782 + "bitflags", 2783 + ] 2784 + 2785 + [[package]] 2786 + name = "regex" 2787 + version = "1.11.1" 2788 + source = "registry+https://github.com/rust-lang/crates.io-index" 2789 + checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" 2790 + dependencies = [ 2791 + "aho-corasick", 2792 + "memchr", 2793 + "regex-automata 0.4.9", 2794 + "regex-syntax 0.8.5", 2795 + ] 2796 + 2797 + [[package]] 2798 + name = "regex-automata" 2799 + version = "0.1.10" 2800 + source = "registry+https://github.com/rust-lang/crates.io-index" 2801 + checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" 2802 + dependencies = [ 2803 + "regex-syntax 0.6.29", 2804 + ] 2805 + 2806 + [[package]] 2807 + name = "regex-automata" 2808 + version = "0.4.9" 2809 + source = "registry+https://github.com/rust-lang/crates.io-index" 2810 + checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" 2811 + dependencies = [ 2812 + "aho-corasick", 2813 + "memchr", 2814 + "regex-syntax 0.8.5", 2815 + ] 2816 + 2817 + [[package]] 2818 + name = "regex-lite" 2819 + version = "0.1.6" 2820 + source = "registry+https://github.com/rust-lang/crates.io-index" 2821 + checksum = "53a49587ad06b26609c52e423de037e7f57f20d53535d66e08c695f347df952a" 2822 + 2823 + [[package]] 2824 + name = "regex-syntax" 2825 + version = "0.6.29" 2826 + source = "registry+https://github.com/rust-lang/crates.io-index" 2827 + checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" 2828 + 2829 + [[package]] 2830 + name = "regex-syntax" 2831 + version = "0.8.5" 2832 + source = "registry+https://github.com/rust-lang/crates.io-index" 2833 + checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" 2834 + 2835 + [[package]] 2836 + name = "reqwest" 2837 + version = "0.12.22" 2838 + source = "registry+https://github.com/rust-lang/crates.io-index" 2839 + checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531" 2840 + dependencies = [ 2841 + "base64", 2842 + "bytes", 2843 + "futures-core", 2844 + "futures-util", 2845 + "http", 2846 + "http-body", 2847 + "http-body-util", 2848 + "hyper", 2849 + "hyper-rustls", 2850 + "hyper-util", 2851 + "js-sys", 2852 + "log", 2853 + "percent-encoding", 2854 + "pin-project-lite", 2855 + "quinn", 2856 + "rustls", 2857 + "rustls-pki-types", 2858 + "serde", 2859 + "serde_json", 2860 + "serde_urlencoded", 2861 + "sync_wrapper", 2862 + "tokio", 2863 + "tokio-rustls", 2864 + "tokio-util", 2865 + "tower", 2866 + "tower-http", 2867 + "tower-service", 2868 + "url", 2869 + "wasm-bindgen", 2870 + "wasm-bindgen-futures", 2871 + "wasm-streams", 2872 + "web-sys", 2873 + "webpki-roots 1.0.2", 2874 + ] 2875 + 2876 + [[package]] 2877 + name = "resolv-conf" 2878 + version = "0.7.4" 2879 + source = "registry+https://github.com/rust-lang/crates.io-index" 2880 + checksum = "95325155c684b1c89f7765e30bc1c42e4a6da51ca513615660cb8a62ef9a88e3" 2881 + 2882 + [[package]] 2883 + name = "ring" 2884 + version = "0.17.14" 2885 + source = "registry+https://github.com/rust-lang/crates.io-index" 2886 + checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" 2887 + dependencies = [ 2888 + "cc", 2889 + "cfg-if", 2890 + "getrandom 0.2.16", 2891 + "libc", 2892 + "untrusted", 2893 + "windows-sys 0.52.0", 2894 + ] 2895 + 2896 + [[package]] 2897 + name = "rustc-demangle" 2898 + version = "0.1.26" 2899 + source = "registry+https://github.com/rust-lang/crates.io-index" 2900 + checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" 2901 + 2902 + [[package]] 2903 + name = "rustc-hash" 2904 + version = "2.1.1" 2905 + source = "registry+https://github.com/rust-lang/crates.io-index" 2906 + checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" 2907 + 2908 + [[package]] 2909 + name = "rustc_version" 2910 + version = "0.4.1" 2911 + source = "registry+https://github.com/rust-lang/crates.io-index" 2912 + checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" 2913 + dependencies = [ 2914 + "semver", 2915 + ] 2916 + 2917 + [[package]] 2918 + name = "rustls" 2919 + version = "0.23.31" 2920 + source = "registry+https://github.com/rust-lang/crates.io-index" 2921 + checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc" 2922 + dependencies = [ 2923 + "log", 2924 + "once_cell", 2925 + "ring", 2926 + "rustls-pki-types", 2927 + "rustls-webpki", 2928 + "subtle", 2929 + "zeroize", 2930 + ] 2931 + 2932 + [[package]] 2933 + name = "rustls-pki-types" 2934 + version = "1.12.0" 2935 + source = "registry+https://github.com/rust-lang/crates.io-index" 2936 + checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" 2937 + dependencies = [ 2938 + "web-time", 2939 + "zeroize", 2940 + ] 2941 + 2942 + [[package]] 2943 + name = "rustls-webpki" 2944 + version = "0.103.4" 2945 + source = "registry+https://github.com/rust-lang/crates.io-index" 2946 + checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" 2947 + dependencies = [ 2948 + "ring", 2949 + "rustls-pki-types", 2950 + "untrusted", 2951 + ] 2952 + 2953 + [[package]] 2954 + name = "rustversion" 2955 + version = "1.0.21" 2956 + source = "registry+https://github.com/rust-lang/crates.io-index" 2957 + checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" 2958 + 2959 + [[package]] 2960 + name = "ryu" 2961 + version = "1.0.20" 2962 + source = "registry+https://github.com/rust-lang/crates.io-index" 2963 + checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" 2964 + 2965 + [[package]] 2966 + name = "salsa20" 2967 + version = "0.10.2" 2968 + source = "registry+https://github.com/rust-lang/crates.io-index" 2969 + checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" 2970 + dependencies = [ 2971 + "cipher", 2972 + ] 2973 + 2974 + [[package]] 2975 + name = "scoped-tls" 2976 + version = "1.0.1" 2977 + source = "registry+https://github.com/rust-lang/crates.io-index" 2978 + checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" 2979 + 2980 + [[package]] 2981 + name = "scopeguard" 2982 + version = "1.2.0" 2983 + source = "registry+https://github.com/rust-lang/crates.io-index" 2984 + checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 2985 + 2986 + [[package]] 2987 + name = "scroll" 2988 + version = "0.12.0" 2989 + source = "registry+https://github.com/rust-lang/crates.io-index" 2990 + checksum = "6ab8598aa408498679922eff7fa985c25d58a90771bd6be794434c5277eab1a6" 2991 + dependencies = [ 2992 + "scroll_derive", 2993 + ] 2994 + 2995 + [[package]] 2996 + name = "scroll_derive" 2997 + version = "0.12.1" 2998 + source = "registry+https://github.com/rust-lang/crates.io-index" 2999 + checksum = "1783eabc414609e28a5ba76aee5ddd52199f7107a0b24c2e9746a1ecc34a683d" 3000 + dependencies = [ 3001 + "proc-macro2", 3002 + "quote", 3003 + "syn 2.0.104", 3004 + ] 3005 + 3006 + [[package]] 3007 + name = "self_cell" 3008 + version = "1.2.0" 3009 + source = "registry+https://github.com/rust-lang/crates.io-index" 3010 + checksum = "0f7d95a54511e0c7be3f51e8867aa8cf35148d7b9445d44de2f943e2b206e749" 3011 + 3012 + [[package]] 3013 + name = "semver" 3014 + version = "1.0.26" 3015 + source = "registry+https://github.com/rust-lang/crates.io-index" 3016 + checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" 3017 + dependencies = [ 3018 + "serde", 3019 + ] 3020 + 3021 + [[package]] 3022 + name = "send_wrapper" 3023 + version = "0.6.0" 3024 + source = "registry+https://github.com/rust-lang/crates.io-index" 3025 + checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" 3026 + 3027 + [[package]] 3028 + name = "serde" 3029 + version = "1.0.219" 3030 + source = "registry+https://github.com/rust-lang/crates.io-index" 3031 + checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" 3032 + dependencies = [ 3033 + "serde_derive", 3034 + ] 3035 + 3036 + [[package]] 3037 + name = "serde_bytes" 3038 + version = "0.11.17" 3039 + source = "registry+https://github.com/rust-lang/crates.io-index" 3040 + checksum = "8437fd221bde2d4ca316d61b90e337e9e702b3820b87d63caa9ba6c02bd06d96" 3041 + dependencies = [ 3042 + "serde", 3043 + ] 3044 + 3045 + [[package]] 3046 + name = "serde_derive" 3047 + version = "1.0.219" 3048 + source = "registry+https://github.com/rust-lang/crates.io-index" 3049 + checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" 3050 + dependencies = [ 3051 + "proc-macro2", 3052 + "quote", 3053 + "syn 2.0.104", 3054 + ] 3055 + 3056 + [[package]] 3057 + name = "serde_json" 3058 + version = "1.0.142" 3059 + source = "registry+https://github.com/rust-lang/crates.io-index" 3060 + checksum = "030fedb782600dcbd6f02d479bf0d817ac3bb40d644745b769d6a96bc3afc5a7" 3061 + dependencies = [ 3062 + "itoa", 3063 + "memchr", 3064 + "ryu", 3065 + "serde", 3066 + ] 3067 + 3068 + [[package]] 3069 + name = "serde_urlencoded" 3070 + version = "0.7.1" 3071 + source = "registry+https://github.com/rust-lang/crates.io-index" 3072 + checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 3073 + dependencies = [ 3074 + "form_urlencoded", 3075 + "itoa", 3076 + "ryu", 3077 + "serde", 3078 + ] 3079 + 3080 + [[package]] 3081 + name = "serdect" 3082 + version = "0.2.0" 3083 + source = "registry+https://github.com/rust-lang/crates.io-index" 3084 + checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" 3085 + dependencies = [ 3086 + "base16ct", 3087 + "serde", 3088 + ] 3089 + 3090 + [[package]] 3091 + name = "sha1" 3092 + version = "0.10.6" 3093 + source = "registry+https://github.com/rust-lang/crates.io-index" 3094 + checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" 3095 + dependencies = [ 3096 + "cfg-if", 3097 + "cpufeatures", 3098 + "digest", 3099 + ] 3100 + 3101 + [[package]] 3102 + name = "sha1_smol" 3103 + version = "1.0.1" 3104 + source = "registry+https://github.com/rust-lang/crates.io-index" 3105 + checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" 3106 + 3107 + [[package]] 3108 + name = "sha2" 3109 + version = "0.10.9" 3110 + source = "registry+https://github.com/rust-lang/crates.io-index" 3111 + checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" 3112 + dependencies = [ 3113 + "cfg-if", 3114 + "cpufeatures", 3115 + "digest", 3116 + ] 3117 + 3118 + [[package]] 3119 + name = "sharded-slab" 3120 + version = "0.1.7" 3121 + source = "registry+https://github.com/rust-lang/crates.io-index" 3122 + checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" 3123 + dependencies = [ 3124 + "lazy_static", 3125 + ] 3126 + 3127 + [[package]] 3128 + name = "shlex" 3129 + version = "1.3.0" 3130 + source = "registry+https://github.com/rust-lang/crates.io-index" 3131 + checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 3132 + 3133 + [[package]] 3134 + name = "signal-hook-registry" 3135 + version = "1.4.6" 3136 + source = "registry+https://github.com/rust-lang/crates.io-index" 3137 + checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" 3138 + dependencies = [ 3139 + "libc", 3140 + ] 3141 + 3142 + [[package]] 3143 + name = "signature" 3144 + version = "2.2.0" 3145 + source = "registry+https://github.com/rust-lang/crates.io-index" 3146 + checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" 3147 + dependencies = [ 3148 + "rand_core 0.6.4", 3149 + ] 3150 + 3151 + [[package]] 3152 + name = "simdutf8" 3153 + version = "0.1.5" 3154 + source = "registry+https://github.com/rust-lang/crates.io-index" 3155 + checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" 3156 + 3157 + [[package]] 3158 + name = "simple-dns" 3159 + version = "0.9.3" 3160 + source = "registry+https://github.com/rust-lang/crates.io-index" 3161 + checksum = "dee851d0e5e7af3721faea1843e8015e820a234f81fda3dea9247e15bac9a86a" 3162 + dependencies = [ 3163 + "bitflags", 3164 + ] 3165 + 3166 + [[package]] 3167 + name = "siphasher" 3168 + version = "0.3.11" 3169 + source = "registry+https://github.com/rust-lang/crates.io-index" 3170 + checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" 3171 + 3172 + [[package]] 3173 + name = "slab" 3174 + version = "0.4.10" 3175 + source = "registry+https://github.com/rust-lang/crates.io-index" 3176 + checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" 3177 + 3178 + [[package]] 3179 + name = "smallvec" 3180 + version = "1.15.1" 3181 + source = "registry+https://github.com/rust-lang/crates.io-index" 3182 + checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" 3183 + 3184 + [[package]] 3185 + name = "smawk" 3186 + version = "0.3.2" 3187 + source = "registry+https://github.com/rust-lang/crates.io-index" 3188 + checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" 3189 + 3190 + [[package]] 3191 + name = "smol_str" 3192 + version = "0.1.24" 3193 + source = "registry+https://github.com/rust-lang/crates.io-index" 3194 + checksum = "fad6c857cbab2627dcf01ec85a623ca4e7dcb5691cbaa3d7fb7653671f0d09c9" 3195 + 3196 + [[package]] 3197 + name = "snafu" 3198 + version = "0.8.6" 3199 + source = "registry+https://github.com/rust-lang/crates.io-index" 3200 + checksum = "320b01e011bf8d5d7a4a4a4be966d9160968935849c83b918827f6a435e7f627" 3201 + dependencies = [ 3202 + "backtrace", 3203 + "snafu-derive", 3204 + ] 3205 + 3206 + [[package]] 3207 + name = "snafu-derive" 3208 + version = "0.8.6" 3209 + source = "registry+https://github.com/rust-lang/crates.io-index" 3210 + checksum = "1961e2ef424c1424204d3a5d6975f934f56b6d50ff5732382d84ebf460e147f7" 3211 + dependencies = [ 3212 + "heck", 3213 + "proc-macro2", 3214 + "quote", 3215 + "syn 2.0.104", 3216 + ] 3217 + 3218 + [[package]] 3219 + name = "socket2" 3220 + version = "0.5.10" 3221 + source = "registry+https://github.com/rust-lang/crates.io-index" 3222 + checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" 3223 + dependencies = [ 3224 + "libc", 3225 + "windows-sys 0.52.0", 3226 + ] 3227 + 3228 + [[package]] 3229 + name = "socket2" 3230 + version = "0.6.0" 3231 + source = "registry+https://github.com/rust-lang/crates.io-index" 3232 + checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" 3233 + dependencies = [ 3234 + "libc", 3235 + "windows-sys 0.59.0", 3236 + ] 3237 + 3238 + [[package]] 3239 + name = "spin" 3240 + version = "0.9.8" 3241 + source = "registry+https://github.com/rust-lang/crates.io-index" 3242 + checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" 3243 + dependencies = [ 3244 + "lock_api", 3245 + ] 3246 + 3247 + [[package]] 3248 + name = "spin" 3249 + version = "0.10.0" 3250 + source = "registry+https://github.com/rust-lang/crates.io-index" 3251 + checksum = "d5fe4ccb98d9c292d56fec89a5e07da7fc4cf0dc11e156b41793132775d3e591" 3252 + 3253 + [[package]] 3254 + name = "spki" 3255 + version = "0.7.3" 3256 + source = "registry+https://github.com/rust-lang/crates.io-index" 3257 + checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" 3258 + dependencies = [ 3259 + "base64ct", 3260 + "der", 3261 + ] 3262 + 3263 + [[package]] 3264 + name = "stable_deref_trait" 3265 + version = "1.2.0" 3266 + source = "registry+https://github.com/rust-lang/crates.io-index" 3267 + checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 3268 + 3269 + [[package]] 3270 + name = "static_assertions" 3271 + version = "1.1.0" 3272 + source = "registry+https://github.com/rust-lang/crates.io-index" 3273 + checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 3274 + 3275 + [[package]] 3276 + name = "strum" 3277 + version = "0.27.2" 3278 + source = "registry+https://github.com/rust-lang/crates.io-index" 3279 + checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" 3280 + dependencies = [ 3281 + "strum_macros", 3282 + ] 3283 + 3284 + [[package]] 3285 + name = "strum_macros" 3286 + version = "0.27.2" 3287 + source = "registry+https://github.com/rust-lang/crates.io-index" 3288 + checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" 3289 + dependencies = [ 3290 + "heck", 3291 + "proc-macro2", 3292 + "quote", 3293 + "syn 2.0.104", 3294 + ] 3295 + 3296 + [[package]] 3297 + name = "stun-rs" 3298 + version = "0.1.11" 3299 + source = "registry+https://github.com/rust-lang/crates.io-index" 3300 + checksum = "fb921f10397d5669e1af6455e9e2d367bf1f9cebcd6b1dd1dc50e19f6a9ac2ac" 3301 + dependencies = [ 3302 + "base64", 3303 + "bounded-integer", 3304 + "byteorder", 3305 + "crc", 3306 + "enumflags2", 3307 + "fallible-iterator", 3308 + "hmac-sha1", 3309 + "hmac-sha256", 3310 + "hostname-validator", 3311 + "lazy_static", 3312 + "md5", 3313 + "paste", 3314 + "precis-core", 3315 + "precis-profiles", 3316 + "quoted-string-parser", 3317 + "rand 0.9.2", 3318 + ] 3319 + 3320 + [[package]] 3321 + name = "subtle" 3322 + version = "2.6.1" 3323 + source = "registry+https://github.com/rust-lang/crates.io-index" 3324 + checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" 3325 + 3326 + [[package]] 3327 + name = "surge-ping" 3328 + version = "0.8.2" 3329 + source = "registry+https://github.com/rust-lang/crates.io-index" 3330 + checksum = "6fda78103d8016bb25c331ddc54af634e801806463682cc3e549d335df644d95" 3331 + dependencies = [ 3332 + "hex", 3333 + "parking_lot", 3334 + "pnet_packet", 3335 + "rand 0.9.2", 3336 + "socket2 0.5.10", 3337 + "thiserror 1.0.69", 3338 + "tokio", 3339 + "tracing", 3340 + ] 3341 + 3342 + [[package]] 3343 + name = "swarm-discovery" 3344 + version = "0.4.0" 3345 + source = "registry+https://github.com/rust-lang/crates.io-index" 3346 + checksum = "4eae338a4551897c6a50fa2c041c4b75f578962d9fca8adb828cf81f7158740f" 3347 + dependencies = [ 3348 + "acto", 3349 + "hickory-proto", 3350 + "rand 0.9.2", 3351 + "socket2 0.5.10", 3352 + "thiserror 2.0.12", 3353 + "tokio", 3354 + "tracing", 3355 + ] 3356 + 3357 + [[package]] 3358 + name = "syn" 3359 + version = "1.0.109" 3360 + source = "registry+https://github.com/rust-lang/crates.io-index" 3361 + checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 3362 + dependencies = [ 3363 + "proc-macro2", 3364 + "quote", 3365 + "unicode-ident", 3366 + ] 3367 + 3368 + [[package]] 3369 + name = "syn" 3370 + version = "2.0.104" 3371 + source = "registry+https://github.com/rust-lang/crates.io-index" 3372 + checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" 3373 + dependencies = [ 3374 + "proc-macro2", 3375 + "quote", 3376 + "unicode-ident", 3377 + ] 3378 + 3379 + [[package]] 3380 + name = "sync_wrapper" 3381 + version = "1.0.2" 3382 + source = "registry+https://github.com/rust-lang/crates.io-index" 3383 + checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" 3384 + dependencies = [ 3385 + "futures-core", 3386 + ] 3387 + 3388 + [[package]] 3389 + name = "synstructure" 3390 + version = "0.13.2" 3391 + source = "registry+https://github.com/rust-lang/crates.io-index" 3392 + checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" 3393 + dependencies = [ 3394 + "proc-macro2", 3395 + "quote", 3396 + "syn 2.0.104", 3397 + ] 3398 + 3399 + [[package]] 3400 + name = "system-configuration" 3401 + version = "0.6.1" 3402 + source = "registry+https://github.com/rust-lang/crates.io-index" 3403 + checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" 3404 + dependencies = [ 3405 + "bitflags", 3406 + "core-foundation", 3407 + "system-configuration-sys", 3408 + ] 3409 + 3410 + [[package]] 3411 + name = "system-configuration-sys" 3412 + version = "0.6.0" 3413 + source = "registry+https://github.com/rust-lang/crates.io-index" 3414 + checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" 3415 + dependencies = [ 3416 + "core-foundation-sys", 3417 + "libc", 3418 + ] 3419 + 3420 + [[package]] 3421 + name = "tagptr" 3422 + version = "0.2.0" 3423 + source = "registry+https://github.com/rust-lang/crates.io-index" 3424 + checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" 3425 + 3426 + [[package]] 3427 + name = "termcolor" 3428 + version = "1.4.1" 3429 + source = "registry+https://github.com/rust-lang/crates.io-index" 3430 + checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" 3431 + dependencies = [ 3432 + "winapi-util", 3433 + ] 3434 + 3435 + [[package]] 3436 + name = "textwrap" 3437 + version = "0.16.2" 3438 + source = "registry+https://github.com/rust-lang/crates.io-index" 3439 + checksum = "c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057" 3440 + dependencies = [ 3441 + "smawk", 3442 + ] 3443 + 3444 + [[package]] 3445 + name = "thiserror" 3446 + version = "1.0.69" 3447 + source = "registry+https://github.com/rust-lang/crates.io-index" 3448 + checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 3449 + dependencies = [ 3450 + "thiserror-impl 1.0.69", 3451 + ] 3452 + 3453 + [[package]] 3454 + name = "thiserror" 3455 + version = "2.0.12" 3456 + source = "registry+https://github.com/rust-lang/crates.io-index" 3457 + checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" 3458 + dependencies = [ 3459 + "thiserror-impl 2.0.12", 3460 + ] 3461 + 3462 + [[package]] 3463 + name = "thiserror-impl" 3464 + version = "1.0.69" 3465 + source = "registry+https://github.com/rust-lang/crates.io-index" 3466 + checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 3467 + dependencies = [ 3468 + "proc-macro2", 3469 + "quote", 3470 + "syn 2.0.104", 3471 + ] 3472 + 3473 + [[package]] 3474 + name = "thiserror-impl" 3475 + version = "2.0.12" 3476 + source = "registry+https://github.com/rust-lang/crates.io-index" 3477 + checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" 3478 + dependencies = [ 3479 + "proc-macro2", 3480 + "quote", 3481 + "syn 2.0.104", 3482 + ] 3483 + 3484 + [[package]] 3485 + name = "thread_local" 3486 + version = "1.1.9" 3487 + source = "registry+https://github.com/rust-lang/crates.io-index" 3488 + checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" 3489 + dependencies = [ 3490 + "cfg-if", 3491 + ] 3492 + 3493 + [[package]] 3494 + name = "time" 3495 + version = "0.3.41" 3496 + source = "registry+https://github.com/rust-lang/crates.io-index" 3497 + checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" 3498 + dependencies = [ 3499 + "deranged", 3500 + "js-sys", 3501 + "num-conv", 3502 + "powerfmt", 3503 + "serde", 3504 + "time-core", 3505 + ] 3506 + 3507 + [[package]] 3508 + name = "time-core" 3509 + version = "0.1.4" 3510 + source = "registry+https://github.com/rust-lang/crates.io-index" 3511 + checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" 3512 + 3513 + [[package]] 3514 + name = "tinystr" 3515 + version = "0.8.1" 3516 + source = "registry+https://github.com/rust-lang/crates.io-index" 3517 + checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" 3518 + dependencies = [ 3519 + "displaydoc", 3520 + "zerovec", 3521 + ] 3522 + 3523 + [[package]] 3524 + name = "tinyvec" 3525 + version = "1.9.0" 3526 + source = "registry+https://github.com/rust-lang/crates.io-index" 3527 + checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" 3528 + dependencies = [ 3529 + "tinyvec_macros", 3530 + ] 3531 + 3532 + [[package]] 3533 + name = "tinyvec_macros" 3534 + version = "0.1.1" 3535 + source = "registry+https://github.com/rust-lang/crates.io-index" 3536 + checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 3537 + 3538 + [[package]] 3539 + name = "tokio" 3540 + version = "1.47.1" 3541 + source = "registry+https://github.com/rust-lang/crates.io-index" 3542 + checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" 3543 + dependencies = [ 3544 + "backtrace", 3545 + "bytes", 3546 + "io-uring", 3547 + "libc", 3548 + "mio", 3549 + "pin-project-lite", 3550 + "signal-hook-registry", 3551 + "slab", 3552 + "socket2 0.6.0", 3553 + "tokio-macros", 3554 + "windows-sys 0.59.0", 3555 + ] 3556 + 3557 + [[package]] 3558 + name = "tokio-macros" 3559 + version = "2.5.0" 3560 + source = "registry+https://github.com/rust-lang/crates.io-index" 3561 + checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" 3562 + dependencies = [ 3563 + "proc-macro2", 3564 + "quote", 3565 + "syn 2.0.104", 3566 + ] 3567 + 3568 + [[package]] 3569 + name = "tokio-rustls" 3570 + version = "0.26.2" 3571 + source = "registry+https://github.com/rust-lang/crates.io-index" 3572 + checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" 3573 + dependencies = [ 3574 + "rustls", 3575 + "tokio", 3576 + ] 3577 + 3578 + [[package]] 3579 + name = "tokio-stream" 3580 + version = "0.1.17" 3581 + source = "registry+https://github.com/rust-lang/crates.io-index" 3582 + checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" 3583 + dependencies = [ 3584 + "futures-core", 3585 + "pin-project-lite", 3586 + "tokio", 3587 + "tokio-util", 3588 + ] 3589 + 3590 + [[package]] 3591 + name = "tokio-util" 3592 + version = "0.7.16" 3593 + source = "registry+https://github.com/rust-lang/crates.io-index" 3594 + checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" 3595 + dependencies = [ 3596 + "bytes", 3597 + "futures-core", 3598 + "futures-sink", 3599 + "futures-util", 3600 + "pin-project-lite", 3601 + "tokio", 3602 + ] 3603 + 3604 + [[package]] 3605 + name = "tokio-websockets" 3606 + version = "0.12.0" 3607 + source = "registry+https://github.com/rust-lang/crates.io-index" 3608 + checksum = "3f29ba084eb43becc9864ba514b4a64f5f65b82f9a6ffbafa5436c1c80605f03" 3609 + dependencies = [ 3610 + "base64", 3611 + "bytes", 3612 + "futures-core", 3613 + "futures-sink", 3614 + "getrandom 0.3.3", 3615 + "http", 3616 + "httparse", 3617 + "rand 0.9.2", 3618 + "ring", 3619 + "rustls-pki-types", 3620 + "simdutf8", 3621 + "tokio", 3622 + "tokio-rustls", 3623 + "tokio-util", 3624 + ] 3625 + 3626 + [[package]] 3627 + name = "toml" 3628 + version = "0.5.11" 3629 + source = "registry+https://github.com/rust-lang/crates.io-index" 3630 + checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" 3631 + dependencies = [ 3632 + "serde", 3633 + ] 3634 + 3635 + [[package]] 3636 + name = "toml_datetime" 3637 + version = "0.6.11" 3638 + source = "registry+https://github.com/rust-lang/crates.io-index" 3639 + checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" 3640 + 3641 + [[package]] 3642 + name = "toml_edit" 3643 + version = "0.22.27" 3644 + source = "registry+https://github.com/rust-lang/crates.io-index" 3645 + checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" 3646 + dependencies = [ 3647 + "indexmap", 3648 + "toml_datetime", 3649 + "winnow", 3650 + ] 3651 + 3652 + [[package]] 3653 + name = "tower" 3654 + version = "0.5.2" 3655 + source = "registry+https://github.com/rust-lang/crates.io-index" 3656 + checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" 3657 + dependencies = [ 3658 + "futures-core", 3659 + "futures-util", 3660 + "pin-project-lite", 3661 + "sync_wrapper", 3662 + "tokio", 3663 + "tower-layer", 3664 + "tower-service", 3665 + ] 3666 + 3667 + [[package]] 3668 + name = "tower-http" 3669 + version = "0.6.6" 3670 + source = "registry+https://github.com/rust-lang/crates.io-index" 3671 + checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" 3672 + dependencies = [ 3673 + "bitflags", 3674 + "bytes", 3675 + "futures-util", 3676 + "http", 3677 + "http-body", 3678 + "iri-string", 3679 + "pin-project-lite", 3680 + "tower", 3681 + "tower-layer", 3682 + "tower-service", 3683 + ] 3684 + 3685 + [[package]] 3686 + name = "tower-layer" 3687 + version = "0.3.3" 3688 + source = "registry+https://github.com/rust-lang/crates.io-index" 3689 + checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" 3690 + 3691 + [[package]] 3692 + name = "tower-service" 3693 + version = "0.3.3" 3694 + source = "registry+https://github.com/rust-lang/crates.io-index" 3695 + checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" 3696 + 3697 + [[package]] 3698 + name = "tracing" 3699 + version = "0.1.41" 3700 + source = "registry+https://github.com/rust-lang/crates.io-index" 3701 + checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" 3702 + dependencies = [ 3703 + "log", 3704 + "pin-project-lite", 3705 + "tracing-attributes", 3706 + "tracing-core", 3707 + ] 3708 + 3709 + [[package]] 3710 + name = "tracing-attributes" 3711 + version = "0.1.30" 3712 + source = "registry+https://github.com/rust-lang/crates.io-index" 3713 + checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" 3714 + dependencies = [ 3715 + "proc-macro2", 3716 + "quote", 3717 + "syn 2.0.104", 3718 + ] 3719 + 3720 + [[package]] 3721 + name = "tracing-core" 3722 + version = "0.1.34" 3723 + source = "registry+https://github.com/rust-lang/crates.io-index" 3724 + checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" 3725 + dependencies = [ 3726 + "once_cell", 3727 + "valuable", 3728 + ] 3729 + 3730 + [[package]] 3731 + name = "tracing-error" 3732 + version = "0.2.1" 3733 + source = "registry+https://github.com/rust-lang/crates.io-index" 3734 + checksum = "8b1581020d7a273442f5b45074a6a57d5757ad0a47dac0e9f0bd57b81936f3db" 3735 + dependencies = [ 3736 + "tracing", 3737 + "tracing-subscriber", 3738 + ] 3739 + 3740 + [[package]] 3741 + name = "tracing-log" 3742 + version = "0.2.0" 3743 + source = "registry+https://github.com/rust-lang/crates.io-index" 3744 + checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" 3745 + dependencies = [ 3746 + "log", 3747 + "once_cell", 3748 + "tracing-core", 3749 + ] 3750 + 3751 + [[package]] 3752 + name = "tracing-subscriber" 3753 + version = "0.3.19" 3754 + source = "registry+https://github.com/rust-lang/crates.io-index" 3755 + checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" 3756 + dependencies = [ 3757 + "matchers", 3758 + "nu-ansi-term", 3759 + "once_cell", 3760 + "regex", 3761 + "sharded-slab", 3762 + "smallvec", 3763 + "thread_local", 3764 + "tracing", 3765 + "tracing-core", 3766 + "tracing-log", 3767 + ] 3768 + 3769 + [[package]] 3770 + name = "try-lock" 3771 + version = "0.2.5" 3772 + source = "registry+https://github.com/rust-lang/crates.io-index" 3773 + checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" 3774 + 3775 + [[package]] 3776 + name = "typenum" 3777 + version = "1.18.0" 3778 + source = "registry+https://github.com/rust-lang/crates.io-index" 3779 + checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" 3780 + 3781 + [[package]] 3782 + name = "ucd-parse" 3783 + version = "0.1.13" 3784 + source = "registry+https://github.com/rust-lang/crates.io-index" 3785 + checksum = "c06ff81122fcbf4df4c1660b15f7e3336058e7aec14437c9f85c6b31a0f279b9" 3786 + dependencies = [ 3787 + "regex-lite", 3788 + ] 3789 + 3790 + [[package]] 3791 + name = "ucd-trie" 3792 + version = "0.1.7" 3793 + source = "registry+https://github.com/rust-lang/crates.io-index" 3794 + checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" 3795 + 3796 + [[package]] 3797 + name = "unicase" 3798 + version = "2.8.1" 3799 + source = "registry+https://github.com/rust-lang/crates.io-index" 3800 + checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" 3801 + 3802 + [[package]] 3803 + name = "unicode-ident" 3804 + version = "1.0.18" 3805 + source = "registry+https://github.com/rust-lang/crates.io-index" 3806 + checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" 3807 + 3808 + [[package]] 3809 + name = "unicode-normalization" 3810 + version = "0.1.24" 3811 + source = "registry+https://github.com/rust-lang/crates.io-index" 3812 + checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" 3813 + dependencies = [ 3814 + "tinyvec", 3815 + ] 3816 + 3817 + [[package]] 3818 + name = "unicode-xid" 3819 + version = "0.2.6" 3820 + source = "registry+https://github.com/rust-lang/crates.io-index" 3821 + checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" 3822 + 3823 + [[package]] 3824 + name = "uniffi" 3825 + version = "0.28.3" 3826 + source = "registry+https://github.com/rust-lang/crates.io-index" 3827 + checksum = "4cb08c58c7ed7033150132febe696bef553f891b1ede57424b40d87a89e3c170" 3828 + dependencies = [ 3829 + "anyhow", 3830 + "cargo_metadata", 3831 + "uniffi_bindgen", 3832 + "uniffi_core", 3833 + "uniffi_macros", 3834 + ] 3835 + 3836 + [[package]] 3837 + name = "uniffi_bindgen" 3838 + version = "0.28.3" 3839 + source = "registry+https://github.com/rust-lang/crates.io-index" 3840 + checksum = "cade167af943e189a55020eda2c314681e223f1e42aca7c4e52614c2b627698f" 3841 + dependencies = [ 3842 + "anyhow", 3843 + "askama", 3844 + "camino", 3845 + "cargo_metadata", 3846 + "fs-err", 3847 + "glob", 3848 + "goblin", 3849 + "heck", 3850 + "once_cell", 3851 + "paste", 3852 + "serde", 3853 + "textwrap", 3854 + "toml", 3855 + "uniffi_meta", 3856 + "uniffi_udl", 3857 + ] 3858 + 3859 + [[package]] 3860 + name = "uniffi_checksum_derive" 3861 + version = "0.28.3" 3862 + source = "registry+https://github.com/rust-lang/crates.io-index" 3863 + checksum = "802d2051a700e3ec894c79f80d2705b69d85844dafbbe5d1a92776f8f48b563a" 3864 + dependencies = [ 3865 + "quote", 3866 + "syn 2.0.104", 3867 + ] 3868 + 3869 + [[package]] 3870 + name = "uniffi_core" 3871 + version = "0.28.3" 3872 + source = "registry+https://github.com/rust-lang/crates.io-index" 3873 + checksum = "bc7687007d2546c454d8ae609b105daceb88175477dac280707ad6d95bcd6f1f" 3874 + dependencies = [ 3875 + "anyhow", 3876 + "async-compat", 3877 + "bytes", 3878 + "log", 3879 + "once_cell", 3880 + "paste", 3881 + "static_assertions", 3882 + ] 3883 + 3884 + [[package]] 3885 + name = "uniffi_macros" 3886 + version = "0.28.3" 3887 + source = "registry+https://github.com/rust-lang/crates.io-index" 3888 + checksum = "12c65a5b12ec544ef136693af8759fb9d11aefce740fb76916721e876639033b" 3889 + dependencies = [ 3890 + "bincode", 3891 + "camino", 3892 + "fs-err", 3893 + "once_cell", 3894 + "proc-macro2", 3895 + "quote", 3896 + "serde", 3897 + "syn 2.0.104", 3898 + "toml", 3899 + "uniffi_meta", 3900 + ] 3901 + 3902 + [[package]] 3903 + name = "uniffi_meta" 3904 + version = "0.28.3" 3905 + source = "registry+https://github.com/rust-lang/crates.io-index" 3906 + checksum = "4a74ed96c26882dac1ca9b93ca23c827e284bacbd7ec23c6f0b0372f747d59e4" 3907 + dependencies = [ 3908 + "anyhow", 3909 + "bytes", 3910 + "siphasher", 3911 + "uniffi_checksum_derive", 3912 + ] 3913 + 3914 + [[package]] 3915 + name = "uniffi_testing" 3916 + version = "0.28.3" 3917 + source = "registry+https://github.com/rust-lang/crates.io-index" 3918 + checksum = "6a6f984f0781f892cc864a62c3a5c60361b1ccbd68e538e6c9fbced5d82268ac" 3919 + dependencies = [ 3920 + "anyhow", 3921 + "camino", 3922 + "cargo_metadata", 3923 + "fs-err", 3924 + "once_cell", 3925 + ] 3926 + 3927 + [[package]] 3928 + name = "uniffi_udl" 3929 + version = "0.28.3" 3930 + source = "registry+https://github.com/rust-lang/crates.io-index" 3931 + checksum = "037820a4cfc4422db1eaa82f291a3863c92c7d1789dc513489c36223f9b4cdfc" 3932 + dependencies = [ 3933 + "anyhow", 3934 + "textwrap", 3935 + "uniffi_meta", 3936 + "uniffi_testing", 3937 + "weedle2", 3938 + ] 3939 + 3940 + [[package]] 3941 + name = "universal-hash" 3942 + version = "0.5.1" 3943 + source = "registry+https://github.com/rust-lang/crates.io-index" 3944 + checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" 3945 + dependencies = [ 3946 + "crypto-common", 3947 + "subtle", 3948 + ] 3949 + 3950 + [[package]] 3951 + name = "untrusted" 3952 + version = "0.9.0" 3953 + source = "registry+https://github.com/rust-lang/crates.io-index" 3954 + checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" 3955 + 3956 + [[package]] 3957 + name = "url" 3958 + version = "2.5.4" 3959 + source = "registry+https://github.com/rust-lang/crates.io-index" 3960 + checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" 3961 + dependencies = [ 3962 + "form_urlencoded", 3963 + "idna", 3964 + "percent-encoding", 3965 + "serde", 3966 + ] 3967 + 3968 + [[package]] 3969 + name = "utf8_iter" 3970 + version = "1.0.4" 3971 + source = "registry+https://github.com/rust-lang/crates.io-index" 3972 + checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 3973 + 3974 + [[package]] 3975 + name = "uuid" 3976 + version = "1.17.0" 3977 + source = "registry+https://github.com/rust-lang/crates.io-index" 3978 + checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" 3979 + dependencies = [ 3980 + "getrandom 0.3.3", 3981 + "js-sys", 3982 + "wasm-bindgen", 3983 + ] 3984 + 3985 + [[package]] 3986 + name = "valuable" 3987 + version = "0.1.1" 3988 + source = "registry+https://github.com/rust-lang/crates.io-index" 3989 + checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" 3990 + 3991 + [[package]] 3992 + name = "version_check" 3993 + version = "0.9.5" 3994 + source = "registry+https://github.com/rust-lang/crates.io-index" 3995 + checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 3996 + 3997 + [[package]] 3998 + name = "want" 3999 + version = "0.3.1" 4000 + source = "registry+https://github.com/rust-lang/crates.io-index" 4001 + checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" 4002 + dependencies = [ 4003 + "try-lock", 4004 + ] 4005 + 4006 + [[package]] 4007 + name = "wasi" 4008 + version = "0.11.1+wasi-snapshot-preview1" 4009 + source = "registry+https://github.com/rust-lang/crates.io-index" 4010 + checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" 4011 + 4012 + [[package]] 4013 + name = "wasi" 4014 + version = "0.14.2+wasi-0.2.4" 4015 + source = "registry+https://github.com/rust-lang/crates.io-index" 4016 + checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" 4017 + dependencies = [ 4018 + "wit-bindgen-rt", 4019 + ] 4020 + 4021 + [[package]] 4022 + name = "wasm-bindgen" 4023 + version = "0.2.100" 4024 + source = "registry+https://github.com/rust-lang/crates.io-index" 4025 + checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" 4026 + dependencies = [ 4027 + "cfg-if", 4028 + "once_cell", 4029 + "rustversion", 4030 + "wasm-bindgen-macro", 4031 + ] 4032 + 4033 + [[package]] 4034 + name = "wasm-bindgen-backend" 4035 + version = "0.2.100" 4036 + source = "registry+https://github.com/rust-lang/crates.io-index" 4037 + checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" 4038 + dependencies = [ 4039 + "bumpalo", 4040 + "log", 4041 + "proc-macro2", 4042 + "quote", 4043 + "syn 2.0.104", 4044 + "wasm-bindgen-shared", 4045 + ] 4046 + 4047 + [[package]] 4048 + name = "wasm-bindgen-futures" 4049 + version = "0.4.50" 4050 + source = "registry+https://github.com/rust-lang/crates.io-index" 4051 + checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" 4052 + dependencies = [ 4053 + "cfg-if", 4054 + "js-sys", 4055 + "once_cell", 4056 + "wasm-bindgen", 4057 + "web-sys", 4058 + ] 4059 + 4060 + [[package]] 4061 + name = "wasm-bindgen-macro" 4062 + version = "0.2.100" 4063 + source = "registry+https://github.com/rust-lang/crates.io-index" 4064 + checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" 4065 + dependencies = [ 4066 + "quote", 4067 + "wasm-bindgen-macro-support", 4068 + ] 4069 + 4070 + [[package]] 4071 + name = "wasm-bindgen-macro-support" 4072 + version = "0.2.100" 4073 + source = "registry+https://github.com/rust-lang/crates.io-index" 4074 + checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" 4075 + dependencies = [ 4076 + "proc-macro2", 4077 + "quote", 4078 + "syn 2.0.104", 4079 + "wasm-bindgen-backend", 4080 + "wasm-bindgen-shared", 4081 + ] 4082 + 4083 + [[package]] 4084 + name = "wasm-bindgen-shared" 4085 + version = "0.2.100" 4086 + source = "registry+https://github.com/rust-lang/crates.io-index" 4087 + checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" 4088 + dependencies = [ 4089 + "unicode-ident", 4090 + ] 4091 + 4092 + [[package]] 4093 + name = "wasm-streams" 4094 + version = "0.4.2" 4095 + source = "registry+https://github.com/rust-lang/crates.io-index" 4096 + checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" 4097 + dependencies = [ 4098 + "futures-util", 4099 + "js-sys", 4100 + "wasm-bindgen", 4101 + "wasm-bindgen-futures", 4102 + "web-sys", 4103 + ] 4104 + 4105 + [[package]] 4106 + name = "web-sys" 4107 + version = "0.3.77" 4108 + source = "registry+https://github.com/rust-lang/crates.io-index" 4109 + checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" 4110 + dependencies = [ 4111 + "js-sys", 4112 + "wasm-bindgen", 4113 + ] 4114 + 4115 + [[package]] 4116 + name = "web-time" 4117 + version = "1.1.0" 4118 + source = "registry+https://github.com/rust-lang/crates.io-index" 4119 + checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" 4120 + dependencies = [ 4121 + "js-sys", 4122 + "wasm-bindgen", 4123 + ] 4124 + 4125 + [[package]] 4126 + name = "webpki-roots" 4127 + version = "0.26.11" 4128 + source = "registry+https://github.com/rust-lang/crates.io-index" 4129 + checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" 4130 + dependencies = [ 4131 + "webpki-roots 1.0.2", 4132 + ] 4133 + 4134 + [[package]] 4135 + name = "webpki-roots" 4136 + version = "1.0.2" 4137 + source = "registry+https://github.com/rust-lang/crates.io-index" 4138 + checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2" 4139 + dependencies = [ 4140 + "rustls-pki-types", 4141 + ] 4142 + 4143 + [[package]] 4144 + name = "weedle2" 4145 + version = "5.0.0" 4146 + source = "registry+https://github.com/rust-lang/crates.io-index" 4147 + checksum = "998d2c24ec099a87daf9467808859f9d82b61f1d9c9701251aea037f514eae0e" 4148 + dependencies = [ 4149 + "nom", 4150 + ] 4151 + 4152 + [[package]] 4153 + name = "widestring" 4154 + version = "1.2.0" 4155 + source = "registry+https://github.com/rust-lang/crates.io-index" 4156 + checksum = "dd7cf3379ca1aac9eea11fba24fd7e315d621f8dfe35c8d7d2be8b793726e07d" 4157 + 4158 + [[package]] 4159 + name = "winapi" 4160 + version = "0.3.9" 4161 + source = "registry+https://github.com/rust-lang/crates.io-index" 4162 + checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 4163 + dependencies = [ 4164 + "winapi-i686-pc-windows-gnu", 4165 + "winapi-x86_64-pc-windows-gnu", 4166 + ] 4167 + 4168 + [[package]] 4169 + name = "winapi-i686-pc-windows-gnu" 4170 + version = "0.4.0" 4171 + source = "registry+https://github.com/rust-lang/crates.io-index" 4172 + checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 4173 + 4174 + [[package]] 4175 + name = "winapi-util" 4176 + version = "0.1.9" 4177 + source = "registry+https://github.com/rust-lang/crates.io-index" 4178 + checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" 4179 + dependencies = [ 4180 + "windows-sys 0.59.0", 4181 + ] 4182 + 4183 + [[package]] 4184 + name = "winapi-x86_64-pc-windows-gnu" 4185 + version = "0.4.0" 4186 + source = "registry+https://github.com/rust-lang/crates.io-index" 4187 + checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 4188 + 4189 + [[package]] 4190 + name = "windows" 4191 + version = "0.61.3" 4192 + source = "registry+https://github.com/rust-lang/crates.io-index" 4193 + checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" 4194 + dependencies = [ 4195 + "windows-collections", 4196 + "windows-core", 4197 + "windows-future", 4198 + "windows-link", 4199 + "windows-numerics", 4200 + ] 4201 + 4202 + [[package]] 4203 + name = "windows-collections" 4204 + version = "0.2.0" 4205 + source = "registry+https://github.com/rust-lang/crates.io-index" 4206 + checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" 4207 + dependencies = [ 4208 + "windows-core", 4209 + ] 4210 + 4211 + [[package]] 4212 + name = "windows-core" 4213 + version = "0.61.2" 4214 + source = "registry+https://github.com/rust-lang/crates.io-index" 4215 + checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" 4216 + dependencies = [ 4217 + "windows-implement", 4218 + "windows-interface", 4219 + "windows-link", 4220 + "windows-result", 4221 + "windows-strings", 4222 + ] 4223 + 4224 + [[package]] 4225 + name = "windows-future" 4226 + version = "0.2.1" 4227 + source = "registry+https://github.com/rust-lang/crates.io-index" 4228 + checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" 4229 + dependencies = [ 4230 + "windows-core", 4231 + "windows-link", 4232 + "windows-threading", 4233 + ] 4234 + 4235 + [[package]] 4236 + name = "windows-implement" 4237 + version = "0.60.0" 4238 + source = "registry+https://github.com/rust-lang/crates.io-index" 4239 + checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" 4240 + dependencies = [ 4241 + "proc-macro2", 4242 + "quote", 4243 + "syn 2.0.104", 4244 + ] 4245 + 4246 + [[package]] 4247 + name = "windows-interface" 4248 + version = "0.59.1" 4249 + source = "registry+https://github.com/rust-lang/crates.io-index" 4250 + checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" 4251 + dependencies = [ 4252 + "proc-macro2", 4253 + "quote", 4254 + "syn 2.0.104", 4255 + ] 4256 + 4257 + [[package]] 4258 + name = "windows-link" 4259 + version = "0.1.3" 4260 + source = "registry+https://github.com/rust-lang/crates.io-index" 4261 + checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" 4262 + 4263 + [[package]] 4264 + name = "windows-numerics" 4265 + version = "0.2.0" 4266 + source = "registry+https://github.com/rust-lang/crates.io-index" 4267 + checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" 4268 + dependencies = [ 4269 + "windows-core", 4270 + "windows-link", 4271 + ] 4272 + 4273 + [[package]] 4274 + name = "windows-result" 4275 + version = "0.3.4" 4276 + source = "registry+https://github.com/rust-lang/crates.io-index" 4277 + checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" 4278 + dependencies = [ 4279 + "windows-link", 4280 + ] 4281 + 4282 + [[package]] 4283 + name = "windows-strings" 4284 + version = "0.4.2" 4285 + source = "registry+https://github.com/rust-lang/crates.io-index" 4286 + checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" 4287 + dependencies = [ 4288 + "windows-link", 4289 + ] 4290 + 4291 + [[package]] 4292 + name = "windows-sys" 4293 + version = "0.48.0" 4294 + source = "registry+https://github.com/rust-lang/crates.io-index" 4295 + checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 4296 + dependencies = [ 4297 + "windows-targets 0.48.5", 4298 + ] 4299 + 4300 + [[package]] 4301 + name = "windows-sys" 4302 + version = "0.52.0" 4303 + source = "registry+https://github.com/rust-lang/crates.io-index" 4304 + checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 4305 + dependencies = [ 4306 + "windows-targets 0.52.6", 4307 + ] 4308 + 4309 + [[package]] 4310 + name = "windows-sys" 4311 + version = "0.59.0" 4312 + source = "registry+https://github.com/rust-lang/crates.io-index" 4313 + checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 4314 + dependencies = [ 4315 + "windows-targets 0.52.6", 4316 + ] 4317 + 4318 + [[package]] 4319 + name = "windows-targets" 4320 + version = "0.48.5" 4321 + source = "registry+https://github.com/rust-lang/crates.io-index" 4322 + checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 4323 + dependencies = [ 4324 + "windows_aarch64_gnullvm 0.48.5", 4325 + "windows_aarch64_msvc 0.48.5", 4326 + "windows_i686_gnu 0.48.5", 4327 + "windows_i686_msvc 0.48.5", 4328 + "windows_x86_64_gnu 0.48.5", 4329 + "windows_x86_64_gnullvm 0.48.5", 4330 + "windows_x86_64_msvc 0.48.5", 4331 + ] 4332 + 4333 + [[package]] 4334 + name = "windows-targets" 4335 + version = "0.52.6" 4336 + source = "registry+https://github.com/rust-lang/crates.io-index" 4337 + checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 4338 + dependencies = [ 4339 + "windows_aarch64_gnullvm 0.52.6", 4340 + "windows_aarch64_msvc 0.52.6", 4341 + "windows_i686_gnu 0.52.6", 4342 + "windows_i686_gnullvm", 4343 + "windows_i686_msvc 0.52.6", 4344 + "windows_x86_64_gnu 0.52.6", 4345 + "windows_x86_64_gnullvm 0.52.6", 4346 + "windows_x86_64_msvc 0.52.6", 4347 + ] 4348 + 4349 + [[package]] 4350 + name = "windows-threading" 4351 + version = "0.1.0" 4352 + source = "registry+https://github.com/rust-lang/crates.io-index" 4353 + checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" 4354 + dependencies = [ 4355 + "windows-link", 4356 + ] 4357 + 4358 + [[package]] 4359 + name = "windows_aarch64_gnullvm" 4360 + version = "0.48.5" 4361 + source = "registry+https://github.com/rust-lang/crates.io-index" 4362 + checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 4363 + 4364 + [[package]] 4365 + name = "windows_aarch64_gnullvm" 4366 + version = "0.52.6" 4367 + source = "registry+https://github.com/rust-lang/crates.io-index" 4368 + checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 4369 + 4370 + [[package]] 4371 + name = "windows_aarch64_msvc" 4372 + version = "0.48.5" 4373 + source = "registry+https://github.com/rust-lang/crates.io-index" 4374 + checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 4375 + 4376 + [[package]] 4377 + name = "windows_aarch64_msvc" 4378 + version = "0.52.6" 4379 + source = "registry+https://github.com/rust-lang/crates.io-index" 4380 + checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 4381 + 4382 + [[package]] 4383 + name = "windows_i686_gnu" 4384 + version = "0.48.5" 4385 + source = "registry+https://github.com/rust-lang/crates.io-index" 4386 + checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 4387 + 4388 + [[package]] 4389 + name = "windows_i686_gnu" 4390 + version = "0.52.6" 4391 + source = "registry+https://github.com/rust-lang/crates.io-index" 4392 + checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 4393 + 4394 + [[package]] 4395 + name = "windows_i686_gnullvm" 4396 + version = "0.52.6" 4397 + source = "registry+https://github.com/rust-lang/crates.io-index" 4398 + checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 4399 + 4400 + [[package]] 4401 + name = "windows_i686_msvc" 4402 + version = "0.48.5" 4403 + source = "registry+https://github.com/rust-lang/crates.io-index" 4404 + checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 4405 + 4406 + [[package]] 4407 + name = "windows_i686_msvc" 4408 + version = "0.52.6" 4409 + source = "registry+https://github.com/rust-lang/crates.io-index" 4410 + checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 4411 + 4412 + [[package]] 4413 + name = "windows_x86_64_gnu" 4414 + version = "0.48.5" 4415 + source = "registry+https://github.com/rust-lang/crates.io-index" 4416 + checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 4417 + 4418 + [[package]] 4419 + name = "windows_x86_64_gnu" 4420 + version = "0.52.6" 4421 + source = "registry+https://github.com/rust-lang/crates.io-index" 4422 + checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 4423 + 4424 + [[package]] 4425 + name = "windows_x86_64_gnullvm" 4426 + version = "0.48.5" 4427 + source = "registry+https://github.com/rust-lang/crates.io-index" 4428 + checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 4429 + 4430 + [[package]] 4431 + name = "windows_x86_64_gnullvm" 4432 + version = "0.52.6" 4433 + source = "registry+https://github.com/rust-lang/crates.io-index" 4434 + checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 4435 + 4436 + [[package]] 4437 + name = "windows_x86_64_msvc" 4438 + version = "0.48.5" 4439 + source = "registry+https://github.com/rust-lang/crates.io-index" 4440 + checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 4441 + 4442 + [[package]] 4443 + name = "windows_x86_64_msvc" 4444 + version = "0.52.6" 4445 + source = "registry+https://github.com/rust-lang/crates.io-index" 4446 + checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 4447 + 4448 + [[package]] 4449 + name = "winnow" 4450 + version = "0.7.12" 4451 + source = "registry+https://github.com/rust-lang/crates.io-index" 4452 + checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95" 4453 + dependencies = [ 4454 + "memchr", 4455 + ] 4456 + 4457 + [[package]] 4458 + name = "winreg" 4459 + version = "0.50.0" 4460 + source = "registry+https://github.com/rust-lang/crates.io-index" 4461 + checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" 4462 + dependencies = [ 4463 + "cfg-if", 4464 + "windows-sys 0.48.0", 4465 + ] 4466 + 4467 + [[package]] 4468 + name = "wit-bindgen-rt" 4469 + version = "0.39.0" 4470 + source = "registry+https://github.com/rust-lang/crates.io-index" 4471 + checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" 4472 + dependencies = [ 4473 + "bitflags", 4474 + ] 4475 + 4476 + [[package]] 4477 + name = "wmi" 4478 + version = "0.17.2" 4479 + source = "registry+https://github.com/rust-lang/crates.io-index" 4480 + checksum = "3d3de777dce4cbcdc661d5d18e78ce4b46a37adc2bb7c0078a556c7f07bcce2f" 4481 + dependencies = [ 4482 + "chrono", 4483 + "futures", 4484 + "log", 4485 + "serde", 4486 + "thiserror 2.0.12", 4487 + "windows", 4488 + "windows-core", 4489 + ] 4490 + 4491 + [[package]] 4492 + name = "writeable" 4493 + version = "0.6.1" 4494 + source = "registry+https://github.com/rust-lang/crates.io-index" 4495 + checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" 4496 + 4497 + [[package]] 4498 + name = "ws_stream_wasm" 4499 + version = "0.7.5" 4500 + source = "registry+https://github.com/rust-lang/crates.io-index" 4501 + checksum = "6c173014acad22e83f16403ee360115b38846fe754e735c5d9d3803fe70c6abc" 4502 + dependencies = [ 4503 + "async_io_stream", 4504 + "futures", 4505 + "js-sys", 4506 + "log", 4507 + "pharos", 4508 + "rustc_version", 4509 + "send_wrapper", 4510 + "thiserror 2.0.12", 4511 + "wasm-bindgen", 4512 + "wasm-bindgen-futures", 4513 + "web-sys", 4514 + ] 4515 + 4516 + [[package]] 4517 + name = "xml-rs" 4518 + version = "0.8.27" 4519 + source = "registry+https://github.com/rust-lang/crates.io-index" 4520 + checksum = "6fd8403733700263c6eb89f192880191f1b83e332f7a20371ddcf421c4a337c7" 4521 + 4522 + [[package]] 4523 + name = "xmltree" 4524 + version = "0.10.3" 4525 + source = "registry+https://github.com/rust-lang/crates.io-index" 4526 + checksum = "d7d8a75eaf6557bb84a65ace8609883db44a29951042ada9b393151532e41fcb" 4527 + dependencies = [ 4528 + "xml-rs", 4529 + ] 4530 + 4531 + [[package]] 4532 + name = "yoke" 4533 + version = "0.8.0" 4534 + source = "registry+https://github.com/rust-lang/crates.io-index" 4535 + checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" 4536 + dependencies = [ 4537 + "serde", 4538 + "stable_deref_trait", 4539 + "yoke-derive", 4540 + "zerofrom", 4541 + ] 4542 + 4543 + [[package]] 4544 + name = "yoke-derive" 4545 + version = "0.8.0" 4546 + source = "registry+https://github.com/rust-lang/crates.io-index" 4547 + checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" 4548 + dependencies = [ 4549 + "proc-macro2", 4550 + "quote", 4551 + "syn 2.0.104", 4552 + "synstructure", 4553 + ] 4554 + 4555 + [[package]] 4556 + name = "z32" 4557 + version = "1.3.0" 4558 + source = "registry+https://github.com/rust-lang/crates.io-index" 4559 + checksum = "2164e798d9e3d84ee2c91139ace54638059a3b23e361f5c11781c2c6459bde0f" 4560 + 4561 + [[package]] 4562 + name = "zerocopy" 4563 + version = "0.8.26" 4564 + source = "registry+https://github.com/rust-lang/crates.io-index" 4565 + checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" 4566 + dependencies = [ 4567 + "zerocopy-derive", 4568 + ] 4569 + 4570 + [[package]] 4571 + name = "zerocopy-derive" 4572 + version = "0.8.26" 4573 + source = "registry+https://github.com/rust-lang/crates.io-index" 4574 + checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" 4575 + dependencies = [ 4576 + "proc-macro2", 4577 + "quote", 4578 + "syn 2.0.104", 4579 + ] 4580 + 4581 + [[package]] 4582 + name = "zerofrom" 4583 + version = "0.1.6" 4584 + source = "registry+https://github.com/rust-lang/crates.io-index" 4585 + checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" 4586 + dependencies = [ 4587 + "zerofrom-derive", 4588 + ] 4589 + 4590 + [[package]] 4591 + name = "zerofrom-derive" 4592 + version = "0.1.6" 4593 + source = "registry+https://github.com/rust-lang/crates.io-index" 4594 + checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" 4595 + dependencies = [ 4596 + "proc-macro2", 4597 + "quote", 4598 + "syn 2.0.104", 4599 + "synstructure", 4600 + ] 4601 + 4602 + [[package]] 4603 + name = "zeroize" 4604 + version = "1.8.1" 4605 + source = "registry+https://github.com/rust-lang/crates.io-index" 4606 + checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" 4607 + 4608 + [[package]] 4609 + name = "zerotrie" 4610 + version = "0.2.2" 4611 + source = "registry+https://github.com/rust-lang/crates.io-index" 4612 + checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" 4613 + dependencies = [ 4614 + "displaydoc", 4615 + "yoke", 4616 + "zerofrom", 4617 + ] 4618 + 4619 + [[package]] 4620 + name = "zerovec" 4621 + version = "0.11.3" 4622 + source = "registry+https://github.com/rust-lang/crates.io-index" 4623 + checksum = "bdbb9122ea75b11bf96e7492afb723e8a7fbe12c67417aa95e7e3d18144d37cd" 4624 + dependencies = [ 4625 + "yoke", 4626 + "zerofrom", 4627 + "zerovec-derive", 4628 + ] 4629 + 4630 + [[package]] 4631 + name = "zerovec-derive" 4632 + version = "0.11.1" 4633 + source = "registry+https://github.com/rust-lang/crates.io-index" 4634 + checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" 4635 + dependencies = [ 4636 + "proc-macro2", 4637 + "quote", 4638 + "syn 2.0.104", 4639 + ]
+25
rust/iroh-streamplace/Cargo.toml
··· 1 + [package] 2 + name = "iroh-streamplace" 3 + version = "0.1.0" 4 + edition = "2024" 5 + 6 + [lib] 7 + name = "iroh_streamplace" 8 + crate-type = ["staticlib", "cdylib"] 9 + 10 + [dependencies] 11 + iroh = { version = "0.91.1", features = ["discovery-local-network"] } 12 + imsg = { git = "https://github.com/n0-computer/imsg", branch = "main" } 13 + tokio = "1.47.1" 14 + 15 + uniffi = { version = "=0.28.3", features = ["tokio"] } 16 + url = "2.5.4" 17 + bytes = "1.10.1" 18 + n0-future = "0.2.0" 19 + async-trait = "0.1.88" 20 + tracing = "0.1.41" 21 + snafu = "0.8.6" 22 + anyhow = "1.0.99" 23 + 24 + [dev-dependencies] 25 + tracing-subscriber = { version = "0.3.19", features = ["env-filter"] }
+17
rust/iroh-streamplace/Makefile
··· 1 + .PHONY: all 2 + all: rust go 3 + 4 + .PHONY: rust 5 + rust: 6 + cargo install uniffi-bindgen-go --git https://github.com/NordSecurity/uniffi-bindgen-go --tag v0.3.0+v0.28.3 7 + cargo build --release 8 + 9 + .PHONY: go 10 + go: 11 + mkdir -p dist 12 + uniffi-bindgen-go --out-dir pkg/iroh_streamplace/generated --library ./target/release/libiroh_streamplace.dylib 13 + 14 + .PHONY: test 15 + test: 16 + cargo test 17 + go test ./pkg/...
+11
rust/iroh-streamplace/README.md
··· 1 + # iroh-streamplace 2 + 3 + 4 + ## Development 5 + 6 + ```sh 7 + # Building 8 + > make 9 + # Testing 10 + > make test 11 + ```
+10
rust/iroh-streamplace/go.mod
··· 1 + module github.com/n0-computer/iroh-streamplace 2 + 3 + go 1.22.2 4 + 5 + require ( 6 + github.com/davecgh/go-spew v1.1.1 // indirect 7 + github.com/pmezard/go-difflib v1.0.0 // indirect 8 + github.com/stretchr/testify v1.10.0 // indirect 9 + gopkg.in/yaml.v3 v3.0.1 // indirect 10 + )
+9
rust/iroh-streamplace/go.sum
··· 1 + github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 2 + github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 3 + github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 4 + github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 5 + github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= 6 + github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= 7 + gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 8 + gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 9 + gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+27
rust/iroh-streamplace/meson.build
··· 1 + project( 2 + 'iroh-streamplace', 3 + default_options: ['default_library=static'], 4 + ) 5 + 6 + prog_cargo = find_program('cargo') 7 + 8 + cargo_cmd = '@0@ build --release --target-dir "@1@"'.format(prog_cargo.full_path(), meson.current_build_dir()) 9 + archive_dir = meson.current_build_dir() 10 + 11 + triple = get_option('RUST_TRIPLE') 12 + if triple != '' 13 + cargo_cmd += ' --target @0@'.format(triple) 14 + archive_dir += '/' + triple 15 + endif 16 + 17 + iroh_streamplace_dep = custom_target( 18 + 'libiroh_streamplace', 19 + input: [], 20 + output: ['libiroh_streamplace.a'], 21 + command: [ 22 + 'sh', 23 + '-c', 24 + 'cd "@2@" && @0@ && cp "@3@/release/libiroh_streamplace.a" "@1@/libiroh_streamplace.a"'.format(cargo_cmd, meson.current_build_dir(), meson.current_source_dir(), archive_dir), 25 + ], 26 + build_by_default: true, 27 + )
+1
rust/iroh-streamplace/meson.options
··· 1 + option('RUST_TRIPLE', type : 'string', description : 'Rust triple for cross-compilation')
+1992
rust/iroh-streamplace/pkg/iroh_streamplace/generated/iroh_streamplace/iroh_streamplace.go
··· 1 + package iroh_streamplace 2 + 3 + // #include <iroh_streamplace.h> 4 + import "C" 5 + 6 + import ( 7 + "bytes" 8 + "encoding/binary" 9 + "fmt" 10 + "io" 11 + "math" 12 + "runtime" 13 + "runtime/cgo" 14 + "sync" 15 + "sync/atomic" 16 + "unsafe" 17 + ) 18 + 19 + // This is needed, because as of go 1.24 20 + // type RustBuffer C.RustBuffer cannot have methods, 21 + // RustBuffer is treated as non-local type 22 + type GoRustBuffer struct { 23 + inner C.RustBuffer 24 + } 25 + 26 + type RustBufferI interface { 27 + AsReader() *bytes.Reader 28 + Free() 29 + ToGoBytes() []byte 30 + Data() unsafe.Pointer 31 + Len() uint64 32 + Capacity() uint64 33 + } 34 + 35 + func RustBufferFromExternal(b RustBufferI) GoRustBuffer { 36 + return GoRustBuffer{ 37 + inner: C.RustBuffer{ 38 + capacity: C.uint64_t(b.Capacity()), 39 + len: C.uint64_t(b.Len()), 40 + data: (*C.uchar)(b.Data()), 41 + }, 42 + } 43 + } 44 + 45 + func (cb GoRustBuffer) Capacity() uint64 { 46 + return uint64(cb.inner.capacity) 47 + } 48 + 49 + func (cb GoRustBuffer) Len() uint64 { 50 + return uint64(cb.inner.len) 51 + } 52 + 53 + func (cb GoRustBuffer) Data() unsafe.Pointer { 54 + return unsafe.Pointer(cb.inner.data) 55 + } 56 + 57 + func (cb GoRustBuffer) AsReader() *bytes.Reader { 58 + b := unsafe.Slice((*byte)(cb.inner.data), C.uint64_t(cb.inner.len)) 59 + return bytes.NewReader(b) 60 + } 61 + 62 + func (cb GoRustBuffer) Free() { 63 + rustCall(func(status *C.RustCallStatus) bool { 64 + C.ffi_iroh_streamplace_rustbuffer_free(cb.inner, status) 65 + return false 66 + }) 67 + } 68 + 69 + func (cb GoRustBuffer) ToGoBytes() []byte { 70 + return C.GoBytes(unsafe.Pointer(cb.inner.data), C.int(cb.inner.len)) 71 + } 72 + 73 + func stringToRustBuffer(str string) C.RustBuffer { 74 + return bytesToRustBuffer([]byte(str)) 75 + } 76 + 77 + func bytesToRustBuffer(b []byte) C.RustBuffer { 78 + if len(b) == 0 { 79 + return C.RustBuffer{} 80 + } 81 + // We can pass the pointer along here, as it is pinned 82 + // for the duration of this call 83 + foreign := C.ForeignBytes{ 84 + len: C.int(len(b)), 85 + data: (*C.uchar)(unsafe.Pointer(&b[0])), 86 + } 87 + 88 + return rustCall(func(status *C.RustCallStatus) C.RustBuffer { 89 + return C.ffi_iroh_streamplace_rustbuffer_from_bytes(foreign, status) 90 + }) 91 + } 92 + 93 + type BufLifter[GoType any] interface { 94 + Lift(value RustBufferI) GoType 95 + } 96 + 97 + type BufLowerer[GoType any] interface { 98 + Lower(value GoType) C.RustBuffer 99 + } 100 + 101 + type BufReader[GoType any] interface { 102 + Read(reader io.Reader) GoType 103 + } 104 + 105 + type BufWriter[GoType any] interface { 106 + Write(writer io.Writer, value GoType) 107 + } 108 + 109 + func LowerIntoRustBuffer[GoType any](bufWriter BufWriter[GoType], value GoType) C.RustBuffer { 110 + // This might be not the most efficient way but it does not require knowing allocation size 111 + // beforehand 112 + var buffer bytes.Buffer 113 + bufWriter.Write(&buffer, value) 114 + 115 + bytes, err := io.ReadAll(&buffer) 116 + if err != nil { 117 + panic(fmt.Errorf("reading written data: %w", err)) 118 + } 119 + return bytesToRustBuffer(bytes) 120 + } 121 + 122 + func LiftFromRustBuffer[GoType any](bufReader BufReader[GoType], rbuf RustBufferI) GoType { 123 + defer rbuf.Free() 124 + reader := rbuf.AsReader() 125 + item := bufReader.Read(reader) 126 + if reader.Len() > 0 { 127 + // TODO: Remove this 128 + leftover, _ := io.ReadAll(reader) 129 + panic(fmt.Errorf("Junk remaining in buffer after lifting: %s", string(leftover))) 130 + } 131 + return item 132 + } 133 + 134 + func rustCallWithError[E any, U any](converter BufReader[*E], callback func(*C.RustCallStatus) U) (U, *E) { 135 + var status C.RustCallStatus 136 + returnValue := callback(&status) 137 + err := checkCallStatus(converter, status) 138 + return returnValue, err 139 + } 140 + 141 + func checkCallStatus[E any](converter BufReader[*E], status C.RustCallStatus) *E { 142 + switch status.code { 143 + case 0: 144 + return nil 145 + case 1: 146 + return LiftFromRustBuffer(converter, GoRustBuffer{inner: status.errorBuf}) 147 + case 2: 148 + // when the rust code sees a panic, it tries to construct a rustBuffer 149 + // with the message. but if that code panics, then it just sends back 150 + // an empty buffer. 151 + if status.errorBuf.len > 0 { 152 + panic(fmt.Errorf("%s", FfiConverterStringINSTANCE.Lift(GoRustBuffer{inner: status.errorBuf}))) 153 + } else { 154 + panic(fmt.Errorf("Rust panicked while handling Rust panic")) 155 + } 156 + default: 157 + panic(fmt.Errorf("unknown status code: %d", status.code)) 158 + } 159 + } 160 + 161 + func checkCallStatusUnknown(status C.RustCallStatus) error { 162 + switch status.code { 163 + case 0: 164 + return nil 165 + case 1: 166 + panic(fmt.Errorf("function not returning an error returned an error")) 167 + case 2: 168 + // when the rust code sees a panic, it tries to construct a C.RustBuffer 169 + // with the message. but if that code panics, then it just sends back 170 + // an empty buffer. 171 + if status.errorBuf.len > 0 { 172 + panic(fmt.Errorf("%s", FfiConverterStringINSTANCE.Lift(GoRustBuffer{ 173 + inner: status.errorBuf, 174 + }))) 175 + } else { 176 + panic(fmt.Errorf("Rust panicked while handling Rust panic")) 177 + } 178 + default: 179 + return fmt.Errorf("unknown status code: %d", status.code) 180 + } 181 + } 182 + 183 + func rustCall[U any](callback func(*C.RustCallStatus) U) U { 184 + returnValue, err := rustCallWithError[error](nil, callback) 185 + if err != nil { 186 + panic(err) 187 + } 188 + return returnValue 189 + } 190 + 191 + type NativeError interface { 192 + AsError() error 193 + } 194 + 195 + func writeInt8(writer io.Writer, value int8) { 196 + if err := binary.Write(writer, binary.BigEndian, value); err != nil { 197 + panic(err) 198 + } 199 + } 200 + 201 + func writeUint8(writer io.Writer, value uint8) { 202 + if err := binary.Write(writer, binary.BigEndian, value); err != nil { 203 + panic(err) 204 + } 205 + } 206 + 207 + func writeInt16(writer io.Writer, value int16) { 208 + if err := binary.Write(writer, binary.BigEndian, value); err != nil { 209 + panic(err) 210 + } 211 + } 212 + 213 + func writeUint16(writer io.Writer, value uint16) { 214 + if err := binary.Write(writer, binary.BigEndian, value); err != nil { 215 + panic(err) 216 + } 217 + } 218 + 219 + func writeInt32(writer io.Writer, value int32) { 220 + if err := binary.Write(writer, binary.BigEndian, value); err != nil { 221 + panic(err) 222 + } 223 + } 224 + 225 + func writeUint32(writer io.Writer, value uint32) { 226 + if err := binary.Write(writer, binary.BigEndian, value); err != nil { 227 + panic(err) 228 + } 229 + } 230 + 231 + func writeInt64(writer io.Writer, value int64) { 232 + if err := binary.Write(writer, binary.BigEndian, value); err != nil { 233 + panic(err) 234 + } 235 + } 236 + 237 + func writeUint64(writer io.Writer, value uint64) { 238 + if err := binary.Write(writer, binary.BigEndian, value); err != nil { 239 + panic(err) 240 + } 241 + } 242 + 243 + func writeFloat32(writer io.Writer, value float32) { 244 + if err := binary.Write(writer, binary.BigEndian, value); err != nil { 245 + panic(err) 246 + } 247 + } 248 + 249 + func writeFloat64(writer io.Writer, value float64) { 250 + if err := binary.Write(writer, binary.BigEndian, value); err != nil { 251 + panic(err) 252 + } 253 + } 254 + 255 + func readInt8(reader io.Reader) int8 { 256 + var result int8 257 + if err := binary.Read(reader, binary.BigEndian, &result); err != nil { 258 + panic(err) 259 + } 260 + return result 261 + } 262 + 263 + func readUint8(reader io.Reader) uint8 { 264 + var result uint8 265 + if err := binary.Read(reader, binary.BigEndian, &result); err != nil { 266 + panic(err) 267 + } 268 + return result 269 + } 270 + 271 + func readInt16(reader io.Reader) int16 { 272 + var result int16 273 + if err := binary.Read(reader, binary.BigEndian, &result); err != nil { 274 + panic(err) 275 + } 276 + return result 277 + } 278 + 279 + func readUint16(reader io.Reader) uint16 { 280 + var result uint16 281 + if err := binary.Read(reader, binary.BigEndian, &result); err != nil { 282 + panic(err) 283 + } 284 + return result 285 + } 286 + 287 + func readInt32(reader io.Reader) int32 { 288 + var result int32 289 + if err := binary.Read(reader, binary.BigEndian, &result); err != nil { 290 + panic(err) 291 + } 292 + return result 293 + } 294 + 295 + func readUint32(reader io.Reader) uint32 { 296 + var result uint32 297 + if err := binary.Read(reader, binary.BigEndian, &result); err != nil { 298 + panic(err) 299 + } 300 + return result 301 + } 302 + 303 + func readInt64(reader io.Reader) int64 { 304 + var result int64 305 + if err := binary.Read(reader, binary.BigEndian, &result); err != nil { 306 + panic(err) 307 + } 308 + return result 309 + } 310 + 311 + func readUint64(reader io.Reader) uint64 { 312 + var result uint64 313 + if err := binary.Read(reader, binary.BigEndian, &result); err != nil { 314 + panic(err) 315 + } 316 + return result 317 + } 318 + 319 + func readFloat32(reader io.Reader) float32 { 320 + var result float32 321 + if err := binary.Read(reader, binary.BigEndian, &result); err != nil { 322 + panic(err) 323 + } 324 + return result 325 + } 326 + 327 + func readFloat64(reader io.Reader) float64 { 328 + var result float64 329 + if err := binary.Read(reader, binary.BigEndian, &result); err != nil { 330 + panic(err) 331 + } 332 + return result 333 + } 334 + 335 + func init() { 336 + 337 + FfiConverterDataHandlerINSTANCE.register() 338 + uniffiCheckChecksums() 339 + } 340 + 341 + func uniffiCheckChecksums() { 342 + // Get the bindings contract version from our ComponentInterface 343 + bindingsContractVersion := 26 344 + // Get the scaffolding contract version by calling the into the dylib 345 + scaffoldingContractVersion := rustCall(func(_uniffiStatus *C.RustCallStatus) C.uint32_t { 346 + return C.ffi_iroh_streamplace_uniffi_contract_version() 347 + }) 348 + if bindingsContractVersion != int(scaffoldingContractVersion) { 349 + // If this happens try cleaning and rebuilding your project 350 + panic("iroh_streamplace: UniFFI contract version mismatch") 351 + } 352 + { 353 + checksum := rustCall(func(_uniffiStatus *C.RustCallStatus) C.uint16_t { 354 + return C.uniffi_iroh_streamplace_checksum_method_datahandler_handle_data() 355 + }) 356 + if checksum != 61779 { 357 + // If this happens try cleaning and rebuilding your project 358 + panic("iroh_streamplace: uniffi_iroh_streamplace_checksum_method_datahandler_handle_data: UniFFI API checksum mismatch") 359 + } 360 + } 361 + { 362 + checksum := rustCall(func(_uniffiStatus *C.RustCallStatus) C.uint16_t { 363 + return C.uniffi_iroh_streamplace_checksum_method_endpoint_node_addr() 364 + }) 365 + if checksum != 17254 { 366 + // If this happens try cleaning and rebuilding your project 367 + panic("iroh_streamplace: uniffi_iroh_streamplace_checksum_method_endpoint_node_addr: UniFFI API checksum mismatch") 368 + } 369 + } 370 + { 371 + checksum := rustCall(func(_uniffiStatus *C.RustCallStatus) C.uint16_t { 372 + return C.uniffi_iroh_streamplace_checksum_method_nodeaddr_direct_addresses() 373 + }) 374 + if checksum != 17536 { 375 + // If this happens try cleaning and rebuilding your project 376 + panic("iroh_streamplace: uniffi_iroh_streamplace_checksum_method_nodeaddr_direct_addresses: UniFFI API checksum mismatch") 377 + } 378 + } 379 + { 380 + checksum := rustCall(func(_uniffiStatus *C.RustCallStatus) C.uint16_t { 381 + return C.uniffi_iroh_streamplace_checksum_method_nodeaddr_equal() 382 + }) 383 + if checksum != 15520 { 384 + // If this happens try cleaning and rebuilding your project 385 + panic("iroh_streamplace: uniffi_iroh_streamplace_checksum_method_nodeaddr_equal: UniFFI API checksum mismatch") 386 + } 387 + } 388 + { 389 + checksum := rustCall(func(_uniffiStatus *C.RustCallStatus) C.uint16_t { 390 + return C.uniffi_iroh_streamplace_checksum_method_nodeaddr_node_id() 391 + }) 392 + if checksum != 35476 { 393 + // If this happens try cleaning and rebuilding your project 394 + panic("iroh_streamplace: uniffi_iroh_streamplace_checksum_method_nodeaddr_node_id: UniFFI API checksum mismatch") 395 + } 396 + } 397 + { 398 + checksum := rustCall(func(_uniffiStatus *C.RustCallStatus) C.uint16_t { 399 + return C.uniffi_iroh_streamplace_checksum_method_nodeaddr_relay_url() 400 + }) 401 + if checksum != 18967 { 402 + // If this happens try cleaning and rebuilding your project 403 + panic("iroh_streamplace: uniffi_iroh_streamplace_checksum_method_nodeaddr_relay_url: UniFFI API checksum mismatch") 404 + } 405 + } 406 + { 407 + checksum := rustCall(func(_uniffiStatus *C.RustCallStatus) C.uint16_t { 408 + return C.uniffi_iroh_streamplace_checksum_method_publickey_equal() 409 + }) 410 + if checksum != 25030 { 411 + // If this happens try cleaning and rebuilding your project 412 + panic("iroh_streamplace: uniffi_iroh_streamplace_checksum_method_publickey_equal: UniFFI API checksum mismatch") 413 + } 414 + } 415 + { 416 + checksum := rustCall(func(_uniffiStatus *C.RustCallStatus) C.uint16_t { 417 + return C.uniffi_iroh_streamplace_checksum_method_publickey_fmt_short() 418 + }) 419 + if checksum != 57639 { 420 + // If this happens try cleaning and rebuilding your project 421 + panic("iroh_streamplace: uniffi_iroh_streamplace_checksum_method_publickey_fmt_short: UniFFI API checksum mismatch") 422 + } 423 + } 424 + { 425 + checksum := rustCall(func(_uniffiStatus *C.RustCallStatus) C.uint16_t { 426 + return C.uniffi_iroh_streamplace_checksum_method_publickey_to_bytes() 427 + }) 428 + if checksum != 8223 { 429 + // If this happens try cleaning and rebuilding your project 430 + panic("iroh_streamplace: uniffi_iroh_streamplace_checksum_method_publickey_to_bytes: UniFFI API checksum mismatch") 431 + } 432 + } 433 + { 434 + checksum := rustCall(func(_uniffiStatus *C.RustCallStatus) C.uint16_t { 435 + return C.uniffi_iroh_streamplace_checksum_method_receiver_node_addr() 436 + }) 437 + if checksum != 10730 { 438 + // If this happens try cleaning and rebuilding your project 439 + panic("iroh_streamplace: uniffi_iroh_streamplace_checksum_method_receiver_node_addr: UniFFI API checksum mismatch") 440 + } 441 + } 442 + { 443 + checksum := rustCall(func(_uniffiStatus *C.RustCallStatus) C.uint16_t { 444 + return C.uniffi_iroh_streamplace_checksum_method_sender_add_peer() 445 + }) 446 + if checksum != 34321 { 447 + // If this happens try cleaning and rebuilding your project 448 + panic("iroh_streamplace: uniffi_iroh_streamplace_checksum_method_sender_add_peer: UniFFI API checksum mismatch") 449 + } 450 + } 451 + { 452 + checksum := rustCall(func(_uniffiStatus *C.RustCallStatus) C.uint16_t { 453 + return C.uniffi_iroh_streamplace_checksum_method_sender_node_addr() 454 + }) 455 + if checksum != 38541 { 456 + // If this happens try cleaning and rebuilding your project 457 + panic("iroh_streamplace: uniffi_iroh_streamplace_checksum_method_sender_node_addr: UniFFI API checksum mismatch") 458 + } 459 + } 460 + { 461 + checksum := rustCall(func(_uniffiStatus *C.RustCallStatus) C.uint16_t { 462 + return C.uniffi_iroh_streamplace_checksum_method_sender_send() 463 + }) 464 + if checksum != 24369 { 465 + // If this happens try cleaning and rebuilding your project 466 + panic("iroh_streamplace: uniffi_iroh_streamplace_checksum_method_sender_send: UniFFI API checksum mismatch") 467 + } 468 + } 469 + { 470 + checksum := rustCall(func(_uniffiStatus *C.RustCallStatus) C.uint16_t { 471 + return C.uniffi_iroh_streamplace_checksum_constructor_endpoint_new() 472 + }) 473 + if checksum != 60672 { 474 + // If this happens try cleaning and rebuilding your project 475 + panic("iroh_streamplace: uniffi_iroh_streamplace_checksum_constructor_endpoint_new: UniFFI API checksum mismatch") 476 + } 477 + } 478 + { 479 + checksum := rustCall(func(_uniffiStatus *C.RustCallStatus) C.uint16_t { 480 + return C.uniffi_iroh_streamplace_checksum_constructor_nodeaddr_new() 481 + }) 482 + if checksum != 28044 { 483 + // If this happens try cleaning and rebuilding your project 484 + panic("iroh_streamplace: uniffi_iroh_streamplace_checksum_constructor_nodeaddr_new: UniFFI API checksum mismatch") 485 + } 486 + } 487 + { 488 + checksum := rustCall(func(_uniffiStatus *C.RustCallStatus) C.uint16_t { 489 + return C.uniffi_iroh_streamplace_checksum_constructor_publickey_from_bytes() 490 + }) 491 + if checksum != 54187 { 492 + // If this happens try cleaning and rebuilding your project 493 + panic("iroh_streamplace: uniffi_iroh_streamplace_checksum_constructor_publickey_from_bytes: UniFFI API checksum mismatch") 494 + } 495 + } 496 + { 497 + checksum := rustCall(func(_uniffiStatus *C.RustCallStatus) C.uint16_t { 498 + return C.uniffi_iroh_streamplace_checksum_constructor_publickey_from_string() 499 + }) 500 + if checksum != 62773 { 501 + // If this happens try cleaning and rebuilding your project 502 + panic("iroh_streamplace: uniffi_iroh_streamplace_checksum_constructor_publickey_from_string: UniFFI API checksum mismatch") 503 + } 504 + } 505 + { 506 + checksum := rustCall(func(_uniffiStatus *C.RustCallStatus) C.uint16_t { 507 + return C.uniffi_iroh_streamplace_checksum_constructor_receiver_new() 508 + }) 509 + if checksum != 35153 { 510 + // If this happens try cleaning and rebuilding your project 511 + panic("iroh_streamplace: uniffi_iroh_streamplace_checksum_constructor_receiver_new: UniFFI API checksum mismatch") 512 + } 513 + } 514 + { 515 + checksum := rustCall(func(_uniffiStatus *C.RustCallStatus) C.uint16_t { 516 + return C.uniffi_iroh_streamplace_checksum_constructor_sender_new() 517 + }) 518 + if checksum != 27594 { 519 + // If this happens try cleaning and rebuilding your project 520 + panic("iroh_streamplace: uniffi_iroh_streamplace_checksum_constructor_sender_new: UniFFI API checksum mismatch") 521 + } 522 + } 523 + } 524 + 525 + type FfiConverterBool struct{} 526 + 527 + var FfiConverterBoolINSTANCE = FfiConverterBool{} 528 + 529 + func (FfiConverterBool) Lower(value bool) C.int8_t { 530 + if value { 531 + return C.int8_t(1) 532 + } 533 + return C.int8_t(0) 534 + } 535 + 536 + func (FfiConverterBool) Write(writer io.Writer, value bool) { 537 + if value { 538 + writeInt8(writer, 1) 539 + } else { 540 + writeInt8(writer, 0) 541 + } 542 + } 543 + 544 + func (FfiConverterBool) Lift(value C.int8_t) bool { 545 + return value != 0 546 + } 547 + 548 + func (FfiConverterBool) Read(reader io.Reader) bool { 549 + return readInt8(reader) != 0 550 + } 551 + 552 + type FfiDestroyerBool struct{} 553 + 554 + func (FfiDestroyerBool) Destroy(_ bool) {} 555 + 556 + type FfiConverterString struct{} 557 + 558 + var FfiConverterStringINSTANCE = FfiConverterString{} 559 + 560 + func (FfiConverterString) Lift(rb RustBufferI) string { 561 + defer rb.Free() 562 + reader := rb.AsReader() 563 + b, err := io.ReadAll(reader) 564 + if err != nil { 565 + panic(fmt.Errorf("reading reader: %w", err)) 566 + } 567 + return string(b) 568 + } 569 + 570 + func (FfiConverterString) Read(reader io.Reader) string { 571 + length := readInt32(reader) 572 + buffer := make([]byte, length) 573 + read_length, err := reader.Read(buffer) 574 + if err != nil { 575 + panic(err) 576 + } 577 + if read_length != int(length) { 578 + panic(fmt.Errorf("bad read length when reading string, expected %d, read %d", length, read_length)) 579 + } 580 + return string(buffer) 581 + } 582 + 583 + func (FfiConverterString) Lower(value string) C.RustBuffer { 584 + return stringToRustBuffer(value) 585 + } 586 + 587 + func (FfiConverterString) Write(writer io.Writer, value string) { 588 + if len(value) > math.MaxInt32 { 589 + panic("String is too large to fit into Int32") 590 + } 591 + 592 + writeInt32(writer, int32(len(value))) 593 + write_length, err := io.WriteString(writer, value) 594 + if err != nil { 595 + panic(err) 596 + } 597 + if write_length != len(value) { 598 + panic(fmt.Errorf("bad write length when writing string, expected %d, written %d", len(value), write_length)) 599 + } 600 + } 601 + 602 + type FfiDestroyerString struct{} 603 + 604 + func (FfiDestroyerString) Destroy(_ string) {} 605 + 606 + type FfiConverterBytes struct{} 607 + 608 + var FfiConverterBytesINSTANCE = FfiConverterBytes{} 609 + 610 + func (c FfiConverterBytes) Lower(value []byte) C.RustBuffer { 611 + return LowerIntoRustBuffer[[]byte](c, value) 612 + } 613 + 614 + func (c FfiConverterBytes) Write(writer io.Writer, value []byte) { 615 + if len(value) > math.MaxInt32 { 616 + panic("[]byte is too large to fit into Int32") 617 + } 618 + 619 + writeInt32(writer, int32(len(value))) 620 + write_length, err := writer.Write(value) 621 + if err != nil { 622 + panic(err) 623 + } 624 + if write_length != len(value) { 625 + panic(fmt.Errorf("bad write length when writing []byte, expected %d, written %d", len(value), write_length)) 626 + } 627 + } 628 + 629 + func (c FfiConverterBytes) Lift(rb RustBufferI) []byte { 630 + return LiftFromRustBuffer[[]byte](c, rb) 631 + } 632 + 633 + func (c FfiConverterBytes) Read(reader io.Reader) []byte { 634 + length := readInt32(reader) 635 + buffer := make([]byte, length) 636 + read_length, err := reader.Read(buffer) 637 + if err != nil { 638 + panic(err) 639 + } 640 + if read_length != int(length) { 641 + panic(fmt.Errorf("bad read length when reading []byte, expected %d, read %d", length, read_length)) 642 + } 643 + return buffer 644 + } 645 + 646 + type FfiDestroyerBytes struct{} 647 + 648 + func (FfiDestroyerBytes) Destroy(_ []byte) {} 649 + 650 + // Below is an implementation of synchronization requirements outlined in the link. 651 + // https://github.com/mozilla/uniffi-rs/blob/0dc031132d9493ca812c3af6e7dd60ad2ea95bf0/uniffi_bindgen/src/bindings/kotlin/templates/ObjectRuntime.kt#L31 652 + 653 + type FfiObject struct { 654 + pointer unsafe.Pointer 655 + callCounter atomic.Int64 656 + cloneFunction func(unsafe.Pointer, *C.RustCallStatus) unsafe.Pointer 657 + freeFunction func(unsafe.Pointer, *C.RustCallStatus) 658 + destroyed atomic.Bool 659 + } 660 + 661 + func newFfiObject( 662 + pointer unsafe.Pointer, 663 + cloneFunction func(unsafe.Pointer, *C.RustCallStatus) unsafe.Pointer, 664 + freeFunction func(unsafe.Pointer, *C.RustCallStatus), 665 + ) FfiObject { 666 + return FfiObject{ 667 + pointer: pointer, 668 + cloneFunction: cloneFunction, 669 + freeFunction: freeFunction, 670 + } 671 + } 672 + 673 + func (ffiObject *FfiObject) incrementPointer(debugName string) unsafe.Pointer { 674 + for { 675 + counter := ffiObject.callCounter.Load() 676 + if counter <= -1 { 677 + panic(fmt.Errorf("%v object has already been destroyed", debugName)) 678 + } 679 + if counter == math.MaxInt64 { 680 + panic(fmt.Errorf("%v object call counter would overflow", debugName)) 681 + } 682 + if ffiObject.callCounter.CompareAndSwap(counter, counter+1) { 683 + break 684 + } 685 + } 686 + 687 + return rustCall(func(status *C.RustCallStatus) unsafe.Pointer { 688 + return ffiObject.cloneFunction(ffiObject.pointer, status) 689 + }) 690 + } 691 + 692 + func (ffiObject *FfiObject) decrementPointer() { 693 + if ffiObject.callCounter.Add(-1) == -1 { 694 + ffiObject.freeRustArcPtr() 695 + } 696 + } 697 + 698 + func (ffiObject *FfiObject) destroy() { 699 + if ffiObject.destroyed.CompareAndSwap(false, true) { 700 + if ffiObject.callCounter.Add(-1) == -1 { 701 + ffiObject.freeRustArcPtr() 702 + } 703 + } 704 + } 705 + 706 + func (ffiObject *FfiObject) freeRustArcPtr() { 707 + rustCall(func(status *C.RustCallStatus) int32 { 708 + ffiObject.freeFunction(ffiObject.pointer, status) 709 + return 0 710 + }) 711 + } 712 + 713 + type DataHandler interface { 714 + HandleData(peer *PublicKey, data []byte) 715 + } 716 + type DataHandlerImpl struct { 717 + ffiObject FfiObject 718 + } 719 + 720 + func (_self *DataHandlerImpl) HandleData(peer *PublicKey, data []byte) { 721 + _pointer := _self.ffiObject.incrementPointer("DataHandler") 722 + defer _self.ffiObject.decrementPointer() 723 + uniffiRustCallAsync[struct{}]( 724 + nil, 725 + // completeFn 726 + func(handle C.uint64_t, status *C.RustCallStatus) struct{} { 727 + C.ffi_iroh_streamplace_rust_future_complete_void(handle, status) 728 + return struct{}{} 729 + }, 730 + // liftFn 731 + func(_ struct{}) struct{} { return struct{}{} }, 732 + C.uniffi_iroh_streamplace_fn_method_datahandler_handle_data( 733 + _pointer, FfiConverterPublicKeyINSTANCE.Lower(peer), FfiConverterBytesINSTANCE.Lower(data)), 734 + // pollFn 735 + func(handle C.uint64_t, continuation C.UniffiRustFutureContinuationCallback, data C.uint64_t) { 736 + C.ffi_iroh_streamplace_rust_future_poll_void(handle, continuation, data) 737 + }, 738 + // freeFn 739 + func(handle C.uint64_t) { 740 + C.ffi_iroh_streamplace_rust_future_free_void(handle) 741 + }, 742 + ) 743 + 744 + } 745 + func (object *DataHandlerImpl) Destroy() { 746 + runtime.SetFinalizer(object, nil) 747 + object.ffiObject.destroy() 748 + } 749 + 750 + type FfiConverterDataHandler struct { 751 + handleMap *concurrentHandleMap[DataHandler] 752 + } 753 + 754 + var FfiConverterDataHandlerINSTANCE = FfiConverterDataHandler{ 755 + handleMap: newConcurrentHandleMap[DataHandler](), 756 + } 757 + 758 + func (c FfiConverterDataHandler) Lift(pointer unsafe.Pointer) DataHandler { 759 + result := &DataHandlerImpl{ 760 + newFfiObject( 761 + pointer, 762 + func(pointer unsafe.Pointer, status *C.RustCallStatus) unsafe.Pointer { 763 + return C.uniffi_iroh_streamplace_fn_clone_datahandler(pointer, status) 764 + }, 765 + func(pointer unsafe.Pointer, status *C.RustCallStatus) { 766 + C.uniffi_iroh_streamplace_fn_free_datahandler(pointer, status) 767 + }, 768 + ), 769 + } 770 + runtime.SetFinalizer(result, (*DataHandlerImpl).Destroy) 771 + return result 772 + } 773 + 774 + func (c FfiConverterDataHandler) Read(reader io.Reader) DataHandler { 775 + return c.Lift(unsafe.Pointer(uintptr(readUint64(reader)))) 776 + } 777 + 778 + func (c FfiConverterDataHandler) Lower(value DataHandler) unsafe.Pointer { 779 + // TODO: this is bad - all synchronization from ObjectRuntime.go is discarded here, 780 + // because the pointer will be decremented immediately after this function returns, 781 + // and someone will be left holding onto a non-locked pointer. 782 + pointer := unsafe.Pointer(uintptr(c.handleMap.insert(value))) 783 + return pointer 784 + 785 + } 786 + 787 + func (c FfiConverterDataHandler) Write(writer io.Writer, value DataHandler) { 788 + writeUint64(writer, uint64(uintptr(c.Lower(value)))) 789 + } 790 + 791 + type FfiDestroyerDataHandler struct{} 792 + 793 + func (_ FfiDestroyerDataHandler) Destroy(value DataHandler) { 794 + if val, ok := value.(*DataHandlerImpl); ok { 795 + val.Destroy() 796 + } else { 797 + panic("Expected *DataHandlerImpl") 798 + } 799 + } 800 + 801 + type uniffiCallbackResult C.int8_t 802 + 803 + const ( 804 + uniffiIdxCallbackFree uniffiCallbackResult = 0 805 + uniffiCallbackResultSuccess uniffiCallbackResult = 0 806 + uniffiCallbackResultError uniffiCallbackResult = 1 807 + uniffiCallbackUnexpectedResultError uniffiCallbackResult = 2 808 + uniffiCallbackCancelled uniffiCallbackResult = 3 809 + ) 810 + 811 + type concurrentHandleMap[T any] struct { 812 + handles map[uint64]T 813 + currentHandle uint64 814 + lock sync.RWMutex 815 + } 816 + 817 + func newConcurrentHandleMap[T any]() *concurrentHandleMap[T] { 818 + return &concurrentHandleMap[T]{ 819 + handles: map[uint64]T{}, 820 + } 821 + } 822 + 823 + func (cm *concurrentHandleMap[T]) insert(obj T) uint64 { 824 + cm.lock.Lock() 825 + defer cm.lock.Unlock() 826 + 827 + cm.currentHandle = cm.currentHandle + 1 828 + cm.handles[cm.currentHandle] = obj 829 + return cm.currentHandle 830 + } 831 + 832 + func (cm *concurrentHandleMap[T]) remove(handle uint64) { 833 + cm.lock.Lock() 834 + defer cm.lock.Unlock() 835 + 836 + delete(cm.handles, handle) 837 + } 838 + 839 + func (cm *concurrentHandleMap[T]) tryGet(handle uint64) (T, bool) { 840 + cm.lock.RLock() 841 + defer cm.lock.RUnlock() 842 + 843 + val, ok := cm.handles[handle] 844 + return val, ok 845 + } 846 + 847 + //export iroh_streamplace_cgo_dispatchCallbackInterfaceDataHandlerMethod0 848 + func iroh_streamplace_cgo_dispatchCallbackInterfaceDataHandlerMethod0(uniffiHandle C.uint64_t, peer unsafe.Pointer, data C.RustBuffer, uniffiFutureCallback C.UniffiForeignFutureCompleteVoid, uniffiCallbackData C.uint64_t, uniffiOutReturn *C.UniffiForeignFuture) { 849 + handle := uint64(uniffiHandle) 850 + uniffiObj, ok := FfiConverterDataHandlerINSTANCE.handleMap.tryGet(handle) 851 + if !ok { 852 + panic(fmt.Errorf("no callback in handle map: %d", handle)) 853 + } 854 + 855 + result := make(chan C.UniffiForeignFutureStructVoid, 1) 856 + cancel := make(chan struct{}, 1) 857 + guardHandle := cgo.NewHandle(cancel) 858 + *uniffiOutReturn = C.UniffiForeignFuture{ 859 + handle: C.uint64_t(guardHandle), 860 + free: C.UniffiForeignFutureFree(C.iroh_streamplace_uniffiFreeGorutine), 861 + } 862 + 863 + // Wait for compleation or cancel 864 + go func() { 865 + select { 866 + case <-cancel: 867 + case res := <-result: 868 + C.call_UniffiForeignFutureCompleteVoid(uniffiFutureCallback, uniffiCallbackData, res) 869 + } 870 + }() 871 + 872 + // Eval callback asynchroniously 873 + go func() { 874 + asyncResult := &C.UniffiForeignFutureStructVoid{} 875 + defer func() { 876 + result <- *asyncResult 877 + }() 878 + 879 + uniffiObj.HandleData( 880 + FfiConverterPublicKeyINSTANCE.Lift(peer), 881 + FfiConverterBytesINSTANCE.Lift(GoRustBuffer{ 882 + inner: data, 883 + }), 884 + ) 885 + 886 + }() 887 + } 888 + 889 + var UniffiVTableCallbackInterfaceDataHandlerINSTANCE = C.UniffiVTableCallbackInterfaceDataHandler{ 890 + handleData: (C.UniffiCallbackInterfaceDataHandlerMethod0)(C.iroh_streamplace_cgo_dispatchCallbackInterfaceDataHandlerMethod0), 891 + 892 + uniffiFree: (C.UniffiCallbackInterfaceFree)(C.iroh_streamplace_cgo_dispatchCallbackInterfaceDataHandlerFree), 893 + } 894 + 895 + //export iroh_streamplace_cgo_dispatchCallbackInterfaceDataHandlerFree 896 + func iroh_streamplace_cgo_dispatchCallbackInterfaceDataHandlerFree(handle C.uint64_t) { 897 + FfiConverterDataHandlerINSTANCE.handleMap.remove(uint64(handle)) 898 + } 899 + 900 + func (c FfiConverterDataHandler) register() { 901 + C.uniffi_iroh_streamplace_fn_init_callback_vtable_datahandler(&UniffiVTableCallbackInterfaceDataHandlerINSTANCE) 902 + } 903 + 904 + type EndpointInterface interface { 905 + NodeAddr() *NodeAddr 906 + } 907 + type Endpoint struct { 908 + ffiObject FfiObject 909 + } 910 + 911 + // Create a new endpoint. 912 + func NewEndpoint() (*Endpoint, *Error) { 913 + res, err := uniffiRustCallAsync[Error]( 914 + FfiConverterErrorINSTANCE, 915 + // completeFn 916 + func(handle C.uint64_t, status *C.RustCallStatus) unsafe.Pointer { 917 + res := C.ffi_iroh_streamplace_rust_future_complete_pointer(handle, status) 918 + return res 919 + }, 920 + // liftFn 921 + func(ffi unsafe.Pointer) *Endpoint { 922 + return FfiConverterEndpointINSTANCE.Lift(ffi) 923 + }, 924 + C.uniffi_iroh_streamplace_fn_constructor_endpoint_new(), 925 + // pollFn 926 + func(handle C.uint64_t, continuation C.UniffiRustFutureContinuationCallback, data C.uint64_t) { 927 + C.ffi_iroh_streamplace_rust_future_poll_pointer(handle, continuation, data) 928 + }, 929 + // freeFn 930 + func(handle C.uint64_t) { 931 + C.ffi_iroh_streamplace_rust_future_free_pointer(handle) 932 + }, 933 + ) 934 + 935 + return res, err 936 + } 937 + 938 + func (_self *Endpoint) NodeAddr() *NodeAddr { 939 + _pointer := _self.ffiObject.incrementPointer("*Endpoint") 940 + defer _self.ffiObject.decrementPointer() 941 + res, _ := uniffiRustCallAsync[struct{}]( 942 + nil, 943 + // completeFn 944 + func(handle C.uint64_t, status *C.RustCallStatus) unsafe.Pointer { 945 + res := C.ffi_iroh_streamplace_rust_future_complete_pointer(handle, status) 946 + return res 947 + }, 948 + // liftFn 949 + func(ffi unsafe.Pointer) *NodeAddr { 950 + return FfiConverterNodeAddrINSTANCE.Lift(ffi) 951 + }, 952 + C.uniffi_iroh_streamplace_fn_method_endpoint_node_addr( 953 + _pointer), 954 + // pollFn 955 + func(handle C.uint64_t, continuation C.UniffiRustFutureContinuationCallback, data C.uint64_t) { 956 + C.ffi_iroh_streamplace_rust_future_poll_pointer(handle, continuation, data) 957 + }, 958 + // freeFn 959 + func(handle C.uint64_t) { 960 + C.ffi_iroh_streamplace_rust_future_free_pointer(handle) 961 + }, 962 + ) 963 + 964 + return res 965 + } 966 + func (object *Endpoint) Destroy() { 967 + runtime.SetFinalizer(object, nil) 968 + object.ffiObject.destroy() 969 + } 970 + 971 + type FfiConverterEndpoint struct{} 972 + 973 + var FfiConverterEndpointINSTANCE = FfiConverterEndpoint{} 974 + 975 + func (c FfiConverterEndpoint) Lift(pointer unsafe.Pointer) *Endpoint { 976 + result := &Endpoint{ 977 + newFfiObject( 978 + pointer, 979 + func(pointer unsafe.Pointer, status *C.RustCallStatus) unsafe.Pointer { 980 + return C.uniffi_iroh_streamplace_fn_clone_endpoint(pointer, status) 981 + }, 982 + func(pointer unsafe.Pointer, status *C.RustCallStatus) { 983 + C.uniffi_iroh_streamplace_fn_free_endpoint(pointer, status) 984 + }, 985 + ), 986 + } 987 + runtime.SetFinalizer(result, (*Endpoint).Destroy) 988 + return result 989 + } 990 + 991 + func (c FfiConverterEndpoint) Read(reader io.Reader) *Endpoint { 992 + return c.Lift(unsafe.Pointer(uintptr(readUint64(reader)))) 993 + } 994 + 995 + func (c FfiConverterEndpoint) Lower(value *Endpoint) unsafe.Pointer { 996 + // TODO: this is bad - all synchronization from ObjectRuntime.go is discarded here, 997 + // because the pointer will be decremented immediately after this function returns, 998 + // and someone will be left holding onto a non-locked pointer. 999 + pointer := value.ffiObject.incrementPointer("*Endpoint") 1000 + defer value.ffiObject.decrementPointer() 1001 + return pointer 1002 + 1003 + } 1004 + 1005 + func (c FfiConverterEndpoint) Write(writer io.Writer, value *Endpoint) { 1006 + writeUint64(writer, uint64(uintptr(c.Lower(value)))) 1007 + } 1008 + 1009 + type FfiDestroyerEndpoint struct{} 1010 + 1011 + func (_ FfiDestroyerEndpoint) Destroy(value *Endpoint) { 1012 + value.Destroy() 1013 + } 1014 + 1015 + // A peer and it's addressing information. 1016 + type NodeAddrInterface interface { 1017 + // Get the direct addresses of this peer. 1018 + DirectAddresses() []string 1019 + // Returns true if both NodeAddr's have the same values 1020 + Equal(other *NodeAddr) bool 1021 + NodeId() *PublicKey 1022 + // Get the home relay URL for this peer 1023 + RelayUrl() *string 1024 + } 1025 + 1026 + // A peer and it's addressing information. 1027 + type NodeAddr struct { 1028 + ffiObject FfiObject 1029 + } 1030 + 1031 + // Create a new [`NodeAddr`] with empty [`AddrInfo`]. 1032 + func NewNodeAddr(nodeId *PublicKey, derpUrl *string, addresses []string) *NodeAddr { 1033 + return FfiConverterNodeAddrINSTANCE.Lift(rustCall(func(_uniffiStatus *C.RustCallStatus) unsafe.Pointer { 1034 + return C.uniffi_iroh_streamplace_fn_constructor_nodeaddr_new(FfiConverterPublicKeyINSTANCE.Lower(nodeId), FfiConverterOptionalStringINSTANCE.Lower(derpUrl), FfiConverterSequenceStringINSTANCE.Lower(addresses), _uniffiStatus) 1035 + })) 1036 + } 1037 + 1038 + // Get the direct addresses of this peer. 1039 + func (_self *NodeAddr) DirectAddresses() []string { 1040 + _pointer := _self.ffiObject.incrementPointer("*NodeAddr") 1041 + defer _self.ffiObject.decrementPointer() 1042 + return FfiConverterSequenceStringINSTANCE.Lift(rustCall(func(_uniffiStatus *C.RustCallStatus) RustBufferI { 1043 + return GoRustBuffer{ 1044 + inner: C.uniffi_iroh_streamplace_fn_method_nodeaddr_direct_addresses( 1045 + _pointer, _uniffiStatus), 1046 + } 1047 + })) 1048 + } 1049 + 1050 + // Returns true if both NodeAddr's have the same values 1051 + func (_self *NodeAddr) Equal(other *NodeAddr) bool { 1052 + _pointer := _self.ffiObject.incrementPointer("*NodeAddr") 1053 + defer _self.ffiObject.decrementPointer() 1054 + return FfiConverterBoolINSTANCE.Lift(rustCall(func(_uniffiStatus *C.RustCallStatus) C.int8_t { 1055 + return C.uniffi_iroh_streamplace_fn_method_nodeaddr_equal( 1056 + _pointer, FfiConverterNodeAddrINSTANCE.Lower(other), _uniffiStatus) 1057 + })) 1058 + } 1059 + 1060 + func (_self *NodeAddr) NodeId() *PublicKey { 1061 + _pointer := _self.ffiObject.incrementPointer("*NodeAddr") 1062 + defer _self.ffiObject.decrementPointer() 1063 + return FfiConverterPublicKeyINSTANCE.Lift(rustCall(func(_uniffiStatus *C.RustCallStatus) unsafe.Pointer { 1064 + return C.uniffi_iroh_streamplace_fn_method_nodeaddr_node_id( 1065 + _pointer, _uniffiStatus) 1066 + })) 1067 + } 1068 + 1069 + // Get the home relay URL for this peer 1070 + func (_self *NodeAddr) RelayUrl() *string { 1071 + _pointer := _self.ffiObject.incrementPointer("*NodeAddr") 1072 + defer _self.ffiObject.decrementPointer() 1073 + return FfiConverterOptionalStringINSTANCE.Lift(rustCall(func(_uniffiStatus *C.RustCallStatus) RustBufferI { 1074 + return GoRustBuffer{ 1075 + inner: C.uniffi_iroh_streamplace_fn_method_nodeaddr_relay_url( 1076 + _pointer, _uniffiStatus), 1077 + } 1078 + })) 1079 + } 1080 + func (object *NodeAddr) Destroy() { 1081 + runtime.SetFinalizer(object, nil) 1082 + object.ffiObject.destroy() 1083 + } 1084 + 1085 + type FfiConverterNodeAddr struct{} 1086 + 1087 + var FfiConverterNodeAddrINSTANCE = FfiConverterNodeAddr{} 1088 + 1089 + func (c FfiConverterNodeAddr) Lift(pointer unsafe.Pointer) *NodeAddr { 1090 + result := &NodeAddr{ 1091 + newFfiObject( 1092 + pointer, 1093 + func(pointer unsafe.Pointer, status *C.RustCallStatus) unsafe.Pointer { 1094 + return C.uniffi_iroh_streamplace_fn_clone_nodeaddr(pointer, status) 1095 + }, 1096 + func(pointer unsafe.Pointer, status *C.RustCallStatus) { 1097 + C.uniffi_iroh_streamplace_fn_free_nodeaddr(pointer, status) 1098 + }, 1099 + ), 1100 + } 1101 + runtime.SetFinalizer(result, (*NodeAddr).Destroy) 1102 + return result 1103 + } 1104 + 1105 + func (c FfiConverterNodeAddr) Read(reader io.Reader) *NodeAddr { 1106 + return c.Lift(unsafe.Pointer(uintptr(readUint64(reader)))) 1107 + } 1108 + 1109 + func (c FfiConverterNodeAddr) Lower(value *NodeAddr) unsafe.Pointer { 1110 + // TODO: this is bad - all synchronization from ObjectRuntime.go is discarded here, 1111 + // because the pointer will be decremented immediately after this function returns, 1112 + // and someone will be left holding onto a non-locked pointer. 1113 + pointer := value.ffiObject.incrementPointer("*NodeAddr") 1114 + defer value.ffiObject.decrementPointer() 1115 + return pointer 1116 + 1117 + } 1118 + 1119 + func (c FfiConverterNodeAddr) Write(writer io.Writer, value *NodeAddr) { 1120 + writeUint64(writer, uint64(uintptr(c.Lower(value)))) 1121 + } 1122 + 1123 + type FfiDestroyerNodeAddr struct{} 1124 + 1125 + func (_ FfiDestroyerNodeAddr) Destroy(value *NodeAddr) { 1126 + value.Destroy() 1127 + } 1128 + 1129 + // A public key. 1130 + // 1131 + // The key itself is just a 32 byte array, but a key has associated crypto 1132 + // information that is cached for performance reasons. 1133 + type PublicKeyInterface interface { 1134 + // Returns true if the PublicKeys are equal 1135 + Equal(other *PublicKey) bool 1136 + // Convert to a base32 string limited to the first 10 bytes for a friendly string 1137 + // representation of the key. 1138 + FmtShort() string 1139 + // Express the PublicKey as a byte array 1140 + ToBytes() []byte 1141 + } 1142 + 1143 + // A public key. 1144 + // 1145 + // The key itself is just a 32 byte array, but a key has associated crypto 1146 + // information that is cached for performance reasons. 1147 + type PublicKey struct { 1148 + ffiObject FfiObject 1149 + } 1150 + 1151 + // Make a PublicKey from byte array 1152 + func PublicKeyFromBytes(bytes []byte) (*PublicKey, *Error) { 1153 + _uniffiRV, _uniffiErr := rustCallWithError[Error](FfiConverterError{}, func(_uniffiStatus *C.RustCallStatus) unsafe.Pointer { 1154 + return C.uniffi_iroh_streamplace_fn_constructor_publickey_from_bytes(FfiConverterBytesINSTANCE.Lower(bytes), _uniffiStatus) 1155 + }) 1156 + if _uniffiErr != nil { 1157 + var _uniffiDefaultValue *PublicKey 1158 + return _uniffiDefaultValue, _uniffiErr 1159 + } else { 1160 + return FfiConverterPublicKeyINSTANCE.Lift(_uniffiRV), _uniffiErr 1161 + } 1162 + } 1163 + 1164 + // Make a PublicKey from base32 string 1165 + func PublicKeyFromString(s string) (*PublicKey, *Error) { 1166 + _uniffiRV, _uniffiErr := rustCallWithError[Error](FfiConverterError{}, func(_uniffiStatus *C.RustCallStatus) unsafe.Pointer { 1167 + return C.uniffi_iroh_streamplace_fn_constructor_publickey_from_string(FfiConverterStringINSTANCE.Lower(s), _uniffiStatus) 1168 + }) 1169 + if _uniffiErr != nil { 1170 + var _uniffiDefaultValue *PublicKey 1171 + return _uniffiDefaultValue, _uniffiErr 1172 + } else { 1173 + return FfiConverterPublicKeyINSTANCE.Lift(_uniffiRV), _uniffiErr 1174 + } 1175 + } 1176 + 1177 + // Returns true if the PublicKeys are equal 1178 + func (_self *PublicKey) Equal(other *PublicKey) bool { 1179 + _pointer := _self.ffiObject.incrementPointer("*PublicKey") 1180 + defer _self.ffiObject.decrementPointer() 1181 + return FfiConverterBoolINSTANCE.Lift(rustCall(func(_uniffiStatus *C.RustCallStatus) C.int8_t { 1182 + return C.uniffi_iroh_streamplace_fn_method_publickey_equal( 1183 + _pointer, FfiConverterPublicKeyINSTANCE.Lower(other), _uniffiStatus) 1184 + })) 1185 + } 1186 + 1187 + // Convert to a base32 string limited to the first 10 bytes for a friendly string 1188 + // representation of the key. 1189 + func (_self *PublicKey) FmtShort() string { 1190 + _pointer := _self.ffiObject.incrementPointer("*PublicKey") 1191 + defer _self.ffiObject.decrementPointer() 1192 + return FfiConverterStringINSTANCE.Lift(rustCall(func(_uniffiStatus *C.RustCallStatus) RustBufferI { 1193 + return GoRustBuffer{ 1194 + inner: C.uniffi_iroh_streamplace_fn_method_publickey_fmt_short( 1195 + _pointer, _uniffiStatus), 1196 + } 1197 + })) 1198 + } 1199 + 1200 + // Express the PublicKey as a byte array 1201 + func (_self *PublicKey) ToBytes() []byte { 1202 + _pointer := _self.ffiObject.incrementPointer("*PublicKey") 1203 + defer _self.ffiObject.decrementPointer() 1204 + return FfiConverterBytesINSTANCE.Lift(rustCall(func(_uniffiStatus *C.RustCallStatus) RustBufferI { 1205 + return GoRustBuffer{ 1206 + inner: C.uniffi_iroh_streamplace_fn_method_publickey_to_bytes( 1207 + _pointer, _uniffiStatus), 1208 + } 1209 + })) 1210 + } 1211 + 1212 + func (_self *PublicKey) String() string { 1213 + _pointer := _self.ffiObject.incrementPointer("*PublicKey") 1214 + defer _self.ffiObject.decrementPointer() 1215 + return FfiConverterStringINSTANCE.Lift(rustCall(func(_uniffiStatus *C.RustCallStatus) RustBufferI { 1216 + return GoRustBuffer{ 1217 + inner: C.uniffi_iroh_streamplace_fn_method_publickey_uniffi_trait_display( 1218 + _pointer, _uniffiStatus), 1219 + } 1220 + })) 1221 + } 1222 + 1223 + func (object *PublicKey) Destroy() { 1224 + runtime.SetFinalizer(object, nil) 1225 + object.ffiObject.destroy() 1226 + } 1227 + 1228 + type FfiConverterPublicKey struct{} 1229 + 1230 + var FfiConverterPublicKeyINSTANCE = FfiConverterPublicKey{} 1231 + 1232 + func (c FfiConverterPublicKey) Lift(pointer unsafe.Pointer) *PublicKey { 1233 + result := &PublicKey{ 1234 + newFfiObject( 1235 + pointer, 1236 + func(pointer unsafe.Pointer, status *C.RustCallStatus) unsafe.Pointer { 1237 + return C.uniffi_iroh_streamplace_fn_clone_publickey(pointer, status) 1238 + }, 1239 + func(pointer unsafe.Pointer, status *C.RustCallStatus) { 1240 + C.uniffi_iroh_streamplace_fn_free_publickey(pointer, status) 1241 + }, 1242 + ), 1243 + } 1244 + runtime.SetFinalizer(result, (*PublicKey).Destroy) 1245 + return result 1246 + } 1247 + 1248 + func (c FfiConverterPublicKey) Read(reader io.Reader) *PublicKey { 1249 + return c.Lift(unsafe.Pointer(uintptr(readUint64(reader)))) 1250 + } 1251 + 1252 + func (c FfiConverterPublicKey) Lower(value *PublicKey) unsafe.Pointer { 1253 + // TODO: this is bad - all synchronization from ObjectRuntime.go is discarded here, 1254 + // because the pointer will be decremented immediately after this function returns, 1255 + // and someone will be left holding onto a non-locked pointer. 1256 + pointer := value.ffiObject.incrementPointer("*PublicKey") 1257 + defer value.ffiObject.decrementPointer() 1258 + return pointer 1259 + 1260 + } 1261 + 1262 + func (c FfiConverterPublicKey) Write(writer io.Writer, value *PublicKey) { 1263 + writeUint64(writer, uint64(uintptr(c.Lower(value)))) 1264 + } 1265 + 1266 + type FfiDestroyerPublicKey struct{} 1267 + 1268 + func (_ FfiDestroyerPublicKey) Destroy(value *PublicKey) { 1269 + value.Destroy() 1270 + } 1271 + 1272 + type ReceiverInterface interface { 1273 + NodeAddr() *NodeAddr 1274 + } 1275 + type Receiver struct { 1276 + ffiObject FfiObject 1277 + } 1278 + 1279 + // Create a new receiver. 1280 + func NewReceiver(endpoint *Endpoint, handler DataHandler) (*Receiver, *Error) { 1281 + res, err := uniffiRustCallAsync[Error]( 1282 + FfiConverterErrorINSTANCE, 1283 + // completeFn 1284 + func(handle C.uint64_t, status *C.RustCallStatus) unsafe.Pointer { 1285 + res := C.ffi_iroh_streamplace_rust_future_complete_pointer(handle, status) 1286 + return res 1287 + }, 1288 + // liftFn 1289 + func(ffi unsafe.Pointer) *Receiver { 1290 + return FfiConverterReceiverINSTANCE.Lift(ffi) 1291 + }, 1292 + C.uniffi_iroh_streamplace_fn_constructor_receiver_new(FfiConverterEndpointINSTANCE.Lower(endpoint), FfiConverterDataHandlerINSTANCE.Lower(handler)), 1293 + // pollFn 1294 + func(handle C.uint64_t, continuation C.UniffiRustFutureContinuationCallback, data C.uint64_t) { 1295 + C.ffi_iroh_streamplace_rust_future_poll_pointer(handle, continuation, data) 1296 + }, 1297 + // freeFn 1298 + func(handle C.uint64_t) { 1299 + C.ffi_iroh_streamplace_rust_future_free_pointer(handle) 1300 + }, 1301 + ) 1302 + 1303 + return res, err 1304 + } 1305 + 1306 + func (_self *Receiver) NodeAddr() *NodeAddr { 1307 + _pointer := _self.ffiObject.incrementPointer("*Receiver") 1308 + defer _self.ffiObject.decrementPointer() 1309 + res, _ := uniffiRustCallAsync[struct{}]( 1310 + nil, 1311 + // completeFn 1312 + func(handle C.uint64_t, status *C.RustCallStatus) unsafe.Pointer { 1313 + res := C.ffi_iroh_streamplace_rust_future_complete_pointer(handle, status) 1314 + return res 1315 + }, 1316 + // liftFn 1317 + func(ffi unsafe.Pointer) *NodeAddr { 1318 + return FfiConverterNodeAddrINSTANCE.Lift(ffi) 1319 + }, 1320 + C.uniffi_iroh_streamplace_fn_method_receiver_node_addr( 1321 + _pointer), 1322 + // pollFn 1323 + func(handle C.uint64_t, continuation C.UniffiRustFutureContinuationCallback, data C.uint64_t) { 1324 + C.ffi_iroh_streamplace_rust_future_poll_pointer(handle, continuation, data) 1325 + }, 1326 + // freeFn 1327 + func(handle C.uint64_t) { 1328 + C.ffi_iroh_streamplace_rust_future_free_pointer(handle) 1329 + }, 1330 + ) 1331 + 1332 + return res 1333 + } 1334 + func (object *Receiver) Destroy() { 1335 + runtime.SetFinalizer(object, nil) 1336 + object.ffiObject.destroy() 1337 + } 1338 + 1339 + type FfiConverterReceiver struct{} 1340 + 1341 + var FfiConverterReceiverINSTANCE = FfiConverterReceiver{} 1342 + 1343 + func (c FfiConverterReceiver) Lift(pointer unsafe.Pointer) *Receiver { 1344 + result := &Receiver{ 1345 + newFfiObject( 1346 + pointer, 1347 + func(pointer unsafe.Pointer, status *C.RustCallStatus) unsafe.Pointer { 1348 + return C.uniffi_iroh_streamplace_fn_clone_receiver(pointer, status) 1349 + }, 1350 + func(pointer unsafe.Pointer, status *C.RustCallStatus) { 1351 + C.uniffi_iroh_streamplace_fn_free_receiver(pointer, status) 1352 + }, 1353 + ), 1354 + } 1355 + runtime.SetFinalizer(result, (*Receiver).Destroy) 1356 + return result 1357 + } 1358 + 1359 + func (c FfiConverterReceiver) Read(reader io.Reader) *Receiver { 1360 + return c.Lift(unsafe.Pointer(uintptr(readUint64(reader)))) 1361 + } 1362 + 1363 + func (c FfiConverterReceiver) Lower(value *Receiver) unsafe.Pointer { 1364 + // TODO: this is bad - all synchronization from ObjectRuntime.go is discarded here, 1365 + // because the pointer will be decremented immediately after this function returns, 1366 + // and someone will be left holding onto a non-locked pointer. 1367 + pointer := value.ffiObject.incrementPointer("*Receiver") 1368 + defer value.ffiObject.decrementPointer() 1369 + return pointer 1370 + 1371 + } 1372 + 1373 + func (c FfiConverterReceiver) Write(writer io.Writer, value *Receiver) { 1374 + writeUint64(writer, uint64(uintptr(c.Lower(value)))) 1375 + } 1376 + 1377 + type FfiDestroyerReceiver struct{} 1378 + 1379 + func (_ FfiDestroyerReceiver) Destroy(value *Receiver) { 1380 + value.Destroy() 1381 + } 1382 + 1383 + type SenderInterface interface { 1384 + AddPeer(addr *NodeAddr) *Error 1385 + NodeAddr() *NodeAddr 1386 + Send(nodeId *PublicKey, data []byte) *Error 1387 + } 1388 + type Sender struct { 1389 + ffiObject FfiObject 1390 + } 1391 + 1392 + // Create a new sender. 1393 + func NewSender(endpoint *Endpoint) (*Sender, *Error) { 1394 + res, err := uniffiRustCallAsync[Error]( 1395 + FfiConverterErrorINSTANCE, 1396 + // completeFn 1397 + func(handle C.uint64_t, status *C.RustCallStatus) unsafe.Pointer { 1398 + res := C.ffi_iroh_streamplace_rust_future_complete_pointer(handle, status) 1399 + return res 1400 + }, 1401 + // liftFn 1402 + func(ffi unsafe.Pointer) *Sender { 1403 + return FfiConverterSenderINSTANCE.Lift(ffi) 1404 + }, 1405 + C.uniffi_iroh_streamplace_fn_constructor_sender_new(FfiConverterEndpointINSTANCE.Lower(endpoint)), 1406 + // pollFn 1407 + func(handle C.uint64_t, continuation C.UniffiRustFutureContinuationCallback, data C.uint64_t) { 1408 + C.ffi_iroh_streamplace_rust_future_poll_pointer(handle, continuation, data) 1409 + }, 1410 + // freeFn 1411 + func(handle C.uint64_t) { 1412 + C.ffi_iroh_streamplace_rust_future_free_pointer(handle) 1413 + }, 1414 + ) 1415 + 1416 + return res, err 1417 + } 1418 + 1419 + func (_self *Sender) AddPeer(addr *NodeAddr) *Error { 1420 + _pointer := _self.ffiObject.incrementPointer("*Sender") 1421 + defer _self.ffiObject.decrementPointer() 1422 + _, err := uniffiRustCallAsync[Error]( 1423 + FfiConverterErrorINSTANCE, 1424 + // completeFn 1425 + func(handle C.uint64_t, status *C.RustCallStatus) struct{} { 1426 + C.ffi_iroh_streamplace_rust_future_complete_void(handle, status) 1427 + return struct{}{} 1428 + }, 1429 + // liftFn 1430 + func(_ struct{}) struct{} { return struct{}{} }, 1431 + C.uniffi_iroh_streamplace_fn_method_sender_add_peer( 1432 + _pointer, FfiConverterNodeAddrINSTANCE.Lower(addr)), 1433 + // pollFn 1434 + func(handle C.uint64_t, continuation C.UniffiRustFutureContinuationCallback, data C.uint64_t) { 1435 + C.ffi_iroh_streamplace_rust_future_poll_void(handle, continuation, data) 1436 + }, 1437 + // freeFn 1438 + func(handle C.uint64_t) { 1439 + C.ffi_iroh_streamplace_rust_future_free_void(handle) 1440 + }, 1441 + ) 1442 + 1443 + return err 1444 + } 1445 + 1446 + func (_self *Sender) NodeAddr() *NodeAddr { 1447 + _pointer := _self.ffiObject.incrementPointer("*Sender") 1448 + defer _self.ffiObject.decrementPointer() 1449 + res, _ := uniffiRustCallAsync[struct{}]( 1450 + nil, 1451 + // completeFn 1452 + func(handle C.uint64_t, status *C.RustCallStatus) unsafe.Pointer { 1453 + res := C.ffi_iroh_streamplace_rust_future_complete_pointer(handle, status) 1454 + return res 1455 + }, 1456 + // liftFn 1457 + func(ffi unsafe.Pointer) *NodeAddr { 1458 + return FfiConverterNodeAddrINSTANCE.Lift(ffi) 1459 + }, 1460 + C.uniffi_iroh_streamplace_fn_method_sender_node_addr( 1461 + _pointer), 1462 + // pollFn 1463 + func(handle C.uint64_t, continuation C.UniffiRustFutureContinuationCallback, data C.uint64_t) { 1464 + C.ffi_iroh_streamplace_rust_future_poll_pointer(handle, continuation, data) 1465 + }, 1466 + // freeFn 1467 + func(handle C.uint64_t) { 1468 + C.ffi_iroh_streamplace_rust_future_free_pointer(handle) 1469 + }, 1470 + ) 1471 + 1472 + return res 1473 + } 1474 + 1475 + func (_self *Sender) Send(nodeId *PublicKey, data []byte) *Error { 1476 + _pointer := _self.ffiObject.incrementPointer("*Sender") 1477 + defer _self.ffiObject.decrementPointer() 1478 + _, err := uniffiRustCallAsync[Error]( 1479 + FfiConverterErrorINSTANCE, 1480 + // completeFn 1481 + func(handle C.uint64_t, status *C.RustCallStatus) struct{} { 1482 + C.ffi_iroh_streamplace_rust_future_complete_void(handle, status) 1483 + return struct{}{} 1484 + }, 1485 + // liftFn 1486 + func(_ struct{}) struct{} { return struct{}{} }, 1487 + C.uniffi_iroh_streamplace_fn_method_sender_send( 1488 + _pointer, FfiConverterPublicKeyINSTANCE.Lower(nodeId), FfiConverterBytesINSTANCE.Lower(data)), 1489 + // pollFn 1490 + func(handle C.uint64_t, continuation C.UniffiRustFutureContinuationCallback, data C.uint64_t) { 1491 + C.ffi_iroh_streamplace_rust_future_poll_void(handle, continuation, data) 1492 + }, 1493 + // freeFn 1494 + func(handle C.uint64_t) { 1495 + C.ffi_iroh_streamplace_rust_future_free_void(handle) 1496 + }, 1497 + ) 1498 + 1499 + return err 1500 + } 1501 + func (object *Sender) Destroy() { 1502 + runtime.SetFinalizer(object, nil) 1503 + object.ffiObject.destroy() 1504 + } 1505 + 1506 + type FfiConverterSender struct{} 1507 + 1508 + var FfiConverterSenderINSTANCE = FfiConverterSender{} 1509 + 1510 + func (c FfiConverterSender) Lift(pointer unsafe.Pointer) *Sender { 1511 + result := &Sender{ 1512 + newFfiObject( 1513 + pointer, 1514 + func(pointer unsafe.Pointer, status *C.RustCallStatus) unsafe.Pointer { 1515 + return C.uniffi_iroh_streamplace_fn_clone_sender(pointer, status) 1516 + }, 1517 + func(pointer unsafe.Pointer, status *C.RustCallStatus) { 1518 + C.uniffi_iroh_streamplace_fn_free_sender(pointer, status) 1519 + }, 1520 + ), 1521 + } 1522 + runtime.SetFinalizer(result, (*Sender).Destroy) 1523 + return result 1524 + } 1525 + 1526 + func (c FfiConverterSender) Read(reader io.Reader) *Sender { 1527 + return c.Lift(unsafe.Pointer(uintptr(readUint64(reader)))) 1528 + } 1529 + 1530 + func (c FfiConverterSender) Lower(value *Sender) unsafe.Pointer { 1531 + // TODO: this is bad - all synchronization from ObjectRuntime.go is discarded here, 1532 + // because the pointer will be decremented immediately after this function returns, 1533 + // and someone will be left holding onto a non-locked pointer. 1534 + pointer := value.ffiObject.incrementPointer("*Sender") 1535 + defer value.ffiObject.decrementPointer() 1536 + return pointer 1537 + 1538 + } 1539 + 1540 + func (c FfiConverterSender) Write(writer io.Writer, value *Sender) { 1541 + writeUint64(writer, uint64(uintptr(c.Lower(value)))) 1542 + } 1543 + 1544 + type FfiDestroyerSender struct{} 1545 + 1546 + func (_ FfiDestroyerSender) Destroy(value *Sender) { 1547 + value.Destroy() 1548 + } 1549 + 1550 + // An Error. 1551 + type Error struct { 1552 + err error 1553 + } 1554 + 1555 + // Convience method to turn *Error into error 1556 + // Avoiding treating nil pointer as non nil error interface 1557 + func (err *Error) AsError() error { 1558 + if err == nil { 1559 + return nil 1560 + } else { 1561 + return err 1562 + } 1563 + } 1564 + 1565 + func (err Error) Error() string { 1566 + return fmt.Sprintf("Error: %s", err.err.Error()) 1567 + } 1568 + 1569 + func (err Error) Unwrap() error { 1570 + return err.err 1571 + } 1572 + 1573 + // Err* are used for checking error type with `errors.Is` 1574 + var ErrErrorIrohBind = fmt.Errorf("ErrorIrohBind") 1575 + var ErrErrorInvalidUrl = fmt.Errorf("ErrorInvalidUrl") 1576 + var ErrErrorIrohConnect = fmt.Errorf("ErrorIrohConnect") 1577 + var ErrErrorInvalidNetworkAddress = fmt.Errorf("ErrorInvalidNetworkAddress") 1578 + var ErrErrorOpenStream = fmt.Errorf("ErrorOpenStream") 1579 + var ErrErrorSendMessage = fmt.Errorf("ErrorSendMessage") 1580 + var ErrErrorNewConnection = fmt.Errorf("ErrorNewConnection") 1581 + var ErrErrorMissingConnection = fmt.Errorf("ErrorMissingConnection") 1582 + var ErrErrorInvalidPublicKey = fmt.Errorf("ErrorInvalidPublicKey") 1583 + 1584 + // Variant structs 1585 + type ErrorIrohBind struct { 1586 + message string 1587 + } 1588 + 1589 + func NewErrorIrohBind() *Error { 1590 + return &Error{err: &ErrorIrohBind{}} 1591 + } 1592 + 1593 + func (e ErrorIrohBind) destroy() { 1594 + } 1595 + 1596 + func (err ErrorIrohBind) Error() string { 1597 + return fmt.Sprintf("IrohBind: %s", err.message) 1598 + } 1599 + 1600 + func (self ErrorIrohBind) Is(target error) bool { 1601 + return target == ErrErrorIrohBind 1602 + } 1603 + 1604 + type ErrorInvalidUrl struct { 1605 + message string 1606 + } 1607 + 1608 + func NewErrorInvalidUrl() *Error { 1609 + return &Error{err: &ErrorInvalidUrl{}} 1610 + } 1611 + 1612 + func (e ErrorInvalidUrl) destroy() { 1613 + } 1614 + 1615 + func (err ErrorInvalidUrl) Error() string { 1616 + return fmt.Sprintf("InvalidUrl: %s", err.message) 1617 + } 1618 + 1619 + func (self ErrorInvalidUrl) Is(target error) bool { 1620 + return target == ErrErrorInvalidUrl 1621 + } 1622 + 1623 + type ErrorIrohConnect struct { 1624 + message string 1625 + } 1626 + 1627 + func NewErrorIrohConnect() *Error { 1628 + return &Error{err: &ErrorIrohConnect{}} 1629 + } 1630 + 1631 + func (e ErrorIrohConnect) destroy() { 1632 + } 1633 + 1634 + func (err ErrorIrohConnect) Error() string { 1635 + return fmt.Sprintf("IrohConnect: %s", err.message) 1636 + } 1637 + 1638 + func (self ErrorIrohConnect) Is(target error) bool { 1639 + return target == ErrErrorIrohConnect 1640 + } 1641 + 1642 + type ErrorInvalidNetworkAddress struct { 1643 + message string 1644 + } 1645 + 1646 + func NewErrorInvalidNetworkAddress() *Error { 1647 + return &Error{err: &ErrorInvalidNetworkAddress{}} 1648 + } 1649 + 1650 + func (e ErrorInvalidNetworkAddress) destroy() { 1651 + } 1652 + 1653 + func (err ErrorInvalidNetworkAddress) Error() string { 1654 + return fmt.Sprintf("InvalidNetworkAddress: %s", err.message) 1655 + } 1656 + 1657 + func (self ErrorInvalidNetworkAddress) Is(target error) bool { 1658 + return target == ErrErrorInvalidNetworkAddress 1659 + } 1660 + 1661 + type ErrorOpenStream struct { 1662 + message string 1663 + } 1664 + 1665 + func NewErrorOpenStream() *Error { 1666 + return &Error{err: &ErrorOpenStream{}} 1667 + } 1668 + 1669 + func (e ErrorOpenStream) destroy() { 1670 + } 1671 + 1672 + func (err ErrorOpenStream) Error() string { 1673 + return fmt.Sprintf("OpenStream: %s", err.message) 1674 + } 1675 + 1676 + func (self ErrorOpenStream) Is(target error) bool { 1677 + return target == ErrErrorOpenStream 1678 + } 1679 + 1680 + type ErrorSendMessage struct { 1681 + message string 1682 + } 1683 + 1684 + func NewErrorSendMessage() *Error { 1685 + return &Error{err: &ErrorSendMessage{}} 1686 + } 1687 + 1688 + func (e ErrorSendMessage) destroy() { 1689 + } 1690 + 1691 + func (err ErrorSendMessage) Error() string { 1692 + return fmt.Sprintf("SendMessage: %s", err.message) 1693 + } 1694 + 1695 + func (self ErrorSendMessage) Is(target error) bool { 1696 + return target == ErrErrorSendMessage 1697 + } 1698 + 1699 + type ErrorNewConnection struct { 1700 + message string 1701 + } 1702 + 1703 + func NewErrorNewConnection() *Error { 1704 + return &Error{err: &ErrorNewConnection{}} 1705 + } 1706 + 1707 + func (e ErrorNewConnection) destroy() { 1708 + } 1709 + 1710 + func (err ErrorNewConnection) Error() string { 1711 + return fmt.Sprintf("NewConnection: %s", err.message) 1712 + } 1713 + 1714 + func (self ErrorNewConnection) Is(target error) bool { 1715 + return target == ErrErrorNewConnection 1716 + } 1717 + 1718 + type ErrorMissingConnection struct { 1719 + message string 1720 + } 1721 + 1722 + func NewErrorMissingConnection() *Error { 1723 + return &Error{err: &ErrorMissingConnection{}} 1724 + } 1725 + 1726 + func (e ErrorMissingConnection) destroy() { 1727 + } 1728 + 1729 + func (err ErrorMissingConnection) Error() string { 1730 + return fmt.Sprintf("MissingConnection: %s", err.message) 1731 + } 1732 + 1733 + func (self ErrorMissingConnection) Is(target error) bool { 1734 + return target == ErrErrorMissingConnection 1735 + } 1736 + 1737 + type ErrorInvalidPublicKey struct { 1738 + message string 1739 + } 1740 + 1741 + func NewErrorInvalidPublicKey() *Error { 1742 + return &Error{err: &ErrorInvalidPublicKey{}} 1743 + } 1744 + 1745 + func (e ErrorInvalidPublicKey) destroy() { 1746 + } 1747 + 1748 + func (err ErrorInvalidPublicKey) Error() string { 1749 + return fmt.Sprintf("InvalidPublicKey: %s", err.message) 1750 + } 1751 + 1752 + func (self ErrorInvalidPublicKey) Is(target error) bool { 1753 + return target == ErrErrorInvalidPublicKey 1754 + } 1755 + 1756 + type FfiConverterError struct{} 1757 + 1758 + var FfiConverterErrorINSTANCE = FfiConverterError{} 1759 + 1760 + func (c FfiConverterError) Lift(eb RustBufferI) *Error { 1761 + return LiftFromRustBuffer[*Error](c, eb) 1762 + } 1763 + 1764 + func (c FfiConverterError) Lower(value *Error) C.RustBuffer { 1765 + return LowerIntoRustBuffer[*Error](c, value) 1766 + } 1767 + 1768 + func (c FfiConverterError) Read(reader io.Reader) *Error { 1769 + errorID := readUint32(reader) 1770 + 1771 + message := FfiConverterStringINSTANCE.Read(reader) 1772 + switch errorID { 1773 + case 1: 1774 + return &Error{&ErrorIrohBind{message}} 1775 + case 2: 1776 + return &Error{&ErrorInvalidUrl{message}} 1777 + case 3: 1778 + return &Error{&ErrorIrohConnect{message}} 1779 + case 4: 1780 + return &Error{&ErrorInvalidNetworkAddress{message}} 1781 + case 5: 1782 + return &Error{&ErrorOpenStream{message}} 1783 + case 6: 1784 + return &Error{&ErrorSendMessage{message}} 1785 + case 7: 1786 + return &Error{&ErrorNewConnection{message}} 1787 + case 8: 1788 + return &Error{&ErrorMissingConnection{message}} 1789 + case 9: 1790 + return &Error{&ErrorInvalidPublicKey{message}} 1791 + default: 1792 + panic(fmt.Sprintf("Unknown error code %d in FfiConverterError.Read()", errorID)) 1793 + } 1794 + 1795 + } 1796 + 1797 + func (c FfiConverterError) Write(writer io.Writer, value *Error) { 1798 + switch variantValue := value.err.(type) { 1799 + case *ErrorIrohBind: 1800 + writeInt32(writer, 1) 1801 + case *ErrorInvalidUrl: 1802 + writeInt32(writer, 2) 1803 + case *ErrorIrohConnect: 1804 + writeInt32(writer, 3) 1805 + case *ErrorInvalidNetworkAddress: 1806 + writeInt32(writer, 4) 1807 + case *ErrorOpenStream: 1808 + writeInt32(writer, 5) 1809 + case *ErrorSendMessage: 1810 + writeInt32(writer, 6) 1811 + case *ErrorNewConnection: 1812 + writeInt32(writer, 7) 1813 + case *ErrorMissingConnection: 1814 + writeInt32(writer, 8) 1815 + case *ErrorInvalidPublicKey: 1816 + writeInt32(writer, 9) 1817 + default: 1818 + _ = variantValue 1819 + panic(fmt.Sprintf("invalid error value `%v` in FfiConverterError.Write", value)) 1820 + } 1821 + } 1822 + 1823 + type FfiDestroyerError struct{} 1824 + 1825 + func (_ FfiDestroyerError) Destroy(value *Error) { 1826 + switch variantValue := value.err.(type) { 1827 + case ErrorIrohBind: 1828 + variantValue.destroy() 1829 + case ErrorInvalidUrl: 1830 + variantValue.destroy() 1831 + case ErrorIrohConnect: 1832 + variantValue.destroy() 1833 + case ErrorInvalidNetworkAddress: 1834 + variantValue.destroy() 1835 + case ErrorOpenStream: 1836 + variantValue.destroy() 1837 + case ErrorSendMessage: 1838 + variantValue.destroy() 1839 + case ErrorNewConnection: 1840 + variantValue.destroy() 1841 + case ErrorMissingConnection: 1842 + variantValue.destroy() 1843 + case ErrorInvalidPublicKey: 1844 + variantValue.destroy() 1845 + default: 1846 + _ = variantValue 1847 + panic(fmt.Sprintf("invalid error value `%v` in FfiDestroyerError.Destroy", value)) 1848 + } 1849 + } 1850 + 1851 + type FfiConverterOptionalString struct{} 1852 + 1853 + var FfiConverterOptionalStringINSTANCE = FfiConverterOptionalString{} 1854 + 1855 + func (c FfiConverterOptionalString) Lift(rb RustBufferI) *string { 1856 + return LiftFromRustBuffer[*string](c, rb) 1857 + } 1858 + 1859 + func (_ FfiConverterOptionalString) Read(reader io.Reader) *string { 1860 + if readInt8(reader) == 0 { 1861 + return nil 1862 + } 1863 + temp := FfiConverterStringINSTANCE.Read(reader) 1864 + return &temp 1865 + } 1866 + 1867 + func (c FfiConverterOptionalString) Lower(value *string) C.RustBuffer { 1868 + return LowerIntoRustBuffer[*string](c, value) 1869 + } 1870 + 1871 + func (_ FfiConverterOptionalString) Write(writer io.Writer, value *string) { 1872 + if value == nil { 1873 + writeInt8(writer, 0) 1874 + } else { 1875 + writeInt8(writer, 1) 1876 + FfiConverterStringINSTANCE.Write(writer, *value) 1877 + } 1878 + } 1879 + 1880 + type FfiDestroyerOptionalString struct{} 1881 + 1882 + func (_ FfiDestroyerOptionalString) Destroy(value *string) { 1883 + if value != nil { 1884 + FfiDestroyerString{}.Destroy(*value) 1885 + } 1886 + } 1887 + 1888 + type FfiConverterSequenceString struct{} 1889 + 1890 + var FfiConverterSequenceStringINSTANCE = FfiConverterSequenceString{} 1891 + 1892 + func (c FfiConverterSequenceString) Lift(rb RustBufferI) []string { 1893 + return LiftFromRustBuffer[[]string](c, rb) 1894 + } 1895 + 1896 + func (c FfiConverterSequenceString) Read(reader io.Reader) []string { 1897 + length := readInt32(reader) 1898 + if length == 0 { 1899 + return nil 1900 + } 1901 + result := make([]string, 0, length) 1902 + for i := int32(0); i < length; i++ { 1903 + result = append(result, FfiConverterStringINSTANCE.Read(reader)) 1904 + } 1905 + return result 1906 + } 1907 + 1908 + func (c FfiConverterSequenceString) Lower(value []string) C.RustBuffer { 1909 + return LowerIntoRustBuffer[[]string](c, value) 1910 + } 1911 + 1912 + func (c FfiConverterSequenceString) Write(writer io.Writer, value []string) { 1913 + if len(value) > math.MaxInt32 { 1914 + panic("[]string is too large to fit into Int32") 1915 + } 1916 + 1917 + writeInt32(writer, int32(len(value))) 1918 + for _, item := range value { 1919 + FfiConverterStringINSTANCE.Write(writer, item) 1920 + } 1921 + } 1922 + 1923 + type FfiDestroyerSequenceString struct{} 1924 + 1925 + func (FfiDestroyerSequenceString) Destroy(sequence []string) { 1926 + for _, value := range sequence { 1927 + FfiDestroyerString{}.Destroy(value) 1928 + } 1929 + } 1930 + 1931 + const ( 1932 + uniffiRustFuturePollReady int8 = 0 1933 + uniffiRustFuturePollMaybeReady int8 = 1 1934 + ) 1935 + 1936 + type rustFuturePollFunc func(C.uint64_t, C.UniffiRustFutureContinuationCallback, C.uint64_t) 1937 + type rustFutureCompleteFunc[T any] func(C.uint64_t, *C.RustCallStatus) T 1938 + type rustFutureFreeFunc func(C.uint64_t) 1939 + 1940 + //export iroh_streamplace_uniffiFutureContinuationCallback 1941 + func iroh_streamplace_uniffiFutureContinuationCallback(data C.uint64_t, pollResult C.int8_t) { 1942 + h := cgo.Handle(uintptr(data)) 1943 + waiter := h.Value().(chan int8) 1944 + waiter <- int8(pollResult) 1945 + } 1946 + 1947 + func uniffiRustCallAsync[E any, T any, F any]( 1948 + errConverter BufReader[*E], 1949 + completeFunc rustFutureCompleteFunc[F], 1950 + liftFunc func(F) T, 1951 + rustFuture C.uint64_t, 1952 + pollFunc rustFuturePollFunc, 1953 + freeFunc rustFutureFreeFunc, 1954 + ) (T, *E) { 1955 + defer freeFunc(rustFuture) 1956 + 1957 + pollResult := int8(-1) 1958 + waiter := make(chan int8, 1) 1959 + 1960 + chanHandle := cgo.NewHandle(waiter) 1961 + defer chanHandle.Delete() 1962 + 1963 + for pollResult != uniffiRustFuturePollReady { 1964 + pollFunc( 1965 + rustFuture, 1966 + (C.UniffiRustFutureContinuationCallback)(C.iroh_streamplace_uniffiFutureContinuationCallback), 1967 + C.uint64_t(chanHandle), 1968 + ) 1969 + pollResult = <-waiter 1970 + } 1971 + 1972 + var goValue T 1973 + var ffiValue F 1974 + var err *E 1975 + 1976 + ffiValue, err = rustCallWithError(errConverter, func(status *C.RustCallStatus) F { 1977 + return completeFunc(rustFuture, status) 1978 + }) 1979 + if err != nil { 1980 + return goValue, err 1981 + } 1982 + return liftFunc(ffiValue), nil 1983 + } 1984 + 1985 + //export iroh_streamplace_uniffiFreeGorutine 1986 + func iroh_streamplace_uniffiFreeGorutine(data C.uint64_t) { 1987 + handle := cgo.Handle(uintptr(data)) 1988 + defer handle.Delete() 1989 + 1990 + guard := handle.Value().(chan struct{}) 1991 + guard <- struct{}{} 1992 + }
+974
rust/iroh-streamplace/pkg/iroh_streamplace/generated/iroh_streamplace/iroh_streamplace.h
··· 1 + 2 + 3 + // This file was autogenerated by some hot garbage in the `uniffi` crate. 4 + // Trust me, you don't want to mess with it! 5 + 6 + 7 + 8 + #include <stdbool.h> 9 + #include <stdint.h> 10 + 11 + // The following structs are used to implement the lowest level 12 + // of the FFI, and thus useful to multiple uniffied crates. 13 + // We ensure they are declared exactly once, with a header guard, UNIFFI_SHARED_H. 14 + #ifdef UNIFFI_SHARED_H 15 + // We also try to prevent mixing versions of shared uniffi header structs. 16 + // If you add anything to the #else block, you must increment the version suffix in UNIFFI_SHARED_HEADER_V6 17 + #ifndef UNIFFI_SHARED_HEADER_V6 18 + #error Combining helper code from multiple versions of uniffi is not supported 19 + #endif // ndef UNIFFI_SHARED_HEADER_V6 20 + #else 21 + #define UNIFFI_SHARED_H 22 + #define UNIFFI_SHARED_HEADER_V6 23 + // ⚠️ Attention: If you change this #else block (ending in `#endif // def UNIFFI_SHARED_H`) you *must* ⚠️ 24 + // ⚠️ increment the version suffix in all instances of UNIFFI_SHARED_HEADER_V6 in this file. ⚠️ 25 + 26 + typedef struct RustBuffer { 27 + uint64_t capacity; 28 + uint64_t len; 29 + uint8_t *data; 30 + } RustBuffer; 31 + 32 + typedef struct ForeignBytes { 33 + int32_t len; 34 + const uint8_t *data; 35 + } ForeignBytes; 36 + 37 + // Error definitions 38 + typedef struct RustCallStatus { 39 + int8_t code; 40 + RustBuffer errorBuf; 41 + } RustCallStatus; 42 + 43 + #endif // UNIFFI_SHARED_H 44 + 45 + 46 + #ifndef UNIFFI_FFIDEF_RUST_FUTURE_CONTINUATION_CALLBACK 47 + #define UNIFFI_FFIDEF_RUST_FUTURE_CONTINUATION_CALLBACK 48 + typedef void (*UniffiRustFutureContinuationCallback)(uint64_t data, int8_t poll_result); 49 + 50 + // Making function static works arround: 51 + // https://github.com/golang/go/issues/11263 52 + static void call_UniffiRustFutureContinuationCallback( 53 + UniffiRustFutureContinuationCallback cb, uint64_t data, int8_t poll_result) 54 + { 55 + return cb(data, poll_result); 56 + } 57 + 58 + 59 + #endif 60 + #ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_FREE 61 + #define UNIFFI_FFIDEF_FOREIGN_FUTURE_FREE 62 + typedef void (*UniffiForeignFutureFree)(uint64_t handle); 63 + 64 + // Making function static works arround: 65 + // https://github.com/golang/go/issues/11263 66 + static void call_UniffiForeignFutureFree( 67 + UniffiForeignFutureFree cb, uint64_t handle) 68 + { 69 + return cb(handle); 70 + } 71 + 72 + 73 + #endif 74 + #ifndef UNIFFI_FFIDEF_CALLBACK_INTERFACE_FREE 75 + #define UNIFFI_FFIDEF_CALLBACK_INTERFACE_FREE 76 + typedef void (*UniffiCallbackInterfaceFree)(uint64_t handle); 77 + 78 + // Making function static works arround: 79 + // https://github.com/golang/go/issues/11263 80 + static void call_UniffiCallbackInterfaceFree( 81 + UniffiCallbackInterfaceFree cb, uint64_t handle) 82 + { 83 + return cb(handle); 84 + } 85 + 86 + 87 + #endif 88 + #ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE 89 + #define UNIFFI_FFIDEF_FOREIGN_FUTURE 90 + typedef struct UniffiForeignFuture { 91 + uint64_t handle; 92 + UniffiForeignFutureFree free; 93 + } UniffiForeignFuture; 94 + 95 + #endif 96 + #ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_U8 97 + #define UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_U8 98 + typedef struct UniffiForeignFutureStructU8 { 99 + uint8_t returnValue; 100 + RustCallStatus callStatus; 101 + } UniffiForeignFutureStructU8; 102 + 103 + #endif 104 + #ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_U8 105 + #define UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_U8 106 + typedef void (*UniffiForeignFutureCompleteU8)(uint64_t callback_data, UniffiForeignFutureStructU8 result); 107 + 108 + // Making function static works arround: 109 + // https://github.com/golang/go/issues/11263 110 + static void call_UniffiForeignFutureCompleteU8( 111 + UniffiForeignFutureCompleteU8 cb, uint64_t callback_data, UniffiForeignFutureStructU8 result) 112 + { 113 + return cb(callback_data, result); 114 + } 115 + 116 + 117 + #endif 118 + #ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_I8 119 + #define UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_I8 120 + typedef struct UniffiForeignFutureStructI8 { 121 + int8_t returnValue; 122 + RustCallStatus callStatus; 123 + } UniffiForeignFutureStructI8; 124 + 125 + #endif 126 + #ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_I8 127 + #define UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_I8 128 + typedef void (*UniffiForeignFutureCompleteI8)(uint64_t callback_data, UniffiForeignFutureStructI8 result); 129 + 130 + // Making function static works arround: 131 + // https://github.com/golang/go/issues/11263 132 + static void call_UniffiForeignFutureCompleteI8( 133 + UniffiForeignFutureCompleteI8 cb, uint64_t callback_data, UniffiForeignFutureStructI8 result) 134 + { 135 + return cb(callback_data, result); 136 + } 137 + 138 + 139 + #endif 140 + #ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_U16 141 + #define UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_U16 142 + typedef struct UniffiForeignFutureStructU16 { 143 + uint16_t returnValue; 144 + RustCallStatus callStatus; 145 + } UniffiForeignFutureStructU16; 146 + 147 + #endif 148 + #ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_U16 149 + #define UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_U16 150 + typedef void (*UniffiForeignFutureCompleteU16)(uint64_t callback_data, UniffiForeignFutureStructU16 result); 151 + 152 + // Making function static works arround: 153 + // https://github.com/golang/go/issues/11263 154 + static void call_UniffiForeignFutureCompleteU16( 155 + UniffiForeignFutureCompleteU16 cb, uint64_t callback_data, UniffiForeignFutureStructU16 result) 156 + { 157 + return cb(callback_data, result); 158 + } 159 + 160 + 161 + #endif 162 + #ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_I16 163 + #define UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_I16 164 + typedef struct UniffiForeignFutureStructI16 { 165 + int16_t returnValue; 166 + RustCallStatus callStatus; 167 + } UniffiForeignFutureStructI16; 168 + 169 + #endif 170 + #ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_I16 171 + #define UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_I16 172 + typedef void (*UniffiForeignFutureCompleteI16)(uint64_t callback_data, UniffiForeignFutureStructI16 result); 173 + 174 + // Making function static works arround: 175 + // https://github.com/golang/go/issues/11263 176 + static void call_UniffiForeignFutureCompleteI16( 177 + UniffiForeignFutureCompleteI16 cb, uint64_t callback_data, UniffiForeignFutureStructI16 result) 178 + { 179 + return cb(callback_data, result); 180 + } 181 + 182 + 183 + #endif 184 + #ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_U32 185 + #define UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_U32 186 + typedef struct UniffiForeignFutureStructU32 { 187 + uint32_t returnValue; 188 + RustCallStatus callStatus; 189 + } UniffiForeignFutureStructU32; 190 + 191 + #endif 192 + #ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_U32 193 + #define UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_U32 194 + typedef void (*UniffiForeignFutureCompleteU32)(uint64_t callback_data, UniffiForeignFutureStructU32 result); 195 + 196 + // Making function static works arround: 197 + // https://github.com/golang/go/issues/11263 198 + static void call_UniffiForeignFutureCompleteU32( 199 + UniffiForeignFutureCompleteU32 cb, uint64_t callback_data, UniffiForeignFutureStructU32 result) 200 + { 201 + return cb(callback_data, result); 202 + } 203 + 204 + 205 + #endif 206 + #ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_I32 207 + #define UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_I32 208 + typedef struct UniffiForeignFutureStructI32 { 209 + int32_t returnValue; 210 + RustCallStatus callStatus; 211 + } UniffiForeignFutureStructI32; 212 + 213 + #endif 214 + #ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_I32 215 + #define UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_I32 216 + typedef void (*UniffiForeignFutureCompleteI32)(uint64_t callback_data, UniffiForeignFutureStructI32 result); 217 + 218 + // Making function static works arround: 219 + // https://github.com/golang/go/issues/11263 220 + static void call_UniffiForeignFutureCompleteI32( 221 + UniffiForeignFutureCompleteI32 cb, uint64_t callback_data, UniffiForeignFutureStructI32 result) 222 + { 223 + return cb(callback_data, result); 224 + } 225 + 226 + 227 + #endif 228 + #ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_U64 229 + #define UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_U64 230 + typedef struct UniffiForeignFutureStructU64 { 231 + uint64_t returnValue; 232 + RustCallStatus callStatus; 233 + } UniffiForeignFutureStructU64; 234 + 235 + #endif 236 + #ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_U64 237 + #define UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_U64 238 + typedef void (*UniffiForeignFutureCompleteU64)(uint64_t callback_data, UniffiForeignFutureStructU64 result); 239 + 240 + // Making function static works arround: 241 + // https://github.com/golang/go/issues/11263 242 + static void call_UniffiForeignFutureCompleteU64( 243 + UniffiForeignFutureCompleteU64 cb, uint64_t callback_data, UniffiForeignFutureStructU64 result) 244 + { 245 + return cb(callback_data, result); 246 + } 247 + 248 + 249 + #endif 250 + #ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_I64 251 + #define UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_I64 252 + typedef struct UniffiForeignFutureStructI64 { 253 + int64_t returnValue; 254 + RustCallStatus callStatus; 255 + } UniffiForeignFutureStructI64; 256 + 257 + #endif 258 + #ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_I64 259 + #define UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_I64 260 + typedef void (*UniffiForeignFutureCompleteI64)(uint64_t callback_data, UniffiForeignFutureStructI64 result); 261 + 262 + // Making function static works arround: 263 + // https://github.com/golang/go/issues/11263 264 + static void call_UniffiForeignFutureCompleteI64( 265 + UniffiForeignFutureCompleteI64 cb, uint64_t callback_data, UniffiForeignFutureStructI64 result) 266 + { 267 + return cb(callback_data, result); 268 + } 269 + 270 + 271 + #endif 272 + #ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_F32 273 + #define UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_F32 274 + typedef struct UniffiForeignFutureStructF32 { 275 + float returnValue; 276 + RustCallStatus callStatus; 277 + } UniffiForeignFutureStructF32; 278 + 279 + #endif 280 + #ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_F32 281 + #define UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_F32 282 + typedef void (*UniffiForeignFutureCompleteF32)(uint64_t callback_data, UniffiForeignFutureStructF32 result); 283 + 284 + // Making function static works arround: 285 + // https://github.com/golang/go/issues/11263 286 + static void call_UniffiForeignFutureCompleteF32( 287 + UniffiForeignFutureCompleteF32 cb, uint64_t callback_data, UniffiForeignFutureStructF32 result) 288 + { 289 + return cb(callback_data, result); 290 + } 291 + 292 + 293 + #endif 294 + #ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_F64 295 + #define UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_F64 296 + typedef struct UniffiForeignFutureStructF64 { 297 + double returnValue; 298 + RustCallStatus callStatus; 299 + } UniffiForeignFutureStructF64; 300 + 301 + #endif 302 + #ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_F64 303 + #define UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_F64 304 + typedef void (*UniffiForeignFutureCompleteF64)(uint64_t callback_data, UniffiForeignFutureStructF64 result); 305 + 306 + // Making function static works arround: 307 + // https://github.com/golang/go/issues/11263 308 + static void call_UniffiForeignFutureCompleteF64( 309 + UniffiForeignFutureCompleteF64 cb, uint64_t callback_data, UniffiForeignFutureStructF64 result) 310 + { 311 + return cb(callback_data, result); 312 + } 313 + 314 + 315 + #endif 316 + #ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_POINTER 317 + #define UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_POINTER 318 + typedef struct UniffiForeignFutureStructPointer { 319 + void* returnValue; 320 + RustCallStatus callStatus; 321 + } UniffiForeignFutureStructPointer; 322 + 323 + #endif 324 + #ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_POINTER 325 + #define UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_POINTER 326 + typedef void (*UniffiForeignFutureCompletePointer)(uint64_t callback_data, UniffiForeignFutureStructPointer result); 327 + 328 + // Making function static works arround: 329 + // https://github.com/golang/go/issues/11263 330 + static void call_UniffiForeignFutureCompletePointer( 331 + UniffiForeignFutureCompletePointer cb, uint64_t callback_data, UniffiForeignFutureStructPointer result) 332 + { 333 + return cb(callback_data, result); 334 + } 335 + 336 + 337 + #endif 338 + #ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_RUST_BUFFER 339 + #define UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_RUST_BUFFER 340 + typedef struct UniffiForeignFutureStructRustBuffer { 341 + RustBuffer returnValue; 342 + RustCallStatus callStatus; 343 + } UniffiForeignFutureStructRustBuffer; 344 + 345 + #endif 346 + #ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_RUST_BUFFER 347 + #define UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_RUST_BUFFER 348 + typedef void (*UniffiForeignFutureCompleteRustBuffer)(uint64_t callback_data, UniffiForeignFutureStructRustBuffer result); 349 + 350 + // Making function static works arround: 351 + // https://github.com/golang/go/issues/11263 352 + static void call_UniffiForeignFutureCompleteRustBuffer( 353 + UniffiForeignFutureCompleteRustBuffer cb, uint64_t callback_data, UniffiForeignFutureStructRustBuffer result) 354 + { 355 + return cb(callback_data, result); 356 + } 357 + 358 + 359 + #endif 360 + #ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_VOID 361 + #define UNIFFI_FFIDEF_FOREIGN_FUTURE_STRUCT_VOID 362 + typedef struct UniffiForeignFutureStructVoid { 363 + RustCallStatus callStatus; 364 + } UniffiForeignFutureStructVoid; 365 + 366 + #endif 367 + #ifndef UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_VOID 368 + #define UNIFFI_FFIDEF_FOREIGN_FUTURE_COMPLETE_VOID 369 + typedef void (*UniffiForeignFutureCompleteVoid)(uint64_t callback_data, UniffiForeignFutureStructVoid result); 370 + 371 + // Making function static works arround: 372 + // https://github.com/golang/go/issues/11263 373 + static void call_UniffiForeignFutureCompleteVoid( 374 + UniffiForeignFutureCompleteVoid cb, uint64_t callback_data, UniffiForeignFutureStructVoid result) 375 + { 376 + return cb(callback_data, result); 377 + } 378 + 379 + 380 + #endif 381 + #ifndef UNIFFI_FFIDEF_CALLBACK_INTERFACE_DATA_HANDLER_METHOD0 382 + #define UNIFFI_FFIDEF_CALLBACK_INTERFACE_DATA_HANDLER_METHOD0 383 + typedef void (*UniffiCallbackInterfaceDataHandlerMethod0)(uint64_t uniffi_handle, void* peer, RustBuffer data, UniffiForeignFutureCompleteVoid uniffi_future_callback, uint64_t uniffi_callback_data, UniffiForeignFuture* uniffi_out_return); 384 + 385 + // Making function static works arround: 386 + // https://github.com/golang/go/issues/11263 387 + static void call_UniffiCallbackInterfaceDataHandlerMethod0( 388 + UniffiCallbackInterfaceDataHandlerMethod0 cb, uint64_t uniffi_handle, void* peer, RustBuffer data, UniffiForeignFutureCompleteVoid uniffi_future_callback, uint64_t uniffi_callback_data, UniffiForeignFuture* uniffi_out_return) 389 + { 390 + return cb(uniffi_handle, peer, data, uniffi_future_callback, uniffi_callback_data, uniffi_out_return); 391 + } 392 + 393 + 394 + #endif 395 + #ifndef UNIFFI_FFIDEF_V_TABLE_CALLBACK_INTERFACE_DATA_HANDLER 396 + #define UNIFFI_FFIDEF_V_TABLE_CALLBACK_INTERFACE_DATA_HANDLER 397 + typedef struct UniffiVTableCallbackInterfaceDataHandler { 398 + UniffiCallbackInterfaceDataHandlerMethod0 handleData; 399 + UniffiCallbackInterfaceFree uniffiFree; 400 + } UniffiVTableCallbackInterfaceDataHandler; 401 + 402 + #endif 403 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_CLONE_DATAHANDLER 404 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_CLONE_DATAHANDLER 405 + void* uniffi_iroh_streamplace_fn_clone_datahandler(void* ptr, RustCallStatus *out_status 406 + ); 407 + #endif 408 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_FREE_DATAHANDLER 409 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_FREE_DATAHANDLER 410 + void uniffi_iroh_streamplace_fn_free_datahandler(void* ptr, RustCallStatus *out_status 411 + ); 412 + #endif 413 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_INIT_CALLBACK_VTABLE_DATAHANDLER 414 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_INIT_CALLBACK_VTABLE_DATAHANDLER 415 + void uniffi_iroh_streamplace_fn_init_callback_vtable_datahandler(UniffiVTableCallbackInterfaceDataHandler* vtable 416 + ); 417 + #endif 418 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_METHOD_DATAHANDLER_HANDLE_DATA 419 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_METHOD_DATAHANDLER_HANDLE_DATA 420 + uint64_t uniffi_iroh_streamplace_fn_method_datahandler_handle_data(void* ptr, void* peer, RustBuffer data 421 + ); 422 + #endif 423 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_CLONE_ENDPOINT 424 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_CLONE_ENDPOINT 425 + void* uniffi_iroh_streamplace_fn_clone_endpoint(void* ptr, RustCallStatus *out_status 426 + ); 427 + #endif 428 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_FREE_ENDPOINT 429 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_FREE_ENDPOINT 430 + void uniffi_iroh_streamplace_fn_free_endpoint(void* ptr, RustCallStatus *out_status 431 + ); 432 + #endif 433 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_CONSTRUCTOR_ENDPOINT_NEW 434 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_CONSTRUCTOR_ENDPOINT_NEW 435 + uint64_t uniffi_iroh_streamplace_fn_constructor_endpoint_new(void 436 + 437 + ); 438 + #endif 439 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_METHOD_ENDPOINT_NODE_ADDR 440 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_METHOD_ENDPOINT_NODE_ADDR 441 + uint64_t uniffi_iroh_streamplace_fn_method_endpoint_node_addr(void* ptr 442 + ); 443 + #endif 444 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_CLONE_NODEADDR 445 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_CLONE_NODEADDR 446 + void* uniffi_iroh_streamplace_fn_clone_nodeaddr(void* ptr, RustCallStatus *out_status 447 + ); 448 + #endif 449 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_FREE_NODEADDR 450 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_FREE_NODEADDR 451 + void uniffi_iroh_streamplace_fn_free_nodeaddr(void* ptr, RustCallStatus *out_status 452 + ); 453 + #endif 454 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_CONSTRUCTOR_NODEADDR_NEW 455 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_CONSTRUCTOR_NODEADDR_NEW 456 + void* uniffi_iroh_streamplace_fn_constructor_nodeaddr_new(void* node_id, RustBuffer derp_url, RustBuffer addresses, RustCallStatus *out_status 457 + ); 458 + #endif 459 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_METHOD_NODEADDR_DIRECT_ADDRESSES 460 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_METHOD_NODEADDR_DIRECT_ADDRESSES 461 + RustBuffer uniffi_iroh_streamplace_fn_method_nodeaddr_direct_addresses(void* ptr, RustCallStatus *out_status 462 + ); 463 + #endif 464 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_METHOD_NODEADDR_EQUAL 465 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_METHOD_NODEADDR_EQUAL 466 + int8_t uniffi_iroh_streamplace_fn_method_nodeaddr_equal(void* ptr, void* other, RustCallStatus *out_status 467 + ); 468 + #endif 469 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_METHOD_NODEADDR_NODE_ID 470 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_METHOD_NODEADDR_NODE_ID 471 + void* uniffi_iroh_streamplace_fn_method_nodeaddr_node_id(void* ptr, RustCallStatus *out_status 472 + ); 473 + #endif 474 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_METHOD_NODEADDR_RELAY_URL 475 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_METHOD_NODEADDR_RELAY_URL 476 + RustBuffer uniffi_iroh_streamplace_fn_method_nodeaddr_relay_url(void* ptr, RustCallStatus *out_status 477 + ); 478 + #endif 479 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_CLONE_PUBLICKEY 480 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_CLONE_PUBLICKEY 481 + void* uniffi_iroh_streamplace_fn_clone_publickey(void* ptr, RustCallStatus *out_status 482 + ); 483 + #endif 484 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_FREE_PUBLICKEY 485 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_FREE_PUBLICKEY 486 + void uniffi_iroh_streamplace_fn_free_publickey(void* ptr, RustCallStatus *out_status 487 + ); 488 + #endif 489 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_CONSTRUCTOR_PUBLICKEY_FROM_BYTES 490 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_CONSTRUCTOR_PUBLICKEY_FROM_BYTES 491 + void* uniffi_iroh_streamplace_fn_constructor_publickey_from_bytes(RustBuffer bytes, RustCallStatus *out_status 492 + ); 493 + #endif 494 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_CONSTRUCTOR_PUBLICKEY_FROM_STRING 495 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_CONSTRUCTOR_PUBLICKEY_FROM_STRING 496 + void* uniffi_iroh_streamplace_fn_constructor_publickey_from_string(RustBuffer s, RustCallStatus *out_status 497 + ); 498 + #endif 499 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_METHOD_PUBLICKEY_EQUAL 500 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_METHOD_PUBLICKEY_EQUAL 501 + int8_t uniffi_iroh_streamplace_fn_method_publickey_equal(void* ptr, void* other, RustCallStatus *out_status 502 + ); 503 + #endif 504 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_METHOD_PUBLICKEY_FMT_SHORT 505 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_METHOD_PUBLICKEY_FMT_SHORT 506 + RustBuffer uniffi_iroh_streamplace_fn_method_publickey_fmt_short(void* ptr, RustCallStatus *out_status 507 + ); 508 + #endif 509 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_METHOD_PUBLICKEY_TO_BYTES 510 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_METHOD_PUBLICKEY_TO_BYTES 511 + RustBuffer uniffi_iroh_streamplace_fn_method_publickey_to_bytes(void* ptr, RustCallStatus *out_status 512 + ); 513 + #endif 514 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_METHOD_PUBLICKEY_UNIFFI_TRAIT_DISPLAY 515 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_METHOD_PUBLICKEY_UNIFFI_TRAIT_DISPLAY 516 + RustBuffer uniffi_iroh_streamplace_fn_method_publickey_uniffi_trait_display(void* ptr, RustCallStatus *out_status 517 + ); 518 + #endif 519 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_CLONE_RECEIVER 520 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_CLONE_RECEIVER 521 + void* uniffi_iroh_streamplace_fn_clone_receiver(void* ptr, RustCallStatus *out_status 522 + ); 523 + #endif 524 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_FREE_RECEIVER 525 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_FREE_RECEIVER 526 + void uniffi_iroh_streamplace_fn_free_receiver(void* ptr, RustCallStatus *out_status 527 + ); 528 + #endif 529 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_CONSTRUCTOR_RECEIVER_NEW 530 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_CONSTRUCTOR_RECEIVER_NEW 531 + uint64_t uniffi_iroh_streamplace_fn_constructor_receiver_new(void* endpoint, void* handler 532 + ); 533 + #endif 534 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_METHOD_RECEIVER_NODE_ADDR 535 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_METHOD_RECEIVER_NODE_ADDR 536 + uint64_t uniffi_iroh_streamplace_fn_method_receiver_node_addr(void* ptr 537 + ); 538 + #endif 539 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_CLONE_SENDER 540 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_CLONE_SENDER 541 + void* uniffi_iroh_streamplace_fn_clone_sender(void* ptr, RustCallStatus *out_status 542 + ); 543 + #endif 544 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_FREE_SENDER 545 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_FREE_SENDER 546 + void uniffi_iroh_streamplace_fn_free_sender(void* ptr, RustCallStatus *out_status 547 + ); 548 + #endif 549 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_CONSTRUCTOR_SENDER_NEW 550 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_CONSTRUCTOR_SENDER_NEW 551 + uint64_t uniffi_iroh_streamplace_fn_constructor_sender_new(void* endpoint 552 + ); 553 + #endif 554 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_METHOD_SENDER_ADD_PEER 555 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_METHOD_SENDER_ADD_PEER 556 + uint64_t uniffi_iroh_streamplace_fn_method_sender_add_peer(void* ptr, void* addr 557 + ); 558 + #endif 559 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_METHOD_SENDER_NODE_ADDR 560 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_METHOD_SENDER_NODE_ADDR 561 + uint64_t uniffi_iroh_streamplace_fn_method_sender_node_addr(void* ptr 562 + ); 563 + #endif 564 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_METHOD_SENDER_SEND 565 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_FN_METHOD_SENDER_SEND 566 + uint64_t uniffi_iroh_streamplace_fn_method_sender_send(void* ptr, void* node_id, RustBuffer data 567 + ); 568 + #endif 569 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUSTBUFFER_ALLOC 570 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUSTBUFFER_ALLOC 571 + RustBuffer ffi_iroh_streamplace_rustbuffer_alloc(uint64_t size, RustCallStatus *out_status 572 + ); 573 + #endif 574 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUSTBUFFER_FROM_BYTES 575 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUSTBUFFER_FROM_BYTES 576 + RustBuffer ffi_iroh_streamplace_rustbuffer_from_bytes(ForeignBytes bytes, RustCallStatus *out_status 577 + ); 578 + #endif 579 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUSTBUFFER_FREE 580 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUSTBUFFER_FREE 581 + void ffi_iroh_streamplace_rustbuffer_free(RustBuffer buf, RustCallStatus *out_status 582 + ); 583 + #endif 584 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUSTBUFFER_RESERVE 585 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUSTBUFFER_RESERVE 586 + RustBuffer ffi_iroh_streamplace_rustbuffer_reserve(RustBuffer buf, uint64_t additional, RustCallStatus *out_status 587 + ); 588 + #endif 589 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_POLL_U8 590 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_POLL_U8 591 + void ffi_iroh_streamplace_rust_future_poll_u8(uint64_t handle, UniffiRustFutureContinuationCallback callback, uint64_t callback_data 592 + ); 593 + #endif 594 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_CANCEL_U8 595 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_CANCEL_U8 596 + void ffi_iroh_streamplace_rust_future_cancel_u8(uint64_t handle 597 + ); 598 + #endif 599 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_FREE_U8 600 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_FREE_U8 601 + void ffi_iroh_streamplace_rust_future_free_u8(uint64_t handle 602 + ); 603 + #endif 604 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_COMPLETE_U8 605 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_COMPLETE_U8 606 + uint8_t ffi_iroh_streamplace_rust_future_complete_u8(uint64_t handle, RustCallStatus *out_status 607 + ); 608 + #endif 609 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_POLL_I8 610 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_POLL_I8 611 + void ffi_iroh_streamplace_rust_future_poll_i8(uint64_t handle, UniffiRustFutureContinuationCallback callback, uint64_t callback_data 612 + ); 613 + #endif 614 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_CANCEL_I8 615 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_CANCEL_I8 616 + void ffi_iroh_streamplace_rust_future_cancel_i8(uint64_t handle 617 + ); 618 + #endif 619 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_FREE_I8 620 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_FREE_I8 621 + void ffi_iroh_streamplace_rust_future_free_i8(uint64_t handle 622 + ); 623 + #endif 624 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_COMPLETE_I8 625 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_COMPLETE_I8 626 + int8_t ffi_iroh_streamplace_rust_future_complete_i8(uint64_t handle, RustCallStatus *out_status 627 + ); 628 + #endif 629 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_POLL_U16 630 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_POLL_U16 631 + void ffi_iroh_streamplace_rust_future_poll_u16(uint64_t handle, UniffiRustFutureContinuationCallback callback, uint64_t callback_data 632 + ); 633 + #endif 634 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_CANCEL_U16 635 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_CANCEL_U16 636 + void ffi_iroh_streamplace_rust_future_cancel_u16(uint64_t handle 637 + ); 638 + #endif 639 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_FREE_U16 640 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_FREE_U16 641 + void ffi_iroh_streamplace_rust_future_free_u16(uint64_t handle 642 + ); 643 + #endif 644 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_COMPLETE_U16 645 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_COMPLETE_U16 646 + uint16_t ffi_iroh_streamplace_rust_future_complete_u16(uint64_t handle, RustCallStatus *out_status 647 + ); 648 + #endif 649 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_POLL_I16 650 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_POLL_I16 651 + void ffi_iroh_streamplace_rust_future_poll_i16(uint64_t handle, UniffiRustFutureContinuationCallback callback, uint64_t callback_data 652 + ); 653 + #endif 654 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_CANCEL_I16 655 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_CANCEL_I16 656 + void ffi_iroh_streamplace_rust_future_cancel_i16(uint64_t handle 657 + ); 658 + #endif 659 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_FREE_I16 660 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_FREE_I16 661 + void ffi_iroh_streamplace_rust_future_free_i16(uint64_t handle 662 + ); 663 + #endif 664 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_COMPLETE_I16 665 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_COMPLETE_I16 666 + int16_t ffi_iroh_streamplace_rust_future_complete_i16(uint64_t handle, RustCallStatus *out_status 667 + ); 668 + #endif 669 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_POLL_U32 670 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_POLL_U32 671 + void ffi_iroh_streamplace_rust_future_poll_u32(uint64_t handle, UniffiRustFutureContinuationCallback callback, uint64_t callback_data 672 + ); 673 + #endif 674 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_CANCEL_U32 675 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_CANCEL_U32 676 + void ffi_iroh_streamplace_rust_future_cancel_u32(uint64_t handle 677 + ); 678 + #endif 679 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_FREE_U32 680 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_FREE_U32 681 + void ffi_iroh_streamplace_rust_future_free_u32(uint64_t handle 682 + ); 683 + #endif 684 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_COMPLETE_U32 685 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_COMPLETE_U32 686 + uint32_t ffi_iroh_streamplace_rust_future_complete_u32(uint64_t handle, RustCallStatus *out_status 687 + ); 688 + #endif 689 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_POLL_I32 690 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_POLL_I32 691 + void ffi_iroh_streamplace_rust_future_poll_i32(uint64_t handle, UniffiRustFutureContinuationCallback callback, uint64_t callback_data 692 + ); 693 + #endif 694 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_CANCEL_I32 695 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_CANCEL_I32 696 + void ffi_iroh_streamplace_rust_future_cancel_i32(uint64_t handle 697 + ); 698 + #endif 699 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_FREE_I32 700 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_FREE_I32 701 + void ffi_iroh_streamplace_rust_future_free_i32(uint64_t handle 702 + ); 703 + #endif 704 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_COMPLETE_I32 705 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_COMPLETE_I32 706 + int32_t ffi_iroh_streamplace_rust_future_complete_i32(uint64_t handle, RustCallStatus *out_status 707 + ); 708 + #endif 709 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_POLL_U64 710 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_POLL_U64 711 + void ffi_iroh_streamplace_rust_future_poll_u64(uint64_t handle, UniffiRustFutureContinuationCallback callback, uint64_t callback_data 712 + ); 713 + #endif 714 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_CANCEL_U64 715 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_CANCEL_U64 716 + void ffi_iroh_streamplace_rust_future_cancel_u64(uint64_t handle 717 + ); 718 + #endif 719 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_FREE_U64 720 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_FREE_U64 721 + void ffi_iroh_streamplace_rust_future_free_u64(uint64_t handle 722 + ); 723 + #endif 724 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_COMPLETE_U64 725 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_COMPLETE_U64 726 + uint64_t ffi_iroh_streamplace_rust_future_complete_u64(uint64_t handle, RustCallStatus *out_status 727 + ); 728 + #endif 729 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_POLL_I64 730 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_POLL_I64 731 + void ffi_iroh_streamplace_rust_future_poll_i64(uint64_t handle, UniffiRustFutureContinuationCallback callback, uint64_t callback_data 732 + ); 733 + #endif 734 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_CANCEL_I64 735 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_CANCEL_I64 736 + void ffi_iroh_streamplace_rust_future_cancel_i64(uint64_t handle 737 + ); 738 + #endif 739 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_FREE_I64 740 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_FREE_I64 741 + void ffi_iroh_streamplace_rust_future_free_i64(uint64_t handle 742 + ); 743 + #endif 744 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_COMPLETE_I64 745 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_COMPLETE_I64 746 + int64_t ffi_iroh_streamplace_rust_future_complete_i64(uint64_t handle, RustCallStatus *out_status 747 + ); 748 + #endif 749 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_POLL_F32 750 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_POLL_F32 751 + void ffi_iroh_streamplace_rust_future_poll_f32(uint64_t handle, UniffiRustFutureContinuationCallback callback, uint64_t callback_data 752 + ); 753 + #endif 754 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_CANCEL_F32 755 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_CANCEL_F32 756 + void ffi_iroh_streamplace_rust_future_cancel_f32(uint64_t handle 757 + ); 758 + #endif 759 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_FREE_F32 760 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_FREE_F32 761 + void ffi_iroh_streamplace_rust_future_free_f32(uint64_t handle 762 + ); 763 + #endif 764 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_COMPLETE_F32 765 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_COMPLETE_F32 766 + float ffi_iroh_streamplace_rust_future_complete_f32(uint64_t handle, RustCallStatus *out_status 767 + ); 768 + #endif 769 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_POLL_F64 770 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_POLL_F64 771 + void ffi_iroh_streamplace_rust_future_poll_f64(uint64_t handle, UniffiRustFutureContinuationCallback callback, uint64_t callback_data 772 + ); 773 + #endif 774 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_CANCEL_F64 775 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_CANCEL_F64 776 + void ffi_iroh_streamplace_rust_future_cancel_f64(uint64_t handle 777 + ); 778 + #endif 779 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_FREE_F64 780 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_FREE_F64 781 + void ffi_iroh_streamplace_rust_future_free_f64(uint64_t handle 782 + ); 783 + #endif 784 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_COMPLETE_F64 785 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_COMPLETE_F64 786 + double ffi_iroh_streamplace_rust_future_complete_f64(uint64_t handle, RustCallStatus *out_status 787 + ); 788 + #endif 789 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_POLL_POINTER 790 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_POLL_POINTER 791 + void ffi_iroh_streamplace_rust_future_poll_pointer(uint64_t handle, UniffiRustFutureContinuationCallback callback, uint64_t callback_data 792 + ); 793 + #endif 794 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_CANCEL_POINTER 795 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_CANCEL_POINTER 796 + void ffi_iroh_streamplace_rust_future_cancel_pointer(uint64_t handle 797 + ); 798 + #endif 799 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_FREE_POINTER 800 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_FREE_POINTER 801 + void ffi_iroh_streamplace_rust_future_free_pointer(uint64_t handle 802 + ); 803 + #endif 804 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_COMPLETE_POINTER 805 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_COMPLETE_POINTER 806 + void* ffi_iroh_streamplace_rust_future_complete_pointer(uint64_t handle, RustCallStatus *out_status 807 + ); 808 + #endif 809 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_POLL_RUST_BUFFER 810 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_POLL_RUST_BUFFER 811 + void ffi_iroh_streamplace_rust_future_poll_rust_buffer(uint64_t handle, UniffiRustFutureContinuationCallback callback, uint64_t callback_data 812 + ); 813 + #endif 814 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_CANCEL_RUST_BUFFER 815 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_CANCEL_RUST_BUFFER 816 + void ffi_iroh_streamplace_rust_future_cancel_rust_buffer(uint64_t handle 817 + ); 818 + #endif 819 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_FREE_RUST_BUFFER 820 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_FREE_RUST_BUFFER 821 + void ffi_iroh_streamplace_rust_future_free_rust_buffer(uint64_t handle 822 + ); 823 + #endif 824 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_COMPLETE_RUST_BUFFER 825 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_COMPLETE_RUST_BUFFER 826 + RustBuffer ffi_iroh_streamplace_rust_future_complete_rust_buffer(uint64_t handle, RustCallStatus *out_status 827 + ); 828 + #endif 829 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_POLL_VOID 830 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_POLL_VOID 831 + void ffi_iroh_streamplace_rust_future_poll_void(uint64_t handle, UniffiRustFutureContinuationCallback callback, uint64_t callback_data 832 + ); 833 + #endif 834 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_CANCEL_VOID 835 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_CANCEL_VOID 836 + void ffi_iroh_streamplace_rust_future_cancel_void(uint64_t handle 837 + ); 838 + #endif 839 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_FREE_VOID 840 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_FREE_VOID 841 + void ffi_iroh_streamplace_rust_future_free_void(uint64_t handle 842 + ); 843 + #endif 844 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_COMPLETE_VOID 845 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_RUST_FUTURE_COMPLETE_VOID 846 + void ffi_iroh_streamplace_rust_future_complete_void(uint64_t handle, RustCallStatus *out_status 847 + ); 848 + #endif 849 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_METHOD_DATAHANDLER_HANDLE_DATA 850 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_METHOD_DATAHANDLER_HANDLE_DATA 851 + uint16_t uniffi_iroh_streamplace_checksum_method_datahandler_handle_data(void 852 + 853 + ); 854 + #endif 855 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_METHOD_ENDPOINT_NODE_ADDR 856 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_METHOD_ENDPOINT_NODE_ADDR 857 + uint16_t uniffi_iroh_streamplace_checksum_method_endpoint_node_addr(void 858 + 859 + ); 860 + #endif 861 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_METHOD_NODEADDR_DIRECT_ADDRESSES 862 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_METHOD_NODEADDR_DIRECT_ADDRESSES 863 + uint16_t uniffi_iroh_streamplace_checksum_method_nodeaddr_direct_addresses(void 864 + 865 + ); 866 + #endif 867 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_METHOD_NODEADDR_EQUAL 868 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_METHOD_NODEADDR_EQUAL 869 + uint16_t uniffi_iroh_streamplace_checksum_method_nodeaddr_equal(void 870 + 871 + ); 872 + #endif 873 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_METHOD_NODEADDR_NODE_ID 874 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_METHOD_NODEADDR_NODE_ID 875 + uint16_t uniffi_iroh_streamplace_checksum_method_nodeaddr_node_id(void 876 + 877 + ); 878 + #endif 879 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_METHOD_NODEADDR_RELAY_URL 880 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_METHOD_NODEADDR_RELAY_URL 881 + uint16_t uniffi_iroh_streamplace_checksum_method_nodeaddr_relay_url(void 882 + 883 + ); 884 + #endif 885 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_METHOD_PUBLICKEY_EQUAL 886 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_METHOD_PUBLICKEY_EQUAL 887 + uint16_t uniffi_iroh_streamplace_checksum_method_publickey_equal(void 888 + 889 + ); 890 + #endif 891 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_METHOD_PUBLICKEY_FMT_SHORT 892 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_METHOD_PUBLICKEY_FMT_SHORT 893 + uint16_t uniffi_iroh_streamplace_checksum_method_publickey_fmt_short(void 894 + 895 + ); 896 + #endif 897 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_METHOD_PUBLICKEY_TO_BYTES 898 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_METHOD_PUBLICKEY_TO_BYTES 899 + uint16_t uniffi_iroh_streamplace_checksum_method_publickey_to_bytes(void 900 + 901 + ); 902 + #endif 903 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_METHOD_RECEIVER_NODE_ADDR 904 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_METHOD_RECEIVER_NODE_ADDR 905 + uint16_t uniffi_iroh_streamplace_checksum_method_receiver_node_addr(void 906 + 907 + ); 908 + #endif 909 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_METHOD_SENDER_ADD_PEER 910 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_METHOD_SENDER_ADD_PEER 911 + uint16_t uniffi_iroh_streamplace_checksum_method_sender_add_peer(void 912 + 913 + ); 914 + #endif 915 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_METHOD_SENDER_NODE_ADDR 916 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_METHOD_SENDER_NODE_ADDR 917 + uint16_t uniffi_iroh_streamplace_checksum_method_sender_node_addr(void 918 + 919 + ); 920 + #endif 921 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_METHOD_SENDER_SEND 922 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_METHOD_SENDER_SEND 923 + uint16_t uniffi_iroh_streamplace_checksum_method_sender_send(void 924 + 925 + ); 926 + #endif 927 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_CONSTRUCTOR_ENDPOINT_NEW 928 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_CONSTRUCTOR_ENDPOINT_NEW 929 + uint16_t uniffi_iroh_streamplace_checksum_constructor_endpoint_new(void 930 + 931 + ); 932 + #endif 933 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_CONSTRUCTOR_NODEADDR_NEW 934 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_CONSTRUCTOR_NODEADDR_NEW 935 + uint16_t uniffi_iroh_streamplace_checksum_constructor_nodeaddr_new(void 936 + 937 + ); 938 + #endif 939 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_CONSTRUCTOR_PUBLICKEY_FROM_BYTES 940 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_CONSTRUCTOR_PUBLICKEY_FROM_BYTES 941 + uint16_t uniffi_iroh_streamplace_checksum_constructor_publickey_from_bytes(void 942 + 943 + ); 944 + #endif 945 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_CONSTRUCTOR_PUBLICKEY_FROM_STRING 946 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_CONSTRUCTOR_PUBLICKEY_FROM_STRING 947 + uint16_t uniffi_iroh_streamplace_checksum_constructor_publickey_from_string(void 948 + 949 + ); 950 + #endif 951 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_CONSTRUCTOR_RECEIVER_NEW 952 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_CONSTRUCTOR_RECEIVER_NEW 953 + uint16_t uniffi_iroh_streamplace_checksum_constructor_receiver_new(void 954 + 955 + ); 956 + #endif 957 + #ifndef UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_CONSTRUCTOR_SENDER_NEW 958 + #define UNIFFI_FFIDEF_UNIFFI_IROH_STREAMPLACE_CHECKSUM_CONSTRUCTOR_SENDER_NEW 959 + uint16_t uniffi_iroh_streamplace_checksum_constructor_sender_new(void 960 + 961 + ); 962 + #endif 963 + #ifndef UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_UNIFFI_CONTRACT_VERSION 964 + #define UNIFFI_FFIDEF_FFI_IROH_STREAMPLACE_UNIFFI_CONTRACT_VERSION 965 + uint32_t ffi_iroh_streamplace_uniffi_contract_version(void 966 + 967 + ); 968 + #endif 969 + 970 + void iroh_streamplace_cgo_dispatchCallbackInterfaceDataHandlerMethod0(uint64_t uniffi_handle, void* peer, RustBuffer data, UniffiForeignFutureCompleteVoid uniffi_future_callback, uint64_t uniffi_callback_data, UniffiForeignFuture* uniffi_out_return); 971 + void iroh_streamplace_cgo_dispatchCallbackInterfaceDataHandlerFree(uint64_t handle); 972 + 973 + void iroh_streamplace_uniffiFutureContinuationCallback(uint64_t, int8_t); 974 + void iroh_streamplace_uniffiFreeGorutine(uint64_t);
+9
rust/iroh-streamplace/pkg/iroh_streamplace/iroh_streamplace.go
··· 1 + package iroh_streamplace 2 + 3 + import ( 4 + _ "github.com/n0-computer/iroh-streamplace/pkg/iroh_streamplace/generated/iroh_streamplace" 5 + ) 6 + 7 + // #cgo LDFLAGS: -L../../target/release -liroh_streamplace -lm 8 + // #cgo darwin LDFLAGS: -framework Security -framework SystemConfiguration 9 + import "C"
+51
rust/iroh-streamplace/pkg/iroh_streamplace/iroh_streamplace_test.go
··· 1 + package iroh_streamplace 2 + 3 + import ( 4 + "testing" 5 + 6 + "github.com/stretchr/testify/assert" 7 + 8 + iroh "github.com/n0-computer/iroh-streamplace/pkg/iroh_streamplace/generated/iroh_streamplace" 9 + ) 10 + 11 + type TestHandler struct { 12 + messages chan []byte 13 + } 14 + 15 + func (handler TestHandler) HandleData(node *iroh.PublicKey, data []byte) { 16 + handler.messages <- data 17 + } 18 + 19 + func TestBasicRoundtrip(t *testing.T) { 20 + ep1, err := iroh.NewEndpoint() 21 + assert.Nil(t, err) 22 + sender, err := iroh.NewSender(ep1) 23 + assert.Nil(t, err) 24 + 25 + messages := make(chan []byte, 5) 26 + handler := TestHandler{messages: messages} 27 + 28 + ep2, err := iroh.NewEndpoint() 29 + assert.Nil(t, err) 30 + receiver, err := iroh.NewReceiver(ep2, &handler) 31 + assert.Nil(t, err) 32 + 33 + receiverAddr := receiver.NodeAddr() 34 + receiverId := receiverAddr.NodeId() 35 + 36 + // add peer 37 + err = sender.AddPeer(receiverAddr) 38 + assert.Nil(t, err) 39 + 40 + // send a few messages 41 + for i := range 5 { 42 + err = sender.Send(receiverId, []byte{byte(i), 0, 0, 0}) 43 + assert.Nil(t, err) 44 + } 45 + 46 + // make sure the receiver got them 47 + for i := range 5 { 48 + msg := <-messages 49 + assert.Equal(t, msg, []byte{byte(i), 0, 0, 0}) 50 + } 51 + }
+33
rust/iroh-streamplace/src/endpoint.rs
··· 1 + use iroh::Watcher; 2 + 3 + use crate::ALPN; 4 + use crate::error::Error; 5 + use crate::utils::NodeAddr; 6 + 7 + #[derive(uniffi::Object, Debug, Clone)] 8 + pub struct Endpoint { 9 + pub(crate) endpoint: iroh::Endpoint, 10 + } 11 + 12 + #[uniffi::export] 13 + impl Endpoint { 14 + /// Create a new endpoint. 15 + #[uniffi::constructor(async_runtime = "tokio")] 16 + pub async fn new() -> Result<Self, Error> { 17 + let endpoint = iroh::Endpoint::builder() 18 + .discovery_n0() 19 + .discovery_local_network() 20 + .alpns(vec![ALPN.to_vec()]) 21 + .bind() 22 + .await?; 23 + 24 + Ok(Self { endpoint }) 25 + } 26 + 27 + #[uniffi::method(async_runtime = "tokio")] 28 + pub async fn node_addr(&self) -> NodeAddr { 29 + let _ = self.endpoint.home_relay().initialized().await; 30 + let addr = self.endpoint.node_addr().initialized().await; 31 + addr.into() 32 + } 33 + }
+26
rust/iroh-streamplace/src/error.rs
··· 1 + /// An Error. 2 + #[derive(Debug, snafu::Snafu, uniffi::Error)] 3 + #[uniffi(flat_error)] 4 + #[snafu(visibility(pub(crate)))] 5 + pub enum Error { 6 + #[snafu(display("Bind failure"), context(false))] 7 + IrohBind { source: iroh::endpoint::BindError }, 8 + #[snafu(display("Invalid URL"), context(false))] 9 + InvalidUrl { source: url::ParseError }, 10 + #[snafu(display("Failed to connect"), context(false))] 11 + IrohConnect { 12 + source: iroh::endpoint::ConnectError, 13 + }, 14 + #[snafu(display("Invalid network address"), context(false))] 15 + InvalidNetworkAddress { source: std::net::AddrParseError }, 16 + #[snafu(display("Failed to open stream"))] 17 + OpenStream { source: anyhow::Error }, 18 + #[snafu(display("Failed to send message"))] 19 + SendMessage { source: imsg::StreamError }, 20 + #[snafu(display("Failed to create connection"))] 21 + NewConnection { source: anyhow::Error }, 22 + #[snafu(display("No connection available"))] 23 + MissingConnection, 24 + #[snafu(display("Invalid public key"))] 25 + InvalidPublicKey, 26 + }
+108
rust/iroh-streamplace/src/key.rs
··· 1 + use std::str::FromStr; 2 + 3 + use crate::error::{Error, InvalidPublicKeySnafu}; 4 + 5 + /// A public key. 6 + /// 7 + /// The key itself is just a 32 byte array, but a key has associated crypto 8 + /// information that is cached for performance reasons. 9 + #[derive(Debug, Clone, Eq, uniffi::Object)] 10 + #[uniffi::export(Display)] 11 + pub struct PublicKey { 12 + pub(crate) key: [u8; 32], 13 + } 14 + 15 + impl From<iroh::PublicKey> for PublicKey { 16 + fn from(key: iroh::PublicKey) -> Self { 17 + PublicKey { 18 + key: *key.as_bytes(), 19 + } 20 + } 21 + } 22 + impl From<&PublicKey> for iroh::PublicKey { 23 + fn from(key: &PublicKey) -> Self { 24 + iroh::PublicKey::from_bytes(&key.key).unwrap() 25 + } 26 + } 27 + 28 + #[uniffi::export] 29 + impl PublicKey { 30 + /// Returns true if the PublicKeys are equal 31 + pub fn equal(&self, other: &PublicKey) -> bool { 32 + *self == *other 33 + } 34 + 35 + /// Express the PublicKey as a byte array 36 + pub fn to_bytes(&self) -> Vec<u8> { 37 + self.key.to_vec() 38 + } 39 + 40 + /// Make a PublicKey from base32 string 41 + #[uniffi::constructor] 42 + pub fn from_string(s: String) -> Result<Self, Error> { 43 + let key = iroh::PublicKey::from_str(&s).map_err(|_| InvalidPublicKeySnafu.build())?; 44 + Ok(key.into()) 45 + } 46 + 47 + /// Make a PublicKey from byte array 48 + #[uniffi::constructor] 49 + pub fn from_bytes(bytes: Vec<u8>) -> Result<Self, Error> { 50 + if bytes.len() != 32 { 51 + InvalidPublicKeySnafu.fail()?; 52 + } 53 + let bytes: [u8; 32] = bytes.try_into().expect("checked above"); 54 + let key = iroh::PublicKey::from_bytes(&bytes).map_err(|_| InvalidPublicKeySnafu.build())?; 55 + Ok(key.into()) 56 + } 57 + 58 + /// Convert to a base32 string limited to the first 10 bytes for a friendly string 59 + /// representation of the key. 60 + pub fn fmt_short(&self) -> String { 61 + iroh::PublicKey::from(self).fmt_short() 62 + } 63 + } 64 + 65 + impl PartialEq for PublicKey { 66 + fn eq(&self, other: &PublicKey) -> bool { 67 + self.key == other.key 68 + } 69 + } 70 + 71 + impl std::fmt::Display for PublicKey { 72 + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { 73 + iroh::PublicKey::from(self).fmt(f) 74 + } 75 + } 76 + 77 + #[cfg(test)] 78 + mod tests { 79 + use super::*; 80 + 81 + #[test] 82 + fn test_public_key() { 83 + let key_str = 84 + String::from("523c7996bad77424e96786cf7a7205115337a5b4565cd25506a0f297b191a5ea"); 85 + let fmt_str = String::from("523c7996ba"); 86 + let bytes = b"\x52\x3c\x79\x96\xba\xd7\x74\x24\xe9\x67\x86\xcf\x7a\x72\x05\x11\x53\x37\xa5\xb4\x56\x5c\xd2\x55\x06\xa0\xf2\x97\xb1\x91\xa5\xea"; 87 + // 88 + // create key from string 89 + let key = PublicKey::from_string(key_str.clone()).unwrap(); 90 + // 91 + // test methods are as expected 92 + assert_eq!(key_str, key.to_string()); 93 + assert_eq!(bytes.to_vec(), key.to_bytes()); 94 + assert_eq!(fmt_str, key.fmt_short()); 95 + // 96 + // create key from bytes 97 + let key_0 = PublicKey::from_bytes(bytes.to_vec()).unwrap(); 98 + // 99 + // test methods are as expected 100 + assert_eq!(key_str, key_0.to_string()); 101 + assert_eq!(bytes.to_vec(), key_0.to_bytes()); 102 + assert_eq!(fmt_str, key_0.fmt_short()); 103 + // 104 + // test that the eq function works 105 + assert!(key.equal(&key_0)); 106 + assert!(key_0.equal(&key)); 107 + } 108 + }
+10
rust/iroh-streamplace/src/lib.rs
··· 1 + uniffi::setup_scaffolding!(); 2 + 3 + pub mod endpoint; 4 + pub mod error; 5 + pub mod key; 6 + pub mod receiver; 7 + pub mod sender; 8 + pub mod utils; 9 + 10 + const ALPN: &[u8] = b"/iroh/streamplace/1";
+144
rust/iroh-streamplace/src/receiver.rs
··· 1 + use std::sync::Arc; 2 + 3 + use n0_future::task::{self, AbortOnDropHandle}; 4 + use tokio::task::JoinSet; 5 + use tracing::{debug, warn}; 6 + 7 + use crate::endpoint::Endpoint; 8 + use crate::error::Error; 9 + use crate::key::PublicKey; 10 + use crate::utils::NodeAddr; 11 + 12 + #[derive(uniffi::Object)] 13 + pub struct Receiver { 14 + endpoint: Endpoint, 15 + _handle: AbortOnDropHandle<()>, 16 + } 17 + 18 + #[uniffi::export] 19 + impl Receiver { 20 + /// Create a new receiver. 21 + #[uniffi::constructor(async_runtime = "tokio")] 22 + pub async fn new( 23 + endpoint: &Endpoint, 24 + handler: Arc<dyn DataHandler>, 25 + ) -> Result<Receiver, Error> { 26 + let ep = endpoint.endpoint.clone(); 27 + let handle = task::spawn(async move { 28 + let mut tasks = JoinSet::default(); 29 + 30 + while let Some(incoming) = ep.accept().await { 31 + let handler = handler.clone(); 32 + tasks.spawn(async move { 33 + let Ok(conn) = incoming.await else { 34 + return; 35 + }; 36 + let peer = Arc::new(PublicKey::from( 37 + conn.remote_node_id().expect("invalid remote"), 38 + )); 39 + let conn = match imsg::Connection::new(conn).await { 40 + Ok(conn) => conn, 41 + Err(err) => { 42 + warn!("imsg connection failed: {:?}", err); 43 + return; 44 + } 45 + }; 46 + 47 + while let Ok(stream) = conn.accept_stream().await { 48 + debug!("accepted stream"); 49 + if let Ok(msg) = stream.recv_msg().await { 50 + debug!("received msg {} bytes", msg.len()); 51 + handler 52 + .clone() 53 + .handle_data(peer.clone(), msg.to_vec()) 54 + .await; 55 + } 56 + } 57 + }); 58 + } 59 + 60 + // cleanup 61 + tasks.abort_all(); 62 + }); 63 + 64 + Ok(Receiver { 65 + endpoint: endpoint.clone(), 66 + _handle: AbortOnDropHandle::new(handle), 67 + }) 68 + } 69 + 70 + #[uniffi::method(async_runtime = "tokio")] 71 + pub async fn node_addr(&self) -> NodeAddr { 72 + self.endpoint.node_addr().await 73 + } 74 + } 75 + 76 + #[uniffi::export(with_foreign)] 77 + #[async_trait::async_trait] 78 + pub trait DataHandler: Send + Sync { 79 + async fn handle_data(&self, peer: Arc<PublicKey>, data: Vec<u8>); 80 + } 81 + 82 + #[cfg(test)] 83 + mod tests { 84 + 85 + use crate::sender::Sender; 86 + 87 + use super::*; 88 + 89 + #[tokio::test] 90 + async fn test_roundtrip() { 91 + tracing_subscriber::fmt() 92 + .with_env_filter(tracing_subscriber::EnvFilter::from_default_env()) 93 + .init(); 94 + 95 + let ep1 = Endpoint::new().await.unwrap(); 96 + let sender = Sender::new(&ep1).await.unwrap(); 97 + 98 + let (s, mut r) = tokio::sync::mpsc::channel(5); 99 + 100 + #[derive(Debug, Clone)] 101 + struct TestHandler { 102 + messages: tokio::sync::mpsc::Sender<(PublicKey, Vec<u8>)>, 103 + } 104 + 105 + #[async_trait::async_trait] 106 + impl DataHandler for TestHandler { 107 + async fn handle_data(&self, peer: Arc<PublicKey>, data: Vec<u8>) { 108 + self.messages 109 + .send((peer.as_ref().clone(), data)) 110 + .await 111 + .unwrap(); 112 + } 113 + } 114 + 115 + let handler = TestHandler { messages: s }; 116 + let ep2 = Endpoint::new().await.unwrap(); 117 + let receiver = Receiver::new(&ep2, Arc::new(handler.clone())) 118 + .await 119 + .unwrap(); 120 + 121 + let receiver_addr = receiver.node_addr().await; 122 + println!("recv addr: {:?}", receiver_addr); 123 + let receiver_id = receiver_addr.node_id(); 124 + 125 + // add peer 126 + sender 127 + .add_peer(&NodeAddr::new(&receiver_id, None, Vec::new())) 128 + .await 129 + .unwrap(); 130 + 131 + // send a few messages 132 + for i in 0u8..5 { 133 + sender.send(&receiver_id, &[i, 0, 0, 0]).await.unwrap(); 134 + } 135 + 136 + // make sure the receiver got them 137 + let sender_id = sender.node_addr().await.node_id(); 138 + for i in 0u8..5 { 139 + let (id, msg) = r.recv().await.unwrap(); 140 + assert_eq!(id, sender_id); 141 + assert_eq!(msg, vec![i, 0, 0, 0]); 142 + } 143 + } 144 + }
+72
rust/iroh-streamplace/src/sender.rs
··· 1 + use std::collections::HashMap; 2 + 3 + use bytes::Bytes; 4 + use iroh::NodeId; 5 + use snafu::{OptionExt, ResultExt}; 6 + use tokio::sync::Mutex; 7 + 8 + use crate::ALPN; 9 + use crate::endpoint::Endpoint; 10 + use crate::error::{ 11 + Error, MissingConnectionSnafu, NewConnectionSnafu, OpenStreamSnafu, SendMessageSnafu, 12 + }; 13 + use crate::key::PublicKey; 14 + use crate::utils::NodeAddr; 15 + 16 + #[derive(uniffi::Object)] 17 + pub struct Sender { 18 + endpoint: Endpoint, 19 + connections: Mutex<HashMap<NodeId, imsg::Connection>>, 20 + } 21 + 22 + #[uniffi::export] 23 + impl Sender { 24 + /// Create a new sender. 25 + #[uniffi::constructor(async_runtime = "tokio")] 26 + pub async fn new(endpoint: &Endpoint) -> Result<Sender, Error> { 27 + Ok(Sender { 28 + endpoint: endpoint.clone(), 29 + connections: Default::default(), 30 + }) 31 + } 32 + 33 + #[uniffi::method(async_runtime = "tokio")] 34 + pub async fn add_peer(&self, addr: &NodeAddr) -> Result<(), Error> { 35 + let addr: iroh::NodeAddr = addr.clone().try_into()?; 36 + 37 + let mut conns = self.connections.lock().await; 38 + let node_id = addr.node_id; 39 + if conns.contains_key(&node_id) { 40 + return Ok(()); 41 + } 42 + let conn = self.endpoint.endpoint.connect(addr, ALPN).await?; 43 + let conn = imsg::Connection::new(conn) 44 + .await 45 + .context(NewConnectionSnafu)?; 46 + conns.insert(node_id, conn); 47 + Ok(()) 48 + } 49 + 50 + #[uniffi::method(async_runtime = "tokio")] 51 + pub async fn send(&self, node_id: &PublicKey, data: &[u8]) -> Result<(), Error> { 52 + let node_id: NodeId = node_id.into(); 53 + let conn = self 54 + .connections 55 + .lock() 56 + .await 57 + .get(&node_id) 58 + .cloned() 59 + .context(MissingConnectionSnafu)?; 60 + 61 + // TODO: store streams 62 + let stream = conn.open_stream().await.context(OpenStreamSnafu)?; 63 + let data = Bytes::copy_from_slice(data); 64 + stream.send_msg(data).await.context(SendMessageSnafu)?; 65 + Ok(()) 66 + } 67 + 68 + #[uniffi::method(async_runtime = "tokio")] 69 + pub async fn node_addr(&self) -> NodeAddr { 70 + self.endpoint.node_addr().await 71 + } 72 + }
+80
rust/iroh-streamplace/src/utils.rs
··· 1 + use std::str::FromStr; 2 + use std::sync::Arc; 3 + 4 + use crate::error::Error; 5 + use crate::key::PublicKey; 6 + 7 + /// A peer and it's addressing information. 8 + #[derive(Debug, Clone, PartialEq, Eq, uniffi::Object)] 9 + pub struct NodeAddr { 10 + node_id: Arc<PublicKey>, 11 + relay_url: Option<String>, 12 + addresses: Vec<String>, 13 + } 14 + 15 + #[uniffi::export] 16 + impl NodeAddr { 17 + /// Create a new [`NodeAddr`] with empty [`AddrInfo`]. 18 + #[uniffi::constructor] 19 + pub fn new(node_id: &PublicKey, derp_url: Option<String>, addresses: Vec<String>) -> Self { 20 + Self { 21 + node_id: Arc::new(node_id.clone()), 22 + relay_url: derp_url, 23 + addresses, 24 + } 25 + } 26 + 27 + pub fn node_id(&self) -> PublicKey { 28 + self.node_id.as_ref().clone() 29 + } 30 + 31 + /// Get the direct addresses of this peer. 32 + pub fn direct_addresses(&self) -> Vec<String> { 33 + self.addresses.clone() 34 + } 35 + 36 + /// Get the home relay URL for this peer 37 + pub fn relay_url(&self) -> Option<String> { 38 + self.relay_url.clone() 39 + } 40 + 41 + /// Returns true if both NodeAddr's have the same values 42 + pub fn equal(&self, other: &NodeAddr) -> bool { 43 + self == other 44 + } 45 + } 46 + 47 + impl TryFrom<NodeAddr> for iroh::NodeAddr { 48 + type Error = Error; 49 + 50 + fn try_from(value: NodeAddr) -> Result<Self, Self::Error> { 51 + let mut node_addr = iroh::NodeAddr::new((&*value.node_id).into()); 52 + let addresses = value 53 + .direct_addresses() 54 + .into_iter() 55 + .map(|addr| std::net::SocketAddr::from_str(&addr).map_err(Error::from)) 56 + .collect::<Result<Vec<_>, _>>()?; 57 + 58 + if let Some(derp_url) = value.relay_url() { 59 + let url = url::Url::parse(&derp_url)?; 60 + 61 + node_addr = node_addr.with_relay_url(url.into()); 62 + } 63 + node_addr = node_addr.with_direct_addresses(addresses); 64 + Ok(node_addr) 65 + } 66 + } 67 + 68 + impl From<iroh::NodeAddr> for NodeAddr { 69 + fn from(value: iroh::NodeAddr) -> Self { 70 + NodeAddr { 71 + node_id: Arc::new(value.node_id.into()), 72 + relay_url: value.relay_url.map(|url| url.to_string()), 73 + addresses: value 74 + .direct_addresses 75 + .into_iter() 76 + .map(|d| d.to_string()) 77 + .collect(), 78 + } 79 + } 80 + }