├── .gitignore ├── .gitmodules ├── README.md ├── axum ├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── README.md ├── src │ └── main.rs └── wrk_post.lua ├── benchmark.dart ├── bun.ts ├── dart.dart ├── dart_axum_tokio ├── .gitignore ├── README.md ├── analysis_options.yaml ├── bin │ └── main.dart ├── build.dart ├── flutter_rust_bridge.yaml ├── frb_generated.h ├── lib │ ├── dart_axum_tokio_sever.dart │ └── src │ │ └── rust │ │ ├── api │ │ └── minimal.dart │ │ ├── frb_generated.dart │ │ ├── frb_generated.io.dart │ │ └── frb_generated.web.dart ├── pubspec.lock ├── pubspec.yaml ├── rust │ ├── Cargo.lock │ ├── Cargo.toml │ └── src │ │ ├── api │ │ ├── minimal.rs │ │ └── mod.rs │ │ ├── frb_generated.io.rs │ │ ├── frb_generated.rs │ │ ├── frb_generated.web.rs │ │ └── lib.rs └── wrk_post.lua ├── deno.ts ├── go.go ├── node.js ├── regex ├── .gitignore ├── Makefile ├── regex.py ├── regex.swift └── resuls ├── results ├── hello_world │ ├── axum_mt.log │ ├── axum_st.log │ ├── bun.log │ ├── dart_aot.log │ ├── dart_axum_aot.log │ ├── dart_axum_jit.log │ ├── dart_jit.log │ ├── deno.log │ ├── go.log │ └── node.log └── json_echo │ ├── axum_mt_serde.log │ ├── axum_mt_simd.log │ ├── axum_st_serde.log │ ├── axum_st_simd.log │ ├── bun.log │ ├── dart_aot.log │ ├── dart_axum_aot.log │ ├── dart_jit.log │ ├── deno.log │ ├── go.log │ └── node.log ├── testdata └── posts.json └── wrk_post.lua /.gitignore: -------------------------------------------------------------------------------- 1 | output* 2 | 3 | **/*.exe 4 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "dart_axum_tokio/vendor/flutter_rust_bridge"] 2 | path = dart_axum_tokio/vendor/flutter_rust_bridge 3 | url = https://github.com/fzyzcjy/flutter_rust_bridge.git 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Benchmark Comparing Dart and JavaScript Performance on the Server 2 | 3 | This is a series of helloworld and json echo server benchmarks for Dart, 4 | Dart+Rust, Node.js, Deno, and Bun. 5 | 6 | For more context, consider reading https://barfoos.com/blog/dart_javascript/. 7 | 8 | Thanks! 9 | -------------------------------------------------------------------------------- /axum/.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | -------------------------------------------------------------------------------- /axum/Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "addr2line" 7 | version = "0.21.0" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" 10 | dependencies = [ 11 | "gimli", 12 | ] 13 | 14 | [[package]] 15 | name = "adler" 16 | version = "1.0.2" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" 19 | 20 | [[package]] 21 | name = "ahash" 22 | version = "0.8.8" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "42cd52102d3df161c77a887b608d7a4897d7cc112886a9537b738a887a03aaff" 25 | dependencies = [ 26 | "cfg-if", 27 | "once_cell", 28 | "version_check", 29 | "zerocopy", 30 | ] 31 | 32 | [[package]] 33 | name = "anstream" 34 | version = "0.6.11" 35 | source = "registry+https://github.com/rust-lang/crates.io-index" 36 | checksum = "6e2e1ebcb11de5c03c67de28a7df593d32191b44939c482e97702baaaa6ab6a5" 37 | dependencies = [ 38 | "anstyle", 39 | "anstyle-parse", 40 | "anstyle-query", 41 | "anstyle-wincon", 42 | "colorchoice", 43 | "utf8parse", 44 | ] 45 | 46 | [[package]] 47 | name = "anstyle" 48 | version = "1.0.6" 49 | source = "registry+https://github.com/rust-lang/crates.io-index" 50 | checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" 51 | 52 | [[package]] 53 | name = "anstyle-parse" 54 | version = "0.2.3" 55 | source = "registry+https://github.com/rust-lang/crates.io-index" 56 | checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" 57 | dependencies = [ 58 | "utf8parse", 59 | ] 60 | 61 | [[package]] 62 | name = "anstyle-query" 63 | version = "1.0.2" 64 | source = "registry+https://github.com/rust-lang/crates.io-index" 65 | checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" 66 | dependencies = [ 67 | "windows-sys 0.52.0", 68 | ] 69 | 70 | [[package]] 71 | name = "anstyle-wincon" 72 | version = "3.0.2" 73 | source = "registry+https://github.com/rust-lang/crates.io-index" 74 | checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" 75 | dependencies = [ 76 | "anstyle", 77 | "windows-sys 0.52.0", 78 | ] 79 | 80 | [[package]] 81 | name = "async-trait" 82 | version = "0.1.77" 83 | source = "registry+https://github.com/rust-lang/crates.io-index" 84 | checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" 85 | dependencies = [ 86 | "proc-macro2", 87 | "quote", 88 | "syn", 89 | ] 90 | 91 | [[package]] 92 | name = "autocfg" 93 | version = "1.1.0" 94 | source = "registry+https://github.com/rust-lang/crates.io-index" 95 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 96 | 97 | [[package]] 98 | name = "axum" 99 | version = "0.7.4" 100 | source = "registry+https://github.com/rust-lang/crates.io-index" 101 | checksum = "1236b4b292f6c4d6dc34604bb5120d85c3fe1d1aa596bd5cc52ca054d13e7b9e" 102 | dependencies = [ 103 | "async-trait", 104 | "axum-core", 105 | "bytes", 106 | "futures-util", 107 | "http", 108 | "http-body", 109 | "http-body-util", 110 | "hyper", 111 | "hyper-util", 112 | "itoa", 113 | "matchit", 114 | "memchr", 115 | "mime", 116 | "percent-encoding", 117 | "pin-project-lite", 118 | "rustversion", 119 | "serde", 120 | "serde_json", 121 | "serde_path_to_error", 122 | "serde_urlencoded", 123 | "sync_wrapper", 124 | "tokio", 125 | "tower", 126 | "tower-layer", 127 | "tower-service", 128 | "tracing", 129 | ] 130 | 131 | [[package]] 132 | name = "axum-core" 133 | version = "0.4.3" 134 | source = "registry+https://github.com/rust-lang/crates.io-index" 135 | checksum = "a15c63fd72d41492dc4f497196f5da1fb04fb7529e631d73630d1b491e47a2e3" 136 | dependencies = [ 137 | "async-trait", 138 | "bytes", 139 | "futures-util", 140 | "http", 141 | "http-body", 142 | "http-body-util", 143 | "mime", 144 | "pin-project-lite", 145 | "rustversion", 146 | "sync_wrapper", 147 | "tower-layer", 148 | "tower-service", 149 | "tracing", 150 | ] 151 | 152 | [[package]] 153 | name = "backtrace" 154 | version = "0.3.69" 155 | source = "registry+https://github.com/rust-lang/crates.io-index" 156 | checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" 157 | dependencies = [ 158 | "addr2line", 159 | "cc", 160 | "cfg-if", 161 | "libc", 162 | "miniz_oxide", 163 | "object", 164 | "rustc-demangle", 165 | ] 166 | 167 | [[package]] 168 | name = "bumpalo" 169 | version = "3.15.0" 170 | source = "registry+https://github.com/rust-lang/crates.io-index" 171 | checksum = "d32a994c2b3ca201d9b263612a374263f05e7adde37c4707f693dcd375076d1f" 172 | 173 | [[package]] 174 | name = "bytes" 175 | version = "1.5.0" 176 | source = "registry+https://github.com/rust-lang/crates.io-index" 177 | checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" 178 | 179 | [[package]] 180 | name = "cc" 181 | version = "1.0.83" 182 | source = "registry+https://github.com/rust-lang/crates.io-index" 183 | checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" 184 | dependencies = [ 185 | "libc", 186 | ] 187 | 188 | [[package]] 189 | name = "cfg-if" 190 | version = "1.0.0" 191 | source = "registry+https://github.com/rust-lang/crates.io-index" 192 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 193 | 194 | [[package]] 195 | name = "clap" 196 | version = "4.5.1" 197 | source = "registry+https://github.com/rust-lang/crates.io-index" 198 | checksum = "c918d541ef2913577a0f9566e9ce27cb35b6df072075769e0b26cb5a554520da" 199 | dependencies = [ 200 | "clap_builder", 201 | "clap_derive", 202 | ] 203 | 204 | [[package]] 205 | name = "clap_builder" 206 | version = "4.5.1" 207 | source = "registry+https://github.com/rust-lang/crates.io-index" 208 | checksum = "9f3e7391dad68afb0c2ede1bf619f579a3dc9c2ec67f089baa397123a2f3d1eb" 209 | dependencies = [ 210 | "anstream", 211 | "anstyle", 212 | "clap_lex", 213 | "strsim", 214 | ] 215 | 216 | [[package]] 217 | name = "clap_derive" 218 | version = "4.5.0" 219 | source = "registry+https://github.com/rust-lang/crates.io-index" 220 | checksum = "307bc0538d5f0f83b8248db3087aa92fe504e4691294d0c96c0eabc33f47ba47" 221 | dependencies = [ 222 | "heck", 223 | "proc-macro2", 224 | "quote", 225 | "syn", 226 | ] 227 | 228 | [[package]] 229 | name = "clap_lex" 230 | version = "0.7.0" 231 | source = "registry+https://github.com/rust-lang/crates.io-index" 232 | checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" 233 | 234 | [[package]] 235 | name = "colorchoice" 236 | version = "1.0.0" 237 | source = "registry+https://github.com/rust-lang/crates.io-index" 238 | checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" 239 | 240 | [[package]] 241 | name = "equivalent" 242 | version = "1.0.1" 243 | source = "registry+https://github.com/rust-lang/crates.io-index" 244 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" 245 | 246 | [[package]] 247 | name = "float-cmp" 248 | version = "0.9.0" 249 | source = "registry+https://github.com/rust-lang/crates.io-index" 250 | checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" 251 | dependencies = [ 252 | "num-traits", 253 | ] 254 | 255 | [[package]] 256 | name = "fnv" 257 | version = "1.0.7" 258 | source = "registry+https://github.com/rust-lang/crates.io-index" 259 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 260 | 261 | [[package]] 262 | name = "form_urlencoded" 263 | version = "1.2.1" 264 | source = "registry+https://github.com/rust-lang/crates.io-index" 265 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 266 | dependencies = [ 267 | "percent-encoding", 268 | ] 269 | 270 | [[package]] 271 | name = "futures-channel" 272 | version = "0.3.30" 273 | source = "registry+https://github.com/rust-lang/crates.io-index" 274 | checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" 275 | dependencies = [ 276 | "futures-core", 277 | ] 278 | 279 | [[package]] 280 | name = "futures-core" 281 | version = "0.3.30" 282 | source = "registry+https://github.com/rust-lang/crates.io-index" 283 | checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" 284 | 285 | [[package]] 286 | name = "futures-sink" 287 | version = "0.3.30" 288 | source = "registry+https://github.com/rust-lang/crates.io-index" 289 | checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" 290 | 291 | [[package]] 292 | name = "futures-task" 293 | version = "0.3.30" 294 | source = "registry+https://github.com/rust-lang/crates.io-index" 295 | checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" 296 | 297 | [[package]] 298 | name = "futures-util" 299 | version = "0.3.30" 300 | source = "registry+https://github.com/rust-lang/crates.io-index" 301 | checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" 302 | dependencies = [ 303 | "futures-core", 304 | "futures-task", 305 | "pin-project-lite", 306 | "pin-utils", 307 | ] 308 | 309 | [[package]] 310 | name = "getrandom" 311 | version = "0.2.12" 312 | source = "registry+https://github.com/rust-lang/crates.io-index" 313 | checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" 314 | dependencies = [ 315 | "cfg-if", 316 | "js-sys", 317 | "libc", 318 | "wasi", 319 | "wasm-bindgen", 320 | ] 321 | 322 | [[package]] 323 | name = "gimli" 324 | version = "0.28.1" 325 | source = "registry+https://github.com/rust-lang/crates.io-index" 326 | checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" 327 | 328 | [[package]] 329 | name = "h2" 330 | version = "0.4.2" 331 | source = "registry+https://github.com/rust-lang/crates.io-index" 332 | checksum = "31d030e59af851932b72ceebadf4a2b5986dba4c3b99dd2493f8273a0f151943" 333 | dependencies = [ 334 | "bytes", 335 | "fnv", 336 | "futures-core", 337 | "futures-sink", 338 | "futures-util", 339 | "http", 340 | "indexmap", 341 | "slab", 342 | "tokio", 343 | "tokio-util", 344 | "tracing", 345 | ] 346 | 347 | [[package]] 348 | name = "halfbrown" 349 | version = "0.2.4" 350 | source = "registry+https://github.com/rust-lang/crates.io-index" 351 | checksum = "5681137554ddff44396e5f149892c769d45301dd9aa19c51602a89ee214cb0ec" 352 | dependencies = [ 353 | "hashbrown 0.13.2", 354 | "serde", 355 | ] 356 | 357 | [[package]] 358 | name = "hashbrown" 359 | version = "0.13.2" 360 | source = "registry+https://github.com/rust-lang/crates.io-index" 361 | checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" 362 | dependencies = [ 363 | "ahash", 364 | ] 365 | 366 | [[package]] 367 | name = "hashbrown" 368 | version = "0.14.3" 369 | source = "registry+https://github.com/rust-lang/crates.io-index" 370 | checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" 371 | 372 | [[package]] 373 | name = "heck" 374 | version = "0.4.1" 375 | source = "registry+https://github.com/rust-lang/crates.io-index" 376 | checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" 377 | 378 | [[package]] 379 | name = "hello_world_axum_server" 380 | version = "0.1.0" 381 | dependencies = [ 382 | "axum", 383 | "clap", 384 | "lazy_static", 385 | "serde_json", 386 | "simd-json", 387 | "tokio", 388 | ] 389 | 390 | [[package]] 391 | name = "hermit-abi" 392 | version = "0.3.6" 393 | source = "registry+https://github.com/rust-lang/crates.io-index" 394 | checksum = "bd5256b483761cd23699d0da46cc6fd2ee3be420bbe6d020ae4a091e70b7e9fd" 395 | 396 | [[package]] 397 | name = "http" 398 | version = "1.0.0" 399 | source = "registry+https://github.com/rust-lang/crates.io-index" 400 | checksum = "b32afd38673a8016f7c9ae69e5af41a58f81b1d31689040f2f1959594ce194ea" 401 | dependencies = [ 402 | "bytes", 403 | "fnv", 404 | "itoa", 405 | ] 406 | 407 | [[package]] 408 | name = "http-body" 409 | version = "1.0.0" 410 | source = "registry+https://github.com/rust-lang/crates.io-index" 411 | checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" 412 | dependencies = [ 413 | "bytes", 414 | "http", 415 | ] 416 | 417 | [[package]] 418 | name = "http-body-util" 419 | version = "0.1.0" 420 | source = "registry+https://github.com/rust-lang/crates.io-index" 421 | checksum = "41cb79eb393015dadd30fc252023adb0b2400a0caee0fa2a077e6e21a551e840" 422 | dependencies = [ 423 | "bytes", 424 | "futures-util", 425 | "http", 426 | "http-body", 427 | "pin-project-lite", 428 | ] 429 | 430 | [[package]] 431 | name = "httparse" 432 | version = "1.8.0" 433 | source = "registry+https://github.com/rust-lang/crates.io-index" 434 | checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" 435 | 436 | [[package]] 437 | name = "httpdate" 438 | version = "1.0.3" 439 | source = "registry+https://github.com/rust-lang/crates.io-index" 440 | checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" 441 | 442 | [[package]] 443 | name = "hyper" 444 | version = "1.1.0" 445 | source = "registry+https://github.com/rust-lang/crates.io-index" 446 | checksum = "fb5aa53871fc917b1a9ed87b683a5d86db645e23acb32c2e0785a353e522fb75" 447 | dependencies = [ 448 | "bytes", 449 | "futures-channel", 450 | "futures-util", 451 | "h2", 452 | "http", 453 | "http-body", 454 | "httparse", 455 | "httpdate", 456 | "itoa", 457 | "pin-project-lite", 458 | "tokio", 459 | ] 460 | 461 | [[package]] 462 | name = "hyper-util" 463 | version = "0.1.3" 464 | source = "registry+https://github.com/rust-lang/crates.io-index" 465 | checksum = "ca38ef113da30126bbff9cd1705f9273e15d45498615d138b0c20279ac7a76aa" 466 | dependencies = [ 467 | "bytes", 468 | "futures-util", 469 | "http", 470 | "http-body", 471 | "hyper", 472 | "pin-project-lite", 473 | "socket2", 474 | "tokio", 475 | ] 476 | 477 | [[package]] 478 | name = "indexmap" 479 | version = "2.2.3" 480 | source = "registry+https://github.com/rust-lang/crates.io-index" 481 | checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" 482 | dependencies = [ 483 | "equivalent", 484 | "hashbrown 0.14.3", 485 | ] 486 | 487 | [[package]] 488 | name = "itoa" 489 | version = "1.0.10" 490 | source = "registry+https://github.com/rust-lang/crates.io-index" 491 | checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" 492 | 493 | [[package]] 494 | name = "js-sys" 495 | version = "0.3.68" 496 | source = "registry+https://github.com/rust-lang/crates.io-index" 497 | checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" 498 | dependencies = [ 499 | "wasm-bindgen", 500 | ] 501 | 502 | [[package]] 503 | name = "lazy_static" 504 | version = "1.4.0" 505 | source = "registry+https://github.com/rust-lang/crates.io-index" 506 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 507 | 508 | [[package]] 509 | name = "lexical-core" 510 | version = "0.8.5" 511 | source = "registry+https://github.com/rust-lang/crates.io-index" 512 | checksum = "2cde5de06e8d4c2faabc400238f9ae1c74d5412d03a7bd067645ccbc47070e46" 513 | dependencies = [ 514 | "lexical-parse-float", 515 | "lexical-parse-integer", 516 | "lexical-util", 517 | "lexical-write-float", 518 | "lexical-write-integer", 519 | ] 520 | 521 | [[package]] 522 | name = "lexical-parse-float" 523 | version = "0.8.5" 524 | source = "registry+https://github.com/rust-lang/crates.io-index" 525 | checksum = "683b3a5ebd0130b8fb52ba0bdc718cc56815b6a097e28ae5a6997d0ad17dc05f" 526 | dependencies = [ 527 | "lexical-parse-integer", 528 | "lexical-util", 529 | "static_assertions", 530 | ] 531 | 532 | [[package]] 533 | name = "lexical-parse-integer" 534 | version = "0.8.6" 535 | source = "registry+https://github.com/rust-lang/crates.io-index" 536 | checksum = "6d0994485ed0c312f6d965766754ea177d07f9c00c9b82a5ee62ed5b47945ee9" 537 | dependencies = [ 538 | "lexical-util", 539 | "static_assertions", 540 | ] 541 | 542 | [[package]] 543 | name = "lexical-util" 544 | version = "0.8.5" 545 | source = "registry+https://github.com/rust-lang/crates.io-index" 546 | checksum = "5255b9ff16ff898710eb9eb63cb39248ea8a5bb036bea8085b1a767ff6c4e3fc" 547 | dependencies = [ 548 | "static_assertions", 549 | ] 550 | 551 | [[package]] 552 | name = "lexical-write-float" 553 | version = "0.8.5" 554 | source = "registry+https://github.com/rust-lang/crates.io-index" 555 | checksum = "accabaa1c4581f05a3923d1b4cfd124c329352288b7b9da09e766b0668116862" 556 | dependencies = [ 557 | "lexical-util", 558 | "lexical-write-integer", 559 | "static_assertions", 560 | ] 561 | 562 | [[package]] 563 | name = "lexical-write-integer" 564 | version = "0.8.5" 565 | source = "registry+https://github.com/rust-lang/crates.io-index" 566 | checksum = "e1b6f3d1f4422866b68192d62f77bc5c700bee84f3069f2469d7bc8c77852446" 567 | dependencies = [ 568 | "lexical-util", 569 | "static_assertions", 570 | ] 571 | 572 | [[package]] 573 | name = "libc" 574 | version = "0.2.153" 575 | source = "registry+https://github.com/rust-lang/crates.io-index" 576 | checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" 577 | 578 | [[package]] 579 | name = "log" 580 | version = "0.4.20" 581 | source = "registry+https://github.com/rust-lang/crates.io-index" 582 | checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" 583 | 584 | [[package]] 585 | name = "matchit" 586 | version = "0.7.3" 587 | source = "registry+https://github.com/rust-lang/crates.io-index" 588 | checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" 589 | 590 | [[package]] 591 | name = "memchr" 592 | version = "2.7.1" 593 | source = "registry+https://github.com/rust-lang/crates.io-index" 594 | checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" 595 | 596 | [[package]] 597 | name = "mime" 598 | version = "0.3.17" 599 | source = "registry+https://github.com/rust-lang/crates.io-index" 600 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 601 | 602 | [[package]] 603 | name = "miniz_oxide" 604 | version = "0.7.2" 605 | source = "registry+https://github.com/rust-lang/crates.io-index" 606 | checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" 607 | dependencies = [ 608 | "adler", 609 | ] 610 | 611 | [[package]] 612 | name = "mio" 613 | version = "0.8.10" 614 | source = "registry+https://github.com/rust-lang/crates.io-index" 615 | checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" 616 | dependencies = [ 617 | "libc", 618 | "wasi", 619 | "windows-sys 0.48.0", 620 | ] 621 | 622 | [[package]] 623 | name = "num-traits" 624 | version = "0.2.18" 625 | source = "registry+https://github.com/rust-lang/crates.io-index" 626 | checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" 627 | dependencies = [ 628 | "autocfg", 629 | ] 630 | 631 | [[package]] 632 | name = "num_cpus" 633 | version = "1.16.0" 634 | source = "registry+https://github.com/rust-lang/crates.io-index" 635 | checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" 636 | dependencies = [ 637 | "hermit-abi", 638 | "libc", 639 | ] 640 | 641 | [[package]] 642 | name = "object" 643 | version = "0.32.2" 644 | source = "registry+https://github.com/rust-lang/crates.io-index" 645 | checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" 646 | dependencies = [ 647 | "memchr", 648 | ] 649 | 650 | [[package]] 651 | name = "once_cell" 652 | version = "1.19.0" 653 | source = "registry+https://github.com/rust-lang/crates.io-index" 654 | checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" 655 | 656 | [[package]] 657 | name = "percent-encoding" 658 | version = "2.3.1" 659 | source = "registry+https://github.com/rust-lang/crates.io-index" 660 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 661 | 662 | [[package]] 663 | name = "pin-project" 664 | version = "1.1.4" 665 | source = "registry+https://github.com/rust-lang/crates.io-index" 666 | checksum = "0302c4a0442c456bd56f841aee5c3bfd17967563f6fadc9ceb9f9c23cf3807e0" 667 | dependencies = [ 668 | "pin-project-internal", 669 | ] 670 | 671 | [[package]] 672 | name = "pin-project-internal" 673 | version = "1.1.4" 674 | source = "registry+https://github.com/rust-lang/crates.io-index" 675 | checksum = "266c042b60c9c76b8d53061e52b2e0d1116abc57cefc8c5cd671619a56ac3690" 676 | dependencies = [ 677 | "proc-macro2", 678 | "quote", 679 | "syn", 680 | ] 681 | 682 | [[package]] 683 | name = "pin-project-lite" 684 | version = "0.2.13" 685 | source = "registry+https://github.com/rust-lang/crates.io-index" 686 | checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" 687 | 688 | [[package]] 689 | name = "pin-utils" 690 | version = "0.1.0" 691 | source = "registry+https://github.com/rust-lang/crates.io-index" 692 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 693 | 694 | [[package]] 695 | name = "proc-macro2" 696 | version = "1.0.78" 697 | source = "registry+https://github.com/rust-lang/crates.io-index" 698 | checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" 699 | dependencies = [ 700 | "unicode-ident", 701 | ] 702 | 703 | [[package]] 704 | name = "quote" 705 | version = "1.0.35" 706 | source = "registry+https://github.com/rust-lang/crates.io-index" 707 | checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" 708 | dependencies = [ 709 | "proc-macro2", 710 | ] 711 | 712 | [[package]] 713 | name = "ref-cast" 714 | version = "1.0.22" 715 | source = "registry+https://github.com/rust-lang/crates.io-index" 716 | checksum = "c4846d4c50d1721b1a3bef8af76924eef20d5e723647333798c1b519b3a9473f" 717 | dependencies = [ 718 | "ref-cast-impl", 719 | ] 720 | 721 | [[package]] 722 | name = "ref-cast-impl" 723 | version = "1.0.22" 724 | source = "registry+https://github.com/rust-lang/crates.io-index" 725 | checksum = "5fddb4f8d99b0a2ebafc65a87a69a7b9875e4b1ae1f00db265d300ef7f28bccc" 726 | dependencies = [ 727 | "proc-macro2", 728 | "quote", 729 | "syn", 730 | ] 731 | 732 | [[package]] 733 | name = "rustc-demangle" 734 | version = "0.1.23" 735 | source = "registry+https://github.com/rust-lang/crates.io-index" 736 | checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" 737 | 738 | [[package]] 739 | name = "rustversion" 740 | version = "1.0.14" 741 | source = "registry+https://github.com/rust-lang/crates.io-index" 742 | checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" 743 | 744 | [[package]] 745 | name = "ryu" 746 | version = "1.0.16" 747 | source = "registry+https://github.com/rust-lang/crates.io-index" 748 | checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" 749 | 750 | [[package]] 751 | name = "serde" 752 | version = "1.0.196" 753 | source = "registry+https://github.com/rust-lang/crates.io-index" 754 | checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32" 755 | dependencies = [ 756 | "serde_derive", 757 | ] 758 | 759 | [[package]] 760 | name = "serde_derive" 761 | version = "1.0.196" 762 | source = "registry+https://github.com/rust-lang/crates.io-index" 763 | checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67" 764 | dependencies = [ 765 | "proc-macro2", 766 | "quote", 767 | "syn", 768 | ] 769 | 770 | [[package]] 771 | name = "serde_json" 772 | version = "1.0.113" 773 | source = "registry+https://github.com/rust-lang/crates.io-index" 774 | checksum = "69801b70b1c3dac963ecb03a364ba0ceda9cf60c71cfe475e99864759c8b8a79" 775 | dependencies = [ 776 | "itoa", 777 | "ryu", 778 | "serde", 779 | ] 780 | 781 | [[package]] 782 | name = "serde_path_to_error" 783 | version = "0.1.15" 784 | source = "registry+https://github.com/rust-lang/crates.io-index" 785 | checksum = "ebd154a240de39fdebcf5775d2675c204d7c13cf39a4c697be6493c8e734337c" 786 | dependencies = [ 787 | "itoa", 788 | "serde", 789 | ] 790 | 791 | [[package]] 792 | name = "serde_urlencoded" 793 | version = "0.7.1" 794 | source = "registry+https://github.com/rust-lang/crates.io-index" 795 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 796 | dependencies = [ 797 | "form_urlencoded", 798 | "itoa", 799 | "ryu", 800 | "serde", 801 | ] 802 | 803 | [[package]] 804 | name = "simd-json" 805 | version = "0.13.8" 806 | source = "registry+https://github.com/rust-lang/crates.io-index" 807 | checksum = "2faf8f101b9bc484337a6a6b0409cf76c139f2fb70a9e3aee6b6774be7bfbf76" 808 | dependencies = [ 809 | "getrandom", 810 | "halfbrown", 811 | "lexical-core", 812 | "ref-cast", 813 | "serde", 814 | "serde_json", 815 | "simdutf8", 816 | "value-trait", 817 | ] 818 | 819 | [[package]] 820 | name = "simdutf8" 821 | version = "0.1.4" 822 | source = "registry+https://github.com/rust-lang/crates.io-index" 823 | checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" 824 | 825 | [[package]] 826 | name = "slab" 827 | version = "0.4.9" 828 | source = "registry+https://github.com/rust-lang/crates.io-index" 829 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 830 | dependencies = [ 831 | "autocfg", 832 | ] 833 | 834 | [[package]] 835 | name = "socket2" 836 | version = "0.5.5" 837 | source = "registry+https://github.com/rust-lang/crates.io-index" 838 | checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" 839 | dependencies = [ 840 | "libc", 841 | "windows-sys 0.48.0", 842 | ] 843 | 844 | [[package]] 845 | name = "static_assertions" 846 | version = "1.1.0" 847 | source = "registry+https://github.com/rust-lang/crates.io-index" 848 | checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 849 | 850 | [[package]] 851 | name = "strsim" 852 | version = "0.11.0" 853 | source = "registry+https://github.com/rust-lang/crates.io-index" 854 | checksum = "5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01" 855 | 856 | [[package]] 857 | name = "syn" 858 | version = "2.0.48" 859 | source = "registry+https://github.com/rust-lang/crates.io-index" 860 | checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" 861 | dependencies = [ 862 | "proc-macro2", 863 | "quote", 864 | "unicode-ident", 865 | ] 866 | 867 | [[package]] 868 | name = "sync_wrapper" 869 | version = "0.1.2" 870 | source = "registry+https://github.com/rust-lang/crates.io-index" 871 | checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" 872 | 873 | [[package]] 874 | name = "tokio" 875 | version = "1.36.0" 876 | source = "registry+https://github.com/rust-lang/crates.io-index" 877 | checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931" 878 | dependencies = [ 879 | "backtrace", 880 | "bytes", 881 | "libc", 882 | "mio", 883 | "num_cpus", 884 | "pin-project-lite", 885 | "socket2", 886 | "tokio-macros", 887 | "windows-sys 0.48.0", 888 | ] 889 | 890 | [[package]] 891 | name = "tokio-macros" 892 | version = "2.2.0" 893 | source = "registry+https://github.com/rust-lang/crates.io-index" 894 | checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" 895 | dependencies = [ 896 | "proc-macro2", 897 | "quote", 898 | "syn", 899 | ] 900 | 901 | [[package]] 902 | name = "tokio-util" 903 | version = "0.7.10" 904 | source = "registry+https://github.com/rust-lang/crates.io-index" 905 | checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" 906 | dependencies = [ 907 | "bytes", 908 | "futures-core", 909 | "futures-sink", 910 | "pin-project-lite", 911 | "tokio", 912 | "tracing", 913 | ] 914 | 915 | [[package]] 916 | name = "tower" 917 | version = "0.4.13" 918 | source = "registry+https://github.com/rust-lang/crates.io-index" 919 | checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" 920 | dependencies = [ 921 | "futures-core", 922 | "futures-util", 923 | "pin-project", 924 | "pin-project-lite", 925 | "tokio", 926 | "tower-layer", 927 | "tower-service", 928 | "tracing", 929 | ] 930 | 931 | [[package]] 932 | name = "tower-layer" 933 | version = "0.3.2" 934 | source = "registry+https://github.com/rust-lang/crates.io-index" 935 | checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" 936 | 937 | [[package]] 938 | name = "tower-service" 939 | version = "0.3.2" 940 | source = "registry+https://github.com/rust-lang/crates.io-index" 941 | checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" 942 | 943 | [[package]] 944 | name = "tracing" 945 | version = "0.1.40" 946 | source = "registry+https://github.com/rust-lang/crates.io-index" 947 | checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" 948 | dependencies = [ 949 | "log", 950 | "pin-project-lite", 951 | "tracing-core", 952 | ] 953 | 954 | [[package]] 955 | name = "tracing-core" 956 | version = "0.1.32" 957 | source = "registry+https://github.com/rust-lang/crates.io-index" 958 | checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" 959 | dependencies = [ 960 | "once_cell", 961 | ] 962 | 963 | [[package]] 964 | name = "unicode-ident" 965 | version = "1.0.12" 966 | source = "registry+https://github.com/rust-lang/crates.io-index" 967 | checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" 968 | 969 | [[package]] 970 | name = "utf8parse" 971 | version = "0.2.1" 972 | source = "registry+https://github.com/rust-lang/crates.io-index" 973 | checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" 974 | 975 | [[package]] 976 | name = "value-trait" 977 | version = "0.8.1" 978 | source = "registry+https://github.com/rust-lang/crates.io-index" 979 | checksum = "dad8db98c1e677797df21ba03fca7d3bf9bec3ca38db930954e4fe6e1ea27eb4" 980 | dependencies = [ 981 | "float-cmp", 982 | "halfbrown", 983 | "itoa", 984 | "ryu", 985 | ] 986 | 987 | [[package]] 988 | name = "version_check" 989 | version = "0.9.4" 990 | source = "registry+https://github.com/rust-lang/crates.io-index" 991 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 992 | 993 | [[package]] 994 | name = "wasi" 995 | version = "0.11.0+wasi-snapshot-preview1" 996 | source = "registry+https://github.com/rust-lang/crates.io-index" 997 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 998 | 999 | [[package]] 1000 | name = "wasm-bindgen" 1001 | version = "0.2.91" 1002 | source = "registry+https://github.com/rust-lang/crates.io-index" 1003 | checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" 1004 | dependencies = [ 1005 | "cfg-if", 1006 | "wasm-bindgen-macro", 1007 | ] 1008 | 1009 | [[package]] 1010 | name = "wasm-bindgen-backend" 1011 | version = "0.2.91" 1012 | source = "registry+https://github.com/rust-lang/crates.io-index" 1013 | checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" 1014 | dependencies = [ 1015 | "bumpalo", 1016 | "log", 1017 | "once_cell", 1018 | "proc-macro2", 1019 | "quote", 1020 | "syn", 1021 | "wasm-bindgen-shared", 1022 | ] 1023 | 1024 | [[package]] 1025 | name = "wasm-bindgen-macro" 1026 | version = "0.2.91" 1027 | source = "registry+https://github.com/rust-lang/crates.io-index" 1028 | checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" 1029 | dependencies = [ 1030 | "quote", 1031 | "wasm-bindgen-macro-support", 1032 | ] 1033 | 1034 | [[package]] 1035 | name = "wasm-bindgen-macro-support" 1036 | version = "0.2.91" 1037 | source = "registry+https://github.com/rust-lang/crates.io-index" 1038 | checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" 1039 | dependencies = [ 1040 | "proc-macro2", 1041 | "quote", 1042 | "syn", 1043 | "wasm-bindgen-backend", 1044 | "wasm-bindgen-shared", 1045 | ] 1046 | 1047 | [[package]] 1048 | name = "wasm-bindgen-shared" 1049 | version = "0.2.91" 1050 | source = "registry+https://github.com/rust-lang/crates.io-index" 1051 | checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" 1052 | 1053 | [[package]] 1054 | name = "windows-sys" 1055 | version = "0.48.0" 1056 | source = "registry+https://github.com/rust-lang/crates.io-index" 1057 | checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 1058 | dependencies = [ 1059 | "windows-targets 0.48.5", 1060 | ] 1061 | 1062 | [[package]] 1063 | name = "windows-sys" 1064 | version = "0.52.0" 1065 | source = "registry+https://github.com/rust-lang/crates.io-index" 1066 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 1067 | dependencies = [ 1068 | "windows-targets 0.52.0", 1069 | ] 1070 | 1071 | [[package]] 1072 | name = "windows-targets" 1073 | version = "0.48.5" 1074 | source = "registry+https://github.com/rust-lang/crates.io-index" 1075 | checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 1076 | dependencies = [ 1077 | "windows_aarch64_gnullvm 0.48.5", 1078 | "windows_aarch64_msvc 0.48.5", 1079 | "windows_i686_gnu 0.48.5", 1080 | "windows_i686_msvc 0.48.5", 1081 | "windows_x86_64_gnu 0.48.5", 1082 | "windows_x86_64_gnullvm 0.48.5", 1083 | "windows_x86_64_msvc 0.48.5", 1084 | ] 1085 | 1086 | [[package]] 1087 | name = "windows-targets" 1088 | version = "0.52.0" 1089 | source = "registry+https://github.com/rust-lang/crates.io-index" 1090 | checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" 1091 | dependencies = [ 1092 | "windows_aarch64_gnullvm 0.52.0", 1093 | "windows_aarch64_msvc 0.52.0", 1094 | "windows_i686_gnu 0.52.0", 1095 | "windows_i686_msvc 0.52.0", 1096 | "windows_x86_64_gnu 0.52.0", 1097 | "windows_x86_64_gnullvm 0.52.0", 1098 | "windows_x86_64_msvc 0.52.0", 1099 | ] 1100 | 1101 | [[package]] 1102 | name = "windows_aarch64_gnullvm" 1103 | version = "0.48.5" 1104 | source = "registry+https://github.com/rust-lang/crates.io-index" 1105 | checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 1106 | 1107 | [[package]] 1108 | name = "windows_aarch64_gnullvm" 1109 | version = "0.52.0" 1110 | source = "registry+https://github.com/rust-lang/crates.io-index" 1111 | checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" 1112 | 1113 | [[package]] 1114 | name = "windows_aarch64_msvc" 1115 | version = "0.48.5" 1116 | source = "registry+https://github.com/rust-lang/crates.io-index" 1117 | checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 1118 | 1119 | [[package]] 1120 | name = "windows_aarch64_msvc" 1121 | version = "0.52.0" 1122 | source = "registry+https://github.com/rust-lang/crates.io-index" 1123 | checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" 1124 | 1125 | [[package]] 1126 | name = "windows_i686_gnu" 1127 | version = "0.48.5" 1128 | source = "registry+https://github.com/rust-lang/crates.io-index" 1129 | checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 1130 | 1131 | [[package]] 1132 | name = "windows_i686_gnu" 1133 | version = "0.52.0" 1134 | source = "registry+https://github.com/rust-lang/crates.io-index" 1135 | checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" 1136 | 1137 | [[package]] 1138 | name = "windows_i686_msvc" 1139 | version = "0.48.5" 1140 | source = "registry+https://github.com/rust-lang/crates.io-index" 1141 | checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 1142 | 1143 | [[package]] 1144 | name = "windows_i686_msvc" 1145 | version = "0.52.0" 1146 | source = "registry+https://github.com/rust-lang/crates.io-index" 1147 | checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" 1148 | 1149 | [[package]] 1150 | name = "windows_x86_64_gnu" 1151 | version = "0.48.5" 1152 | source = "registry+https://github.com/rust-lang/crates.io-index" 1153 | checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 1154 | 1155 | [[package]] 1156 | name = "windows_x86_64_gnu" 1157 | version = "0.52.0" 1158 | source = "registry+https://github.com/rust-lang/crates.io-index" 1159 | checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" 1160 | 1161 | [[package]] 1162 | name = "windows_x86_64_gnullvm" 1163 | version = "0.48.5" 1164 | source = "registry+https://github.com/rust-lang/crates.io-index" 1165 | checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 1166 | 1167 | [[package]] 1168 | name = "windows_x86_64_gnullvm" 1169 | version = "0.52.0" 1170 | source = "registry+https://github.com/rust-lang/crates.io-index" 1171 | checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" 1172 | 1173 | [[package]] 1174 | name = "windows_x86_64_msvc" 1175 | version = "0.48.5" 1176 | source = "registry+https://github.com/rust-lang/crates.io-index" 1177 | checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 1178 | 1179 | [[package]] 1180 | name = "windows_x86_64_msvc" 1181 | version = "0.52.0" 1182 | source = "registry+https://github.com/rust-lang/crates.io-index" 1183 | checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" 1184 | 1185 | [[package]] 1186 | name = "zerocopy" 1187 | version = "0.7.32" 1188 | source = "registry+https://github.com/rust-lang/crates.io-index" 1189 | checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" 1190 | dependencies = [ 1191 | "zerocopy-derive", 1192 | ] 1193 | 1194 | [[package]] 1195 | name = "zerocopy-derive" 1196 | version = "0.7.32" 1197 | source = "registry+https://github.com/rust-lang/crates.io-index" 1198 | checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" 1199 | dependencies = [ 1200 | "proc-macro2", 1201 | "quote", 1202 | "syn", 1203 | ] 1204 | -------------------------------------------------------------------------------- /axum/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "hello_world_axum_server" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | [dependencies] 7 | axum = "0.7.4" 8 | clap = { version = "4.5.1", features = ["derive"] } 9 | lazy_static = "1.4.0" 10 | serde_json = "1.0.113" 11 | simd-json = "0.13.8" 12 | tokio = { version="1.36.0", features=[ "rt-multi-thread",]} 13 | -------------------------------------------------------------------------------- /axum/README.md: -------------------------------------------------------------------------------- 1 | # Axum HelloWorld and JSON echo HTTP Server 2 | 3 | ## Run PGO 4 | 5 | Install pgo utility and build an introspected server: 6 | 7 | cargo install cargo-pgo 8 | cargo pgo build 9 | 10 | Run the output binary with `-m -a` for multi-threaded and auto-termination. 11 | Note, the profile data will only be written upon "successful" termination. 12 | While the server is running, hammer it with e.g. `wrk`: 13 | 14 | wrk -c 10 -t 10 -d 60s --latency -s wrk_post.lua 'http://localhost:3000/' 15 | 16 | Afterwards build an optimized binary with: 17 | 18 | cargo pgo optimize 19 | 20 | That's it. 21 | 22 | ## Results 23 | 24 | We found a 36% reduction in avg Latency and a 58% increase in throughput. 25 | 26 | Before: 27 | 28 | ``` 29 | Running 10s test @ http://localhost:3000/ 30 | 10 threads and 10 connections 31 | Thread Stats Avg Stdev Max +/- Stdev 32 | Latency 277.29us 72.44us 1.15ms 83.31% 33 | Req/Sec 3.60k 217.95 4.81k 83.66% 34 | Latency Distribution 35 | 50% 268.00us 36 | 75% 290.00us 37 | 90% 367.00us 38 | 99% 507.00us 39 | 361778 requests in 10.10s, 8.30GB read 40 | Requests/sec: 35821.90 41 | Transfer/sec: 841.73MB 42 | ``` 43 | 44 | After: 45 | ``` 46 | Running 10s test @ http://localhost:3000/ 47 | 10 threads and 10 connections 48 | Thread Stats Avg Stdev Max +/- Stdev 49 | Latency 175.23us 26.44us 1.05ms 66.79% 50 | Req/Sec 5.69k 120.66 6.00k 73.76% 51 | Latency Distribution 52 | 50% 180.00us 53 | 75% 194.00us 54 | 90% 204.00us 55 | 99% 241.00us 56 | 571877 requests in 10.10s, 13.12GB read 57 | Requests/sec: 56621.88 58 | Transfer/sec: 1.30GB 59 | ``` 60 | 61 | -------------------------------------------------------------------------------- /axum/src/main.rs: -------------------------------------------------------------------------------- 1 | use axum::{ 2 | routing::{get, post}, 3 | Router, 4 | }; 5 | use clap::Parser; 6 | use lazy_static::lazy_static; 7 | use serde_json::Value; 8 | use simd_json::{to_borrowed_value, to_string}; 9 | use tokio::runtime::{Builder, Runtime}; 10 | 11 | lazy_static! { 12 | static ref MTRT: Runtime = Builder::new_multi_thread().enable_all().build().unwrap(); 13 | } 14 | 15 | #[derive(Parser, Debug)] 16 | #[command(version, about, long_about = None)] 17 | struct Args { 18 | #[arg(long, short)] 19 | pub multi_threaded: bool, 20 | 21 | #[arg(long, short)] 22 | pub simd_json: bool, 23 | 24 | #[arg(long, short)] 25 | pub auto_terminate: bool, 26 | } 27 | 28 | async fn run_server(args: &Args) { 29 | let address = "0.0.0.0:3000"; 30 | println!( 31 | "Listening on {address} ({env}) using {json}", 32 | env = if args.multi_threaded { "MT" } else { "ST" }, 33 | json = if args.simd_json { "SIMD" } else { "Serde" }, 34 | ); 35 | 36 | let serde_post_handler = |req: axum::extract::Request| async { 37 | let b = axum::body::to_bytes(req.into_body(), usize::MAX) 38 | .await 39 | .unwrap(); 40 | let v: Value = serde_json::from_slice(&b).unwrap(); 41 | serde_json::to_string(&v).unwrap() 42 | }; 43 | let simd_post_handler = |req: axum::extract::Request| async { 44 | let b: axum::body::Bytes = axum::body::to_bytes(req.into_body(), usize::MAX) 45 | .await 46 | .unwrap(); 47 | let mut vec = b.to_vec(); 48 | let v: simd_json::BorrowedValue = to_borrowed_value(vec.as_mut_slice()).unwrap(); 49 | to_string(&v).unwrap() 50 | }; 51 | 52 | let app = Router::new() 53 | .route("/", get(|| async { "Hello World" })) 54 | .route( 55 | "/", 56 | if args.simd_json { 57 | post(simd_post_handler) 58 | } else { 59 | post(serde_post_handler) 60 | }, 61 | ); 62 | 63 | let listener = tokio::net::TcpListener::bind(address).await.unwrap(); 64 | axum::serve(listener, app).await.unwrap(); 65 | } 66 | 67 | #[tokio::main(flavor = "current_thread")] 68 | async fn main() { 69 | let args = Args::parse(); 70 | 71 | let runtime = match args.multi_threaded { 72 | false => tokio::runtime::Handle::current(), 73 | true => MTRT.handle().clone(), 74 | }; 75 | 76 | let auto_terminate = args.auto_terminate; 77 | let mut interval = { 78 | let period = tokio::time::Duration::from_secs(60 as u64); 79 | tokio::time::interval_at(tokio::time::Instant::now() + period, period) 80 | }; 81 | 82 | tokio::select! { 83 | res = runtime.spawn(async move { run_server(&args).await }) => { 84 | println!("Server stopped: {res:?}"); 85 | }, 86 | _ = if auto_terminate {interval.tick()} else { std::future::pending().await } => { 87 | println!("Timer expired"); 88 | } 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /axum/wrk_post.lua: -------------------------------------------------------------------------------- 1 | wrk.method = "POST" 2 | wrk.headers["Content-Type"] = "application/json" 3 | 4 | file = io.open("../testdata/posts.json", "rb") 5 | wrk.body = file:read("*a") 6 | -------------------------------------------------------------------------------- /benchmark.dart: -------------------------------------------------------------------------------- 1 | import 'dart:io'; 2 | 3 | Future bench( 4 | String name, 5 | String cmd, { 6 | required String path, 7 | required String benchmarkCmd, 8 | String? warmupCmd, 9 | String? setupCmd, 10 | String? versionCmd, 11 | String? cwd, 12 | }) async { 13 | print('=== BEGIN $name ==='); 14 | 15 | final log = (File('$path/$name.log')..createSync(recursive: true)) 16 | .openWrite(mode: FileMode.append); 17 | 18 | ProcessResult run(String cmd, [StringSink? sink]) { 19 | ProcessResult? r; 20 | try { 21 | r = Process.runSync('sh', ['-c', cmd], workingDirectory: cwd); 22 | (sink ?? log) 23 | ..writeln(r.stdout) 24 | ..writeln(r.stderr); 25 | return r; 26 | } catch (err, st) { 27 | Error.throwWithStackTrace('CMD "$cmd" [${r?.exitCode}]: $err', st); 28 | } 29 | } 30 | 31 | Process? process; 32 | try { 33 | if (versionCmd != null) run(versionCmd); 34 | if (setupCmd != null) run(setupCmd); 35 | 36 | process = await Process.start( 37 | 'sh', 38 | ['-c', 'time $cmd'], 39 | workingDirectory: cwd, 40 | mode: ProcessStartMode.normal, 41 | ); 42 | process.stderr.forEach((bytes) => log.add(bytes)).whenComplete(log.close); 43 | 44 | // Scientifically chosen, *correct* wait period for the server to come up. 45 | await Future.delayed(Duration(seconds: 2)); 46 | 47 | run(warmupCmd ?? benchmarkCmd, StringBuffer()); 48 | print(run(benchmarkCmd).stdout); 49 | } finally { 50 | if (process != null) { 51 | run('kill \$(lsof -t -i:3000)'); 52 | } 53 | } 54 | 55 | print('=== END: $name ===\n'); 56 | } 57 | 58 | Future runHelloWorld() async { 59 | const benchmarkCmd = 'wrk -c 10 -t 10 -d 30s --latency http://localhost:3000'; 60 | const warmupCmd = 'wrk -c 10 -t 10 -d 5s http://localhost:3000'; 61 | 62 | Future run( 63 | String name, 64 | String cmd, { 65 | String? setupCmd, 66 | String? versionCmd, 67 | String? cwd, 68 | }) => 69 | bench( 70 | name, 71 | cmd, 72 | path: 'output_hello_world', 73 | setupCmd: setupCmd, 74 | versionCmd: versionCmd, 75 | cwd: cwd, 76 | benchmarkCmd: benchmarkCmd, 77 | warmupCmd: warmupCmd, 78 | ); 79 | 80 | await run('node', 'node node.js', versionCmd: 'node -v'); 81 | await run('deno', 'deno run --allow-net deno.ts', 82 | versionCmd: 'deno --version'); 83 | await run('bun', 'bun bun.ts', versionCmd: 'bun --version'); 84 | 85 | await run('go', '/tmp/goserver', 86 | setupCmd: 'go build -o /tmp/goserver go.go', versionCmd: 'go version'); 87 | 88 | const dartVersionCmd = 'dart --version'; 89 | await run('dart_jit', 'dart run dart.dart', versionCmd: dartVersionCmd); 90 | await run( 91 | 'dart_aot', 92 | '/tmp/dart_aot', 93 | setupCmd: 'dart compile exe dart.dart -o /tmp/dart_aot', 94 | versionCmd: dartVersionCmd, 95 | ); 96 | 97 | const axumBuild = 98 | 'cargo +nightly build -Z unstable-options --release --out-dir=/tmp/'; 99 | const rustVersionCmd = 'cargo +nightly version'; 100 | await run('axum_mt', '/tmp/hello_world_axum_server m', 101 | setupCmd: axumBuild, versionCmd: rustVersionCmd, cwd: 'axum'); 102 | await run('axum_st', '/tmp/hello_world_axum_server', 103 | setupCmd: axumBuild, versionCmd: rustVersionCmd, cwd: 'axum'); 104 | 105 | final dartAxumVersionCmd = '$dartVersionCmd && $rustVersionCmd'; 106 | await run( 107 | 'dart_axum_jit', 108 | 'dart --enable-experiment=native-assets run bin/main.dart', 109 | setupCmd: 'dart --enable-experiment=native-assets run bin/main.dart build', 110 | versionCmd: dartAxumVersionCmd, 111 | cwd: 'dart_axum_tokio', 112 | ); 113 | await run( 114 | 'dart_axum_aot', 115 | '/tmp/dart_axum_aot', 116 | setupCmd: 117 | 'dart --enable-experiment=native-assets compile exe bin/main.dart -o /tmp/dart_axum_aot', 118 | versionCmd: dartAxumVersionCmd, 119 | cwd: 'dart_axum_tokio', 120 | ); 121 | } 122 | 123 | Future runJsonEcho() async { 124 | const script = 'wrk_post.lua'; 125 | final benchmarkCmd = 126 | 'wrk -c 10 -t 10 -d 30s --latency -s $script http://localhost:3000/'; 127 | final warmupCmd = 'wrk -c 10 -t 10 -d 5s -s $script http://localhost:3000/'; 128 | 129 | Future run( 130 | String name, 131 | String cmd, { 132 | String? setupCmd, 133 | String? versionCmd, 134 | String? cwd, 135 | }) => 136 | bench( 137 | name, 138 | cmd, 139 | path: 'output_json_echo', 140 | setupCmd: setupCmd, 141 | versionCmd: versionCmd, 142 | cwd: cwd, 143 | benchmarkCmd: benchmarkCmd, 144 | warmupCmd: warmupCmd, 145 | ); 146 | 147 | await run('node', 'node node.js', versionCmd: 'node -v'); 148 | await run('deno', 'deno run --allow-net deno.ts', 149 | versionCmd: 'deno --version'); 150 | await run('bun', 'bun bun.ts', versionCmd: 'bun --version'); 151 | 152 | await run('go', '/tmp/goserver', 153 | setupCmd: 'go build -o /tmp/goserver go.go', versionCmd: 'go version'); 154 | 155 | const dartVersionCmd = 'dart --version'; 156 | await run('dart_jit', 'dart run dart.dart', versionCmd: dartVersionCmd); 157 | await run( 158 | 'dart_aot', 159 | '/tmp/dart_aot', 160 | setupCmd: 'dart compile exe dart.dart -o /tmp/dart_aot', 161 | versionCmd: dartVersionCmd, 162 | ); 163 | 164 | const axumBuild = 165 | 'cargo +nightly build -Z unstable-options --release --out-dir=/tmp/'; 166 | const rustVersionCmd = 'cargo +nightly version'; 167 | await run('axum_mt_serde', '/tmp/hello_world_axum_server -m', 168 | setupCmd: axumBuild, versionCmd: rustVersionCmd, cwd: 'axum'); 169 | await run('axum_st_serde', '/tmp/hello_world_axum_server', 170 | setupCmd: axumBuild, versionCmd: rustVersionCmd, cwd: 'axum'); 171 | 172 | await run('axum_mt_simd', '/tmp/hello_world_axum_server -m -s', 173 | setupCmd: axumBuild, versionCmd: rustVersionCmd, cwd: 'axum'); 174 | await run('axum_st_simd', '/tmp/hello_world_axum_server -s', 175 | setupCmd: axumBuild, versionCmd: rustVersionCmd, cwd: 'axum'); 176 | 177 | final dartAxumVersionCmd = '$dartVersionCmd && $rustVersionCmd'; 178 | await run( 179 | 'dart_axum_aot', 180 | '/tmp/dart_axum_aot', 181 | setupCmd: 182 | 'dart --enable-experiment=native-assets compile exe bin/main.dart -o /tmp/dart_axum_aot', 183 | versionCmd: dartAxumVersionCmd, 184 | cwd: 'dart_axum_tokio', 185 | ); 186 | } 187 | 188 | Future main(List arguments) async { 189 | //await runHelloWorld(); 190 | await runJsonEcho(); 191 | } 192 | -------------------------------------------------------------------------------- /bun.ts: -------------------------------------------------------------------------------- 1 | let foo = 52; 2 | 3 | const server = Bun.serve({ 4 | port: 3000, 5 | fetch: async (req: Request) => { 6 | if (req.method == "GET") { 7 | return new Response("Hello World"); 8 | } else if (req.method == "POST") { 9 | const body = req.body; 10 | const json = await Bun.readableStreamToJSON(body); 11 | return new Response(JSON.stringify(json)); 12 | } 13 | return new Response("Not implemented"); 14 | }, 15 | }); 16 | 17 | console.log(`Listening on localhost:${server.port}`); 18 | -------------------------------------------------------------------------------- /dart.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | import 'dart:io'; 3 | 4 | void main() async { 5 | const host = '127.0.0.1'; 6 | const port = 3000; 7 | 8 | print('Starting server at $host:$port'); 9 | 10 | final server = await HttpServer.bind(host, port); 11 | await server.forEach((HttpRequest request) async { 12 | switch (request.method) { 13 | case 'GET': 14 | request.response.write('Hello World'); 15 | request.response.close(); 16 | break; 17 | case 'POST': 18 | request.response 19 | .addStream(encoder.bind(jsonDecoder.bind(decoder.bind(request)))) 20 | .then((_) => request.response.close()); 21 | break; 22 | default: 23 | request.response.close(); 24 | break; 25 | } 26 | }); 27 | } 28 | 29 | final encoder = JsonUtf8Encoder(); 30 | final jsonDecoder = JsonDecoder(); 31 | final decoder = Utf8Decoder(); 32 | -------------------------------------------------------------------------------- /dart_axum_tokio/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | migrate_working_dir/ 12 | 13 | # IntelliJ related 14 | *.iml 15 | *.ipr 16 | *.iws 17 | .idea/ 18 | 19 | # The .vscode folder contains launch configuration and tasks you configure in 20 | # VS Code which you may wish to be included in version control, so this line 21 | # is commented out by default. 22 | #.vscode/ 23 | 24 | # Flutter/Dart/Pub related 25 | **/doc/api/ 26 | **/ios/Flutter/.last_build_id 27 | .dart_tool/ 28 | .flutter-plugins 29 | .flutter-plugins-dependencies 30 | .packages 31 | .pub-cache/ 32 | .pub/ 33 | /build/ 34 | 35 | # Symbolication related 36 | app.*.symbols 37 | 38 | # Obfuscation related 39 | app.*.map.json 40 | 41 | # Android Studio will place build artifacts here 42 | /android/app/debug 43 | /android/app/profile 44 | /android/app/release 45 | 46 | /rust/target 47 | -------------------------------------------------------------------------------- /dart_axum_tokio/README.md: -------------------------------------------------------------------------------- 1 | # Dart + Axum + Tokio server 2 | 3 | Starts an Axum+Tokio HTTP server with "/" being served by a Dart callback. 4 | -------------------------------------------------------------------------------- /dart_axum_tokio/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | analyzer: 2 | exclude: 3 | - rust/target/**.dart # contains dumped debug info, instead of normal code 4 | - vendor/flutter_rust_bridge/** 5 | -------------------------------------------------------------------------------- /dart_axum_tokio/bin/main.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | import 'dart:convert'; 3 | import 'dart:typed_data'; 4 | 5 | import 'package:dart_axum_tokio_sever/dart_axum_tokio_sever.dart'; 6 | 7 | Future main(List arguments) async { 8 | if (arguments.isNotEmpty && arguments.first == 'build') { 9 | print('build only'); 10 | return; 11 | } 12 | 13 | await RustLib.init(); 14 | 15 | final success = await startServer( 16 | dartGetCallback: () => utf8.encode('Hello Dart!'), 17 | // dartPostCallback: (Uint8List body) => 18 | // utf8.encode(jsonEncode(jsonDecode(utf8.decode(body)))), 19 | dartPostCallback: (Uint8List body) async => 20 | await rustJsonEncode(v: await rustJsonDecode(s: body)), 21 | ); 22 | if (success) { 23 | print('Dart: server running...'); 24 | Timer(Duration(hours: 1), () {}); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /dart_axum_tokio/build.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_rust_bridge_utils/flutter_rust_bridge_utils.dart'; 2 | 3 | void main(List args) async => simpleBuild(args); 4 | -------------------------------------------------------------------------------- /dart_axum_tokio/flutter_rust_bridge.yaml: -------------------------------------------------------------------------------- 1 | # See `pure_dart` example for comments on the configs 2 | rust_input: rust/src/api/**/*.rs 3 | dart_output: lib/src/rust 4 | c_output: frb_generated.h 5 | dump_all: true 6 | local: true 7 | -------------------------------------------------------------------------------- /dart_axum_tokio/frb_generated.h: -------------------------------------------------------------------------------- 1 | // Nothing when using full_dep=false mode -------------------------------------------------------------------------------- /dart_axum_tokio/lib/dart_axum_tokio_sever.dart: -------------------------------------------------------------------------------- 1 | export 'package:dart_axum_tokio_sever/src/rust/api/minimal.dart'; 2 | export 'package:dart_axum_tokio_sever/src/rust/frb_generated.dart'; 3 | -------------------------------------------------------------------------------- /dart_axum_tokio/lib/src/rust/api/minimal.dart: -------------------------------------------------------------------------------- 1 | // This file is automatically generated, so please do not edit it. 2 | // Generated by `flutter_rust_bridge`@ 2.0.0-dev.24. 3 | 4 | // ignore_for_file: invalid_use_of_internal_member, unused_import, unnecessary_import 5 | 6 | import '../frb_generated.dart'; 7 | import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart'; 8 | 9 | Future rustJsonDecode( 10 | {required List s, dynamic hint}) => 11 | RustLib.instance.api.rustJsonDecode(s: s, hint: hint); 12 | 13 | Future rustJsonEncode( 14 | {required SimdJsonOwnedValue v, dynamic hint}) => 15 | RustLib.instance.api.rustJsonEncode(v: v, hint: hint); 16 | 17 | Future startServer( 18 | {required FutureOr Function() dartGetCallback, 19 | required FutureOr Function(Uint8List) dartPostCallback, 20 | dynamic hint}) => 21 | RustLib.instance.api.startServer( 22 | dartGetCallback: dartGetCallback, 23 | dartPostCallback: dartPostCallback, 24 | hint: hint); 25 | 26 | // Rust type: RustOpaqueMoi> 27 | @sealed 28 | class SimdJsonError extends RustOpaque { 29 | SimdJsonError.dcoDecode(List wire) 30 | : super.dcoDecode(wire, _kStaticData); 31 | 32 | SimdJsonError.sseDecode(int ptr, int externalSizeOnNative) 33 | : super.sseDecode(ptr, externalSizeOnNative, _kStaticData); 34 | 35 | static final _kStaticData = RustArcStaticData( 36 | rustArcIncrementStrongCount: 37 | RustLib.instance.api.rust_arc_increment_strong_count_SimdJsonError, 38 | rustArcDecrementStrongCount: 39 | RustLib.instance.api.rust_arc_decrement_strong_count_SimdJsonError, 40 | rustArcDecrementStrongCountPtr: 41 | RustLib.instance.api.rust_arc_decrement_strong_count_SimdJsonErrorPtr, 42 | ); 43 | } 44 | 45 | // Rust type: RustOpaqueMoi> 46 | @sealed 47 | class SimdJsonOwnedValue extends RustOpaque { 48 | SimdJsonOwnedValue.dcoDecode(List wire) 49 | : super.dcoDecode(wire, _kStaticData); 50 | 51 | SimdJsonOwnedValue.sseDecode(int ptr, int externalSizeOnNative) 52 | : super.sseDecode(ptr, externalSizeOnNative, _kStaticData); 53 | 54 | static final _kStaticData = RustArcStaticData( 55 | rustArcIncrementStrongCount: 56 | RustLib.instance.api.rust_arc_increment_strong_count_SimdJsonOwnedValue, 57 | rustArcDecrementStrongCount: 58 | RustLib.instance.api.rust_arc_decrement_strong_count_SimdJsonOwnedValue, 59 | rustArcDecrementStrongCountPtr: RustLib 60 | .instance.api.rust_arc_decrement_strong_count_SimdJsonOwnedValuePtr, 61 | ); 62 | } 63 | -------------------------------------------------------------------------------- /dart_axum_tokio/lib/src/rust/frb_generated.dart: -------------------------------------------------------------------------------- 1 | // This file is automatically generated, so please do not edit it. 2 | // Generated by `flutter_rust_bridge`@ 2.0.0-dev.24. 3 | 4 | // ignore_for_file: unused_import, unused_element, unnecessary_import, duplicate_ignore, invalid_use_of_internal_member, annotate_overrides, non_constant_identifier_names, curly_braces_in_flow_control_structures, prefer_const_literals_to_create_immutables, unused_field 5 | 6 | import 'api/minimal.dart'; 7 | import 'dart:async'; 8 | import 'dart:convert'; 9 | import 'frb_generated.io.dart' if (dart.library.html) 'frb_generated.web.dart'; 10 | import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart'; 11 | 12 | /// Main entrypoint of the Rust API 13 | class RustLib extends BaseEntrypoint { 14 | @internal 15 | static final instance = RustLib._(); 16 | 17 | RustLib._(); 18 | 19 | /// Initialize flutter_rust_bridge 20 | static Future init({ 21 | RustLibApi? api, 22 | BaseHandler? handler, 23 | ExternalLibrary? externalLibrary, 24 | }) async { 25 | await instance.initImpl( 26 | api: api, 27 | handler: handler, 28 | externalLibrary: externalLibrary, 29 | ); 30 | } 31 | 32 | /// Dispose flutter_rust_bridge 33 | /// 34 | /// The call to this function is optional, since flutter_rust_bridge (and everything else) 35 | /// is automatically disposed when the app stops. 36 | static void dispose() => instance.disposeImpl(); 37 | 38 | @override 39 | ApiImplConstructor get apiImplConstructor => 40 | RustLibApiImpl.new; 41 | 42 | @override 43 | WireConstructor get wireConstructor => 44 | RustLibWire.fromExternalLibrary; 45 | 46 | @override 47 | Future executeRustInitializers() async { 48 | await api.initApp(); 49 | } 50 | 51 | @override 52 | ExternalLibraryLoaderConfig get defaultExternalLibraryLoaderConfig => 53 | kDefaultExternalLibraryLoaderConfig; 54 | 55 | @override 56 | String get codegenVersion => '2.0.0-dev.24'; 57 | 58 | static const kDefaultExternalLibraryLoaderConfig = 59 | ExternalLibraryLoaderConfig( 60 | stem: 'dart_axum_tokio_sever', 61 | ioDirectory: 'rust/target/release/', 62 | webPrefix: 'pkg/', 63 | ); 64 | } 65 | 66 | abstract class RustLibApi extends BaseApi { 67 | Future initApp({dynamic hint}); 68 | 69 | Future rustJsonDecode( 70 | {required List s, dynamic hint}); 71 | 72 | Future rustJsonEncode( 73 | {required SimdJsonOwnedValue v, dynamic hint}); 74 | 75 | Future startServer( 76 | {required FutureOr Function() dartGetCallback, 77 | required FutureOr Function(Uint8List) dartPostCallback, 78 | dynamic hint}); 79 | 80 | RustArcIncrementStrongCountFnType 81 | get rust_arc_increment_strong_count_SimdJsonError; 82 | 83 | RustArcDecrementStrongCountFnType 84 | get rust_arc_decrement_strong_count_SimdJsonError; 85 | 86 | CrossPlatformFinalizerArg 87 | get rust_arc_decrement_strong_count_SimdJsonErrorPtr; 88 | 89 | RustArcIncrementStrongCountFnType 90 | get rust_arc_increment_strong_count_SimdJsonOwnedValue; 91 | 92 | RustArcDecrementStrongCountFnType 93 | get rust_arc_decrement_strong_count_SimdJsonOwnedValue; 94 | 95 | CrossPlatformFinalizerArg 96 | get rust_arc_decrement_strong_count_SimdJsonOwnedValuePtr; 97 | } 98 | 99 | class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { 100 | RustLibApiImpl({ 101 | required super.handler, 102 | required super.wire, 103 | required super.generalizedFrbRustBinding, 104 | required super.portManager, 105 | }); 106 | 107 | @override 108 | Future initApp({dynamic hint}) { 109 | return handler.executeNormal(NormalTask( 110 | callFfi: (port_) { 111 | final serializer = SseSerializer(generalizedFrbRustBinding); 112 | pdeCallFfi(generalizedFrbRustBinding, serializer, 113 | funcId: 1, port: port_); 114 | }, 115 | codec: SseCodec( 116 | decodeSuccessData: sse_decode_unit, 117 | decodeErrorData: null, 118 | ), 119 | constMeta: kInitAppConstMeta, 120 | argValues: [], 121 | apiImpl: this, 122 | hint: hint, 123 | )); 124 | } 125 | 126 | TaskConstMeta get kInitAppConstMeta => const TaskConstMeta( 127 | debugName: "init_app", 128 | argNames: [], 129 | ); 130 | 131 | @override 132 | Future rustJsonDecode( 133 | {required List s, dynamic hint}) { 134 | return handler.executeNormal(NormalTask( 135 | callFfi: (port_) { 136 | final serializer = SseSerializer(generalizedFrbRustBinding); 137 | sse_encode_list_prim_u_8_loose(s, serializer); 138 | pdeCallFfi(generalizedFrbRustBinding, serializer, 139 | funcId: 2, port: port_); 140 | }, 141 | codec: SseCodec( 142 | decodeSuccessData: 143 | sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue, 144 | decodeErrorData: 145 | sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError, 146 | ), 147 | constMeta: kRustJsonDecodeConstMeta, 148 | argValues: [s], 149 | apiImpl: this, 150 | hint: hint, 151 | )); 152 | } 153 | 154 | TaskConstMeta get kRustJsonDecodeConstMeta => const TaskConstMeta( 155 | debugName: "rustJsonDecode", 156 | argNames: ["s"], 157 | ); 158 | 159 | @override 160 | Future rustJsonEncode( 161 | {required SimdJsonOwnedValue v, dynamic hint}) { 162 | return handler.executeNormal(NormalTask( 163 | callFfi: (port_) { 164 | final serializer = SseSerializer(generalizedFrbRustBinding); 165 | sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue( 166 | v, serializer); 167 | pdeCallFfi(generalizedFrbRustBinding, serializer, 168 | funcId: 3, port: port_); 169 | }, 170 | codec: SseCodec( 171 | decodeSuccessData: sse_decode_list_prim_u_8_strict, 172 | decodeErrorData: 173 | sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError, 174 | ), 175 | constMeta: kRustJsonEncodeConstMeta, 176 | argValues: [v], 177 | apiImpl: this, 178 | hint: hint, 179 | )); 180 | } 181 | 182 | TaskConstMeta get kRustJsonEncodeConstMeta => const TaskConstMeta( 183 | debugName: "rustJsonEncode", 184 | argNames: ["v"], 185 | ); 186 | 187 | @override 188 | Future startServer( 189 | {required FutureOr Function() dartGetCallback, 190 | required FutureOr Function(Uint8List) dartPostCallback, 191 | dynamic hint}) { 192 | return handler.executeNormal(NormalTask( 193 | callFfi: (port_) { 194 | final serializer = SseSerializer(generalizedFrbRustBinding); 195 | sse_encode_DartFn_Inputs__Output_list_prim_u_8_strict( 196 | dartGetCallback, serializer); 197 | sse_encode_DartFn_Inputs_list_prim_u_8_strict_Output_list_prim_u_8_strict( 198 | dartPostCallback, serializer); 199 | pdeCallFfi(generalizedFrbRustBinding, serializer, 200 | funcId: 4, port: port_); 201 | }, 202 | codec: SseCodec( 203 | decodeSuccessData: sse_decode_bool, 204 | decodeErrorData: null, 205 | ), 206 | constMeta: kStartServerConstMeta, 207 | argValues: [dartGetCallback, dartPostCallback], 208 | apiImpl: this, 209 | hint: hint, 210 | )); 211 | } 212 | 213 | TaskConstMeta get kStartServerConstMeta => const TaskConstMeta( 214 | debugName: "start_server", 215 | argNames: ["dartGetCallback", "dartPostCallback"], 216 | ); 217 | 218 | Future Function( 219 | int, 220 | ) encode_DartFn_Inputs__Output_list_prim_u_8_strict( 221 | FutureOr Function() raw) { 222 | return ( 223 | callId, 224 | ) async { 225 | final rawOutput = await raw(); 226 | 227 | final serializer = SseSerializer(generalizedFrbRustBinding); 228 | sse_encode_list_prim_u_8_strict(rawOutput, serializer); 229 | final output = serializer.intoRaw(); 230 | 231 | generalizedFrbRustBinding.dartFnDeliverOutput( 232 | callId: callId, 233 | ptr: output.ptr, 234 | rustVecLen: output.rustVecLen, 235 | dataLen: output.dataLen); 236 | }; 237 | } 238 | 239 | Future Function(int, dynamic) 240 | encode_DartFn_Inputs_list_prim_u_8_strict_Output_list_prim_u_8_strict( 241 | FutureOr Function(Uint8List) raw) { 242 | return (callId, rawArg0) async { 243 | final arg0 = dco_decode_list_prim_u_8_strict(rawArg0); 244 | 245 | final rawOutput = await raw(arg0); 246 | 247 | final serializer = SseSerializer(generalizedFrbRustBinding); 248 | sse_encode_list_prim_u_8_strict(rawOutput, serializer); 249 | final output = serializer.intoRaw(); 250 | 251 | generalizedFrbRustBinding.dartFnDeliverOutput( 252 | callId: callId, 253 | ptr: output.ptr, 254 | rustVecLen: output.rustVecLen, 255 | dataLen: output.dataLen); 256 | }; 257 | } 258 | 259 | RustArcIncrementStrongCountFnType 260 | get rust_arc_increment_strong_count_SimdJsonError => wire 261 | .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError; 262 | 263 | RustArcDecrementStrongCountFnType 264 | get rust_arc_decrement_strong_count_SimdJsonError => wire 265 | .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError; 266 | 267 | RustArcIncrementStrongCountFnType 268 | get rust_arc_increment_strong_count_SimdJsonOwnedValue => wire 269 | .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue; 270 | 271 | RustArcDecrementStrongCountFnType 272 | get rust_arc_decrement_strong_count_SimdJsonOwnedValue => wire 273 | .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue; 274 | 275 | @protected 276 | SimdJsonError 277 | dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError( 278 | dynamic raw) { 279 | // Codec=Dco (DartCObject based), see doc to use other codecs 280 | return SimdJsonError.dcoDecode(raw as List); 281 | } 282 | 283 | @protected 284 | SimdJsonOwnedValue 285 | dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue( 286 | dynamic raw) { 287 | // Codec=Dco (DartCObject based), see doc to use other codecs 288 | return SimdJsonOwnedValue.dcoDecode(raw as List); 289 | } 290 | 291 | @protected 292 | FutureOr Function() 293 | dco_decode_DartFn_Inputs__Output_list_prim_u_8_strict(dynamic raw) { 294 | // Codec=Dco (DartCObject based), see doc to use other codecs 295 | throw UnimplementedError(''); 296 | } 297 | 298 | @protected 299 | FutureOr Function(Uint8List) 300 | dco_decode_DartFn_Inputs_list_prim_u_8_strict_Output_list_prim_u_8_strict( 301 | dynamic raw) { 302 | // Codec=Dco (DartCObject based), see doc to use other codecs 303 | throw UnimplementedError(''); 304 | } 305 | 306 | @protected 307 | Object dco_decode_DartOpaque(dynamic raw) { 308 | // Codec=Dco (DartCObject based), see doc to use other codecs 309 | return decodeDartOpaque(raw, generalizedFrbRustBinding); 310 | } 311 | 312 | @protected 313 | SimdJsonError 314 | dco_decode_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError( 315 | dynamic raw) { 316 | // Codec=Dco (DartCObject based), see doc to use other codecs 317 | return SimdJsonError.dcoDecode(raw as List); 318 | } 319 | 320 | @protected 321 | SimdJsonOwnedValue 322 | dco_decode_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue( 323 | dynamic raw) { 324 | // Codec=Dco (DartCObject based), see doc to use other codecs 325 | return SimdJsonOwnedValue.dcoDecode(raw as List); 326 | } 327 | 328 | @protected 329 | bool dco_decode_bool(dynamic raw) { 330 | // Codec=Dco (DartCObject based), see doc to use other codecs 331 | return raw as bool; 332 | } 333 | 334 | @protected 335 | List dco_decode_list_prim_u_8_loose(dynamic raw) { 336 | // Codec=Dco (DartCObject based), see doc to use other codecs 337 | return raw as List; 338 | } 339 | 340 | @protected 341 | Uint8List dco_decode_list_prim_u_8_strict(dynamic raw) { 342 | // Codec=Dco (DartCObject based), see doc to use other codecs 343 | return raw as Uint8List; 344 | } 345 | 346 | @protected 347 | int dco_decode_u_8(dynamic raw) { 348 | // Codec=Dco (DartCObject based), see doc to use other codecs 349 | return raw as int; 350 | } 351 | 352 | @protected 353 | void dco_decode_unit(dynamic raw) { 354 | // Codec=Dco (DartCObject based), see doc to use other codecs 355 | return; 356 | } 357 | 358 | @protected 359 | int dco_decode_usize(dynamic raw) { 360 | // Codec=Dco (DartCObject based), see doc to use other codecs 361 | return dcoDecodeI64OrU64(raw); 362 | } 363 | 364 | @protected 365 | SimdJsonError 366 | sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError( 367 | SseDeserializer deserializer) { 368 | // Codec=Sse (Serialization based), see doc to use other codecs 369 | return SimdJsonError.sseDecode( 370 | sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); 371 | } 372 | 373 | @protected 374 | SimdJsonOwnedValue 375 | sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue( 376 | SseDeserializer deserializer) { 377 | // Codec=Sse (Serialization based), see doc to use other codecs 378 | return SimdJsonOwnedValue.sseDecode( 379 | sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); 380 | } 381 | 382 | @protected 383 | Object sse_decode_DartOpaque(SseDeserializer deserializer) { 384 | // Codec=Sse (Serialization based), see doc to use other codecs 385 | var inner = sse_decode_usize(deserializer); 386 | return decodeDartOpaque(inner, generalizedFrbRustBinding); 387 | } 388 | 389 | @protected 390 | SimdJsonError 391 | sse_decode_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError( 392 | SseDeserializer deserializer) { 393 | // Codec=Sse (Serialization based), see doc to use other codecs 394 | return SimdJsonError.sseDecode( 395 | sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); 396 | } 397 | 398 | @protected 399 | SimdJsonOwnedValue 400 | sse_decode_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue( 401 | SseDeserializer deserializer) { 402 | // Codec=Sse (Serialization based), see doc to use other codecs 403 | return SimdJsonOwnedValue.sseDecode( 404 | sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); 405 | } 406 | 407 | @protected 408 | bool sse_decode_bool(SseDeserializer deserializer) { 409 | // Codec=Sse (Serialization based), see doc to use other codecs 410 | return deserializer.buffer.getUint8() != 0; 411 | } 412 | 413 | @protected 414 | List sse_decode_list_prim_u_8_loose(SseDeserializer deserializer) { 415 | // Codec=Sse (Serialization based), see doc to use other codecs 416 | var len_ = sse_decode_i_32(deserializer); 417 | return deserializer.buffer.getUint8List(len_); 418 | } 419 | 420 | @protected 421 | Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer) { 422 | // Codec=Sse (Serialization based), see doc to use other codecs 423 | var len_ = sse_decode_i_32(deserializer); 424 | return deserializer.buffer.getUint8List(len_); 425 | } 426 | 427 | @protected 428 | int sse_decode_u_8(SseDeserializer deserializer) { 429 | // Codec=Sse (Serialization based), see doc to use other codecs 430 | return deserializer.buffer.getUint8(); 431 | } 432 | 433 | @protected 434 | void sse_decode_unit(SseDeserializer deserializer) { 435 | // Codec=Sse (Serialization based), see doc to use other codecs 436 | } 437 | 438 | @protected 439 | int sse_decode_usize(SseDeserializer deserializer) { 440 | // Codec=Sse (Serialization based), see doc to use other codecs 441 | return deserializer.buffer.getUint64(); 442 | } 443 | 444 | @protected 445 | int sse_decode_i_32(SseDeserializer deserializer) { 446 | // Codec=Sse (Serialization based), see doc to use other codecs 447 | return deserializer.buffer.getInt32(); 448 | } 449 | 450 | @protected 451 | void 452 | sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError( 453 | SimdJsonError self, SseSerializer serializer) { 454 | // Codec=Sse (Serialization based), see doc to use other codecs 455 | sse_encode_usize(self.sseEncode(move: true), serializer); 456 | } 457 | 458 | @protected 459 | void 460 | sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue( 461 | SimdJsonOwnedValue self, SseSerializer serializer) { 462 | // Codec=Sse (Serialization based), see doc to use other codecs 463 | sse_encode_usize(self.sseEncode(move: true), serializer); 464 | } 465 | 466 | @protected 467 | void sse_encode_DartFn_Inputs__Output_list_prim_u_8_strict( 468 | FutureOr Function() self, SseSerializer serializer) { 469 | // Codec=Sse (Serialization based), see doc to use other codecs 470 | sse_encode_DartOpaque( 471 | encode_DartFn_Inputs__Output_list_prim_u_8_strict(self), serializer); 472 | } 473 | 474 | @protected 475 | void 476 | sse_encode_DartFn_Inputs_list_prim_u_8_strict_Output_list_prim_u_8_strict( 477 | FutureOr Function(Uint8List) self, 478 | SseSerializer serializer) { 479 | // Codec=Sse (Serialization based), see doc to use other codecs 480 | sse_encode_DartOpaque( 481 | encode_DartFn_Inputs_list_prim_u_8_strict_Output_list_prim_u_8_strict( 482 | self), 483 | serializer); 484 | } 485 | 486 | @protected 487 | void sse_encode_DartOpaque(Object self, SseSerializer serializer) { 488 | // Codec=Sse (Serialization based), see doc to use other codecs 489 | sse_encode_usize( 490 | PlatformPointerUtil.ptrToInt(encodeDartOpaque( 491 | self, portManager.dartHandlerPort, generalizedFrbRustBinding)), 492 | serializer); 493 | } 494 | 495 | @protected 496 | void 497 | sse_encode_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError( 498 | SimdJsonError self, SseSerializer serializer) { 499 | // Codec=Sse (Serialization based), see doc to use other codecs 500 | sse_encode_usize(self.sseEncode(move: null), serializer); 501 | } 502 | 503 | @protected 504 | void 505 | sse_encode_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue( 506 | SimdJsonOwnedValue self, SseSerializer serializer) { 507 | // Codec=Sse (Serialization based), see doc to use other codecs 508 | sse_encode_usize(self.sseEncode(move: null), serializer); 509 | } 510 | 511 | @protected 512 | void sse_encode_bool(bool self, SseSerializer serializer) { 513 | // Codec=Sse (Serialization based), see doc to use other codecs 514 | serializer.buffer.putUint8(self ? 1 : 0); 515 | } 516 | 517 | @protected 518 | void sse_encode_list_prim_u_8_loose( 519 | List self, SseSerializer serializer) { 520 | // Codec=Sse (Serialization based), see doc to use other codecs 521 | sse_encode_i_32(self.length, serializer); 522 | serializer.buffer 523 | .putUint8List(self is Uint8List ? self : Uint8List.fromList(self)); 524 | } 525 | 526 | @protected 527 | void sse_encode_list_prim_u_8_strict( 528 | Uint8List self, SseSerializer serializer) { 529 | // Codec=Sse (Serialization based), see doc to use other codecs 530 | sse_encode_i_32(self.length, serializer); 531 | serializer.buffer.putUint8List(self); 532 | } 533 | 534 | @protected 535 | void sse_encode_u_8(int self, SseSerializer serializer) { 536 | // Codec=Sse (Serialization based), see doc to use other codecs 537 | serializer.buffer.putUint8(self); 538 | } 539 | 540 | @protected 541 | void sse_encode_unit(void self, SseSerializer serializer) { 542 | // Codec=Sse (Serialization based), see doc to use other codecs 543 | } 544 | 545 | @protected 546 | void sse_encode_usize(int self, SseSerializer serializer) { 547 | // Codec=Sse (Serialization based), see doc to use other codecs 548 | serializer.buffer.putUint64(self); 549 | } 550 | 551 | @protected 552 | void sse_encode_i_32(int self, SseSerializer serializer) { 553 | // Codec=Sse (Serialization based), see doc to use other codecs 554 | serializer.buffer.putInt32(self); 555 | } 556 | } 557 | -------------------------------------------------------------------------------- /dart_axum_tokio/lib/src/rust/frb_generated.io.dart: -------------------------------------------------------------------------------- 1 | // This file is automatically generated, so please do not edit it. 2 | // Generated by `flutter_rust_bridge`@ 2.0.0-dev.24. 3 | 4 | // ignore_for_file: unused_import, unused_element, unnecessary_import, duplicate_ignore, invalid_use_of_internal_member, annotate_overrides, non_constant_identifier_names, curly_braces_in_flow_control_structures, prefer_const_literals_to_create_immutables, unused_field 5 | 6 | import 'api/minimal.dart'; 7 | import 'dart:async'; 8 | import 'dart:convert'; 9 | import 'dart:ffi' as ffi; 10 | import 'frb_generated.dart'; 11 | import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated_io.dart'; 12 | 13 | abstract class RustLibApiImplPlatform extends BaseApiImpl { 14 | RustLibApiImplPlatform({ 15 | required super.handler, 16 | required super.wire, 17 | required super.generalizedFrbRustBinding, 18 | required super.portManager, 19 | }); 20 | 21 | CrossPlatformFinalizerArg 22 | get rust_arc_decrement_strong_count_SimdJsonErrorPtr => wire 23 | ._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonErrorPtr; 24 | 25 | CrossPlatformFinalizerArg 26 | get rust_arc_decrement_strong_count_SimdJsonOwnedValuePtr => wire 27 | ._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValuePtr; 28 | 29 | @protected 30 | SimdJsonError 31 | dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError( 32 | dynamic raw); 33 | 34 | @protected 35 | SimdJsonOwnedValue 36 | dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue( 37 | dynamic raw); 38 | 39 | @protected 40 | FutureOr Function() 41 | dco_decode_DartFn_Inputs__Output_list_prim_u_8_strict(dynamic raw); 42 | 43 | @protected 44 | FutureOr Function(Uint8List) 45 | dco_decode_DartFn_Inputs_list_prim_u_8_strict_Output_list_prim_u_8_strict( 46 | dynamic raw); 47 | 48 | @protected 49 | Object dco_decode_DartOpaque(dynamic raw); 50 | 51 | @protected 52 | SimdJsonError 53 | dco_decode_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError( 54 | dynamic raw); 55 | 56 | @protected 57 | SimdJsonOwnedValue 58 | dco_decode_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue( 59 | dynamic raw); 60 | 61 | @protected 62 | bool dco_decode_bool(dynamic raw); 63 | 64 | @protected 65 | List dco_decode_list_prim_u_8_loose(dynamic raw); 66 | 67 | @protected 68 | Uint8List dco_decode_list_prim_u_8_strict(dynamic raw); 69 | 70 | @protected 71 | int dco_decode_u_8(dynamic raw); 72 | 73 | @protected 74 | void dco_decode_unit(dynamic raw); 75 | 76 | @protected 77 | int dco_decode_usize(dynamic raw); 78 | 79 | @protected 80 | SimdJsonError 81 | sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError( 82 | SseDeserializer deserializer); 83 | 84 | @protected 85 | SimdJsonOwnedValue 86 | sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue( 87 | SseDeserializer deserializer); 88 | 89 | @protected 90 | Object sse_decode_DartOpaque(SseDeserializer deserializer); 91 | 92 | @protected 93 | SimdJsonError 94 | sse_decode_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError( 95 | SseDeserializer deserializer); 96 | 97 | @protected 98 | SimdJsonOwnedValue 99 | sse_decode_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue( 100 | SseDeserializer deserializer); 101 | 102 | @protected 103 | bool sse_decode_bool(SseDeserializer deserializer); 104 | 105 | @protected 106 | List sse_decode_list_prim_u_8_loose(SseDeserializer deserializer); 107 | 108 | @protected 109 | Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer); 110 | 111 | @protected 112 | int sse_decode_u_8(SseDeserializer deserializer); 113 | 114 | @protected 115 | void sse_decode_unit(SseDeserializer deserializer); 116 | 117 | @protected 118 | int sse_decode_usize(SseDeserializer deserializer); 119 | 120 | @protected 121 | int sse_decode_i_32(SseDeserializer deserializer); 122 | 123 | @protected 124 | void 125 | sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError( 126 | SimdJsonError self, SseSerializer serializer); 127 | 128 | @protected 129 | void 130 | sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue( 131 | SimdJsonOwnedValue self, SseSerializer serializer); 132 | 133 | @protected 134 | void sse_encode_DartFn_Inputs__Output_list_prim_u_8_strict( 135 | FutureOr Function() self, SseSerializer serializer); 136 | 137 | @protected 138 | void 139 | sse_encode_DartFn_Inputs_list_prim_u_8_strict_Output_list_prim_u_8_strict( 140 | FutureOr Function(Uint8List) self, 141 | SseSerializer serializer); 142 | 143 | @protected 144 | void sse_encode_DartOpaque(Object self, SseSerializer serializer); 145 | 146 | @protected 147 | void 148 | sse_encode_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError( 149 | SimdJsonError self, SseSerializer serializer); 150 | 151 | @protected 152 | void 153 | sse_encode_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue( 154 | SimdJsonOwnedValue self, SseSerializer serializer); 155 | 156 | @protected 157 | void sse_encode_bool(bool self, SseSerializer serializer); 158 | 159 | @protected 160 | void sse_encode_list_prim_u_8_loose(List self, SseSerializer serializer); 161 | 162 | @protected 163 | void sse_encode_list_prim_u_8_strict( 164 | Uint8List self, SseSerializer serializer); 165 | 166 | @protected 167 | void sse_encode_u_8(int self, SseSerializer serializer); 168 | 169 | @protected 170 | void sse_encode_unit(void self, SseSerializer serializer); 171 | 172 | @protected 173 | void sse_encode_usize(int self, SseSerializer serializer); 174 | 175 | @protected 176 | void sse_encode_i_32(int self, SseSerializer serializer); 177 | } 178 | 179 | // Section: wire_class 180 | 181 | class RustLibWire implements BaseWire { 182 | factory RustLibWire.fromExternalLibrary(ExternalLibrary lib) => 183 | RustLibWire(lib.ffiDynamicLibrary); 184 | 185 | /// Holds the symbol lookup function. 186 | final ffi.Pointer Function(String symbolName) 187 | _lookup; 188 | 189 | /// The symbols are looked up in [dynamicLibrary]. 190 | RustLibWire(ffi.DynamicLibrary dynamicLibrary) 191 | : _lookup = dynamicLibrary.lookup; 192 | 193 | void 194 | rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError( 195 | ffi.Pointer ptr, 196 | ) { 197 | return _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError( 198 | ptr, 199 | ); 200 | } 201 | 202 | late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonErrorPtr = 203 | _lookup)>>( 204 | 'frbgen_dart_axum_tokio_sever_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError'); 205 | late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError = 206 | _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonErrorPtr 207 | .asFunction)>(); 208 | 209 | void 210 | rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError( 211 | ffi.Pointer ptr, 212 | ) { 213 | return _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError( 214 | ptr, 215 | ); 216 | } 217 | 218 | late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonErrorPtr = 219 | _lookup)>>( 220 | 'frbgen_dart_axum_tokio_sever_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError'); 221 | late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError = 222 | _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonErrorPtr 223 | .asFunction)>(); 224 | 225 | void 226 | rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue( 227 | ffi.Pointer ptr, 228 | ) { 229 | return _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue( 230 | ptr, 231 | ); 232 | } 233 | 234 | late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValuePtr = 235 | _lookup)>>( 236 | 'frbgen_dart_axum_tokio_sever_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue'); 237 | late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue = 238 | _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValuePtr 239 | .asFunction)>(); 240 | 241 | void 242 | rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue( 243 | ffi.Pointer ptr, 244 | ) { 245 | return _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue( 246 | ptr, 247 | ); 248 | } 249 | 250 | late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValuePtr = 251 | _lookup)>>( 252 | 'frbgen_dart_axum_tokio_sever_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue'); 253 | late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue = 254 | _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValuePtr 255 | .asFunction)>(); 256 | } 257 | -------------------------------------------------------------------------------- /dart_axum_tokio/lib/src/rust/frb_generated.web.dart: -------------------------------------------------------------------------------- 1 | // This file is automatically generated, so please do not edit it. 2 | // Generated by `flutter_rust_bridge`@ 2.0.0-dev.24. 3 | 4 | // ignore_for_file: unused_import, unused_element, unnecessary_import, duplicate_ignore, invalid_use_of_internal_member, annotate_overrides, non_constant_identifier_names, curly_braces_in_flow_control_structures, prefer_const_literals_to_create_immutables, unused_field 5 | 6 | import 'api/minimal.dart'; 7 | import 'dart:async'; 8 | import 'dart:convert'; 9 | import 'frb_generated.dart'; 10 | import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated_web.dart'; 11 | 12 | abstract class RustLibApiImplPlatform extends BaseApiImpl { 13 | RustLibApiImplPlatform({ 14 | required super.handler, 15 | required super.wire, 16 | required super.generalizedFrbRustBinding, 17 | required super.portManager, 18 | }); 19 | 20 | CrossPlatformFinalizerArg 21 | get rust_arc_decrement_strong_count_SimdJsonErrorPtr => wire 22 | .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError; 23 | 24 | CrossPlatformFinalizerArg 25 | get rust_arc_decrement_strong_count_SimdJsonOwnedValuePtr => wire 26 | .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue; 27 | 28 | @protected 29 | SimdJsonError 30 | dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError( 31 | dynamic raw); 32 | 33 | @protected 34 | SimdJsonOwnedValue 35 | dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue( 36 | dynamic raw); 37 | 38 | @protected 39 | FutureOr Function() 40 | dco_decode_DartFn_Inputs__Output_list_prim_u_8_strict(dynamic raw); 41 | 42 | @protected 43 | FutureOr Function(Uint8List) 44 | dco_decode_DartFn_Inputs_list_prim_u_8_strict_Output_list_prim_u_8_strict( 45 | dynamic raw); 46 | 47 | @protected 48 | Object dco_decode_DartOpaque(dynamic raw); 49 | 50 | @protected 51 | SimdJsonError 52 | dco_decode_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError( 53 | dynamic raw); 54 | 55 | @protected 56 | SimdJsonOwnedValue 57 | dco_decode_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue( 58 | dynamic raw); 59 | 60 | @protected 61 | bool dco_decode_bool(dynamic raw); 62 | 63 | @protected 64 | List dco_decode_list_prim_u_8_loose(dynamic raw); 65 | 66 | @protected 67 | Uint8List dco_decode_list_prim_u_8_strict(dynamic raw); 68 | 69 | @protected 70 | int dco_decode_u_8(dynamic raw); 71 | 72 | @protected 73 | void dco_decode_unit(dynamic raw); 74 | 75 | @protected 76 | int dco_decode_usize(dynamic raw); 77 | 78 | @protected 79 | SimdJsonError 80 | sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError( 81 | SseDeserializer deserializer); 82 | 83 | @protected 84 | SimdJsonOwnedValue 85 | sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue( 86 | SseDeserializer deserializer); 87 | 88 | @protected 89 | Object sse_decode_DartOpaque(SseDeserializer deserializer); 90 | 91 | @protected 92 | SimdJsonError 93 | sse_decode_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError( 94 | SseDeserializer deserializer); 95 | 96 | @protected 97 | SimdJsonOwnedValue 98 | sse_decode_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue( 99 | SseDeserializer deserializer); 100 | 101 | @protected 102 | bool sse_decode_bool(SseDeserializer deserializer); 103 | 104 | @protected 105 | List sse_decode_list_prim_u_8_loose(SseDeserializer deserializer); 106 | 107 | @protected 108 | Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer); 109 | 110 | @protected 111 | int sse_decode_u_8(SseDeserializer deserializer); 112 | 113 | @protected 114 | void sse_decode_unit(SseDeserializer deserializer); 115 | 116 | @protected 117 | int sse_decode_usize(SseDeserializer deserializer); 118 | 119 | @protected 120 | int sse_decode_i_32(SseDeserializer deserializer); 121 | 122 | @protected 123 | void 124 | sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError( 125 | SimdJsonError self, SseSerializer serializer); 126 | 127 | @protected 128 | void 129 | sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue( 130 | SimdJsonOwnedValue self, SseSerializer serializer); 131 | 132 | @protected 133 | void sse_encode_DartFn_Inputs__Output_list_prim_u_8_strict( 134 | FutureOr Function() self, SseSerializer serializer); 135 | 136 | @protected 137 | void 138 | sse_encode_DartFn_Inputs_list_prim_u_8_strict_Output_list_prim_u_8_strict( 139 | FutureOr Function(Uint8List) self, 140 | SseSerializer serializer); 141 | 142 | @protected 143 | void sse_encode_DartOpaque(Object self, SseSerializer serializer); 144 | 145 | @protected 146 | void 147 | sse_encode_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError( 148 | SimdJsonError self, SseSerializer serializer); 149 | 150 | @protected 151 | void 152 | sse_encode_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue( 153 | SimdJsonOwnedValue self, SseSerializer serializer); 154 | 155 | @protected 156 | void sse_encode_bool(bool self, SseSerializer serializer); 157 | 158 | @protected 159 | void sse_encode_list_prim_u_8_loose(List self, SseSerializer serializer); 160 | 161 | @protected 162 | void sse_encode_list_prim_u_8_strict( 163 | Uint8List self, SseSerializer serializer); 164 | 165 | @protected 166 | void sse_encode_u_8(int self, SseSerializer serializer); 167 | 168 | @protected 169 | void sse_encode_unit(void self, SseSerializer serializer); 170 | 171 | @protected 172 | void sse_encode_usize(int self, SseSerializer serializer); 173 | 174 | @protected 175 | void sse_encode_i_32(int self, SseSerializer serializer); 176 | } 177 | 178 | // Section: wire_class 179 | 180 | class RustLibWire implements BaseWire { 181 | RustLibWire.fromExternalLibrary(ExternalLibrary lib); 182 | 183 | void rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError( 184 | dynamic ptr) => 185 | wasmModule 186 | .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError( 187 | ptr); 188 | 189 | void rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError( 190 | dynamic ptr) => 191 | wasmModule 192 | .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError( 193 | ptr); 194 | 195 | void rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue( 196 | dynamic ptr) => 197 | wasmModule 198 | .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue( 199 | ptr); 200 | 201 | void rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue( 202 | dynamic ptr) => 203 | wasmModule 204 | .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue( 205 | ptr); 206 | } 207 | 208 | @JS('wasm_bindgen') 209 | external RustLibWasmModule get wasmModule; 210 | 211 | @JS() 212 | @anonymous 213 | class RustLibWasmModule implements WasmModule { 214 | @override 215 | external Object /* Promise */ call([String? moduleName]); 216 | 217 | @override 218 | external RustLibWasmModule bind(dynamic thisArg, String moduleName); 219 | 220 | external void 221 | rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError( 222 | dynamic ptr); 223 | 224 | external void 225 | rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError( 226 | dynamic ptr); 227 | 228 | external void 229 | rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue( 230 | dynamic ptr); 231 | 232 | external void 233 | rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue( 234 | dynamic ptr); 235 | } 236 | -------------------------------------------------------------------------------- /dart_axum_tokio/pubspec.lock: -------------------------------------------------------------------------------- 1 | # Generated by pub 2 | # See https://dart.dev/tools/pub/glossary#lockfile 3 | packages: 4 | _fe_analyzer_shared: 5 | dependency: transitive 6 | description: 7 | name: _fe_analyzer_shared 8 | sha256: "36a321c3d2cbe01cbcb3540a87b8843846e0206df3e691fa7b23e19e78de6d49" 9 | url: "https://pub.dev" 10 | source: hosted 11 | version: "65.0.0" 12 | analyzer: 13 | dependency: transitive 14 | description: 15 | name: analyzer 16 | sha256: dfe03b90ec022450e22513b5e5ca1f01c0c01de9c3fba2f7fd233cb57a6b9a07 17 | url: "https://pub.dev" 18 | source: hosted 19 | version: "6.3.0" 20 | args: 21 | dependency: transitive 22 | description: 23 | name: args 24 | sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596 25 | url: "https://pub.dev" 26 | source: hosted 27 | version: "2.4.2" 28 | async: 29 | dependency: transitive 30 | description: 31 | name: async 32 | sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" 33 | url: "https://pub.dev" 34 | source: hosted 35 | version: "2.11.0" 36 | boolean_selector: 37 | dependency: transitive 38 | description: 39 | name: boolean_selector 40 | sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" 41 | url: "https://pub.dev" 42 | source: hosted 43 | version: "2.1.1" 44 | build: 45 | dependency: transitive 46 | description: 47 | name: build 48 | sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" 49 | url: "https://pub.dev" 50 | source: hosted 51 | version: "2.4.1" 52 | build_cli_annotations: 53 | dependency: transitive 54 | description: 55 | name: build_cli_annotations 56 | sha256: b59d2769769efd6c9ff6d4c4cede0be115a566afc591705c2040b707534b1172 57 | url: "https://pub.dev" 58 | source: hosted 59 | version: "2.1.0" 60 | build_config: 61 | dependency: transitive 62 | description: 63 | name: build_config 64 | sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 65 | url: "https://pub.dev" 66 | source: hosted 67 | version: "1.1.1" 68 | build_daemon: 69 | dependency: transitive 70 | description: 71 | name: build_daemon 72 | sha256: "0343061a33da9c5810b2d6cee51945127d8f4c060b7fbdd9d54917f0a3feaaa1" 73 | url: "https://pub.dev" 74 | source: hosted 75 | version: "4.0.1" 76 | build_resolvers: 77 | dependency: transitive 78 | description: 79 | name: build_resolvers 80 | sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" 81 | url: "https://pub.dev" 82 | source: hosted 83 | version: "2.4.2" 84 | build_runner: 85 | dependency: "direct dev" 86 | description: 87 | name: build_runner 88 | sha256: "67d591d602906ef9201caf93452495ad1812bea2074f04e25dbd7c133785821b" 89 | url: "https://pub.dev" 90 | source: hosted 91 | version: "2.4.7" 92 | build_runner_core: 93 | dependency: transitive 94 | description: 95 | name: build_runner_core 96 | sha256: c9e32d21dd6626b5c163d48b037ce906bbe428bc23ab77bcd77bb21e593b6185 97 | url: "https://pub.dev" 98 | source: hosted 99 | version: "7.2.11" 100 | built_collection: 101 | dependency: transitive 102 | description: 103 | name: built_collection 104 | sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" 105 | url: "https://pub.dev" 106 | source: hosted 107 | version: "5.1.1" 108 | built_value: 109 | dependency: transitive 110 | description: 111 | name: built_value 112 | sha256: c9aabae0718ec394e5bc3c7272e6bb0dc0b32201a08fe185ec1d8401d3e39309 113 | url: "https://pub.dev" 114 | source: hosted 115 | version: "8.8.1" 116 | checked_yaml: 117 | dependency: transitive 118 | description: 119 | name: checked_yaml 120 | sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff 121 | url: "https://pub.dev" 122 | source: hosted 123 | version: "2.0.3" 124 | cli_util: 125 | dependency: transitive 126 | description: 127 | name: cli_util 128 | sha256: c05b7406fdabc7a49a3929d4af76bcaccbbffcbcdcf185b082e1ae07da323d19 129 | url: "https://pub.dev" 130 | source: hosted 131 | version: "0.4.1" 132 | code_builder: 133 | dependency: transitive 134 | description: 135 | name: code_builder 136 | sha256: feee43a5c05e7b3199bb375a86430b8ada1b04104f2923d0e03cc01ca87b6d84 137 | url: "https://pub.dev" 138 | source: hosted 139 | version: "4.9.0" 140 | collection: 141 | dependency: transitive 142 | description: 143 | name: collection 144 | sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a 145 | url: "https://pub.dev" 146 | source: hosted 147 | version: "1.18.0" 148 | convert: 149 | dependency: transitive 150 | description: 151 | name: convert 152 | sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" 153 | url: "https://pub.dev" 154 | source: hosted 155 | version: "3.1.1" 156 | coverage: 157 | dependency: transitive 158 | description: 159 | name: coverage 160 | sha256: "8acabb8306b57a409bf4c83522065672ee13179297a6bb0cb9ead73948df7c76" 161 | url: "https://pub.dev" 162 | source: hosted 163 | version: "1.7.2" 164 | crypto: 165 | dependency: transitive 166 | description: 167 | name: crypto 168 | sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab 169 | url: "https://pub.dev" 170 | source: hosted 171 | version: "3.0.3" 172 | dart_style: 173 | dependency: transitive 174 | description: 175 | name: dart_style 176 | sha256: "40ae61a5d43feea6d24bd22c0537a6629db858963b99b4bc1c3db80676f32368" 177 | url: "https://pub.dev" 178 | source: hosted 179 | version: "2.3.4" 180 | ffi: 181 | dependency: transitive 182 | description: 183 | name: ffi 184 | sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" 185 | url: "https://pub.dev" 186 | source: hosted 187 | version: "2.1.0" 188 | ffigen: 189 | dependency: "direct dev" 190 | description: 191 | name: ffigen 192 | sha256: d3e76c2ad48a4e7f93a29a162006f00eba46ce7c08194a77bb5c5e97d1b5ff0a 193 | url: "https://pub.dev" 194 | source: hosted 195 | version: "8.0.2" 196 | file: 197 | dependency: transitive 198 | description: 199 | name: file 200 | sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" 201 | url: "https://pub.dev" 202 | source: hosted 203 | version: "6.1.4" 204 | fixnum: 205 | dependency: transitive 206 | description: 207 | name: fixnum 208 | sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" 209 | url: "https://pub.dev" 210 | source: hosted 211 | version: "1.1.0" 212 | flutter_rust_bridge: 213 | dependency: "direct main" 214 | description: 215 | name: flutter_rust_bridge 216 | sha256: "7bdcbe0dc20a85f743bfc1a8ee940656d57beeccb0da44b0e2c8271535b61ae5" 217 | url: "https://pub.dev" 218 | source: hosted 219 | version: "2.0.0-dev.24" 220 | freezed: 221 | dependency: "direct dev" 222 | description: 223 | name: freezed 224 | sha256: "6c5031daae12c7072b3a87eff98983076434b4889ef2a44384d0cae3f82372ba" 225 | url: "https://pub.dev" 226 | source: hosted 227 | version: "2.4.6" 228 | freezed_annotation: 229 | dependency: "direct main" 230 | description: 231 | name: freezed_annotation 232 | sha256: c3fd9336eb55a38cc1bbd79ab17573113a8deccd0ecbbf926cca3c62803b5c2d 233 | url: "https://pub.dev" 234 | source: hosted 235 | version: "2.4.1" 236 | frontend_server_client: 237 | dependency: transitive 238 | description: 239 | name: frontend_server_client 240 | sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" 241 | url: "https://pub.dev" 242 | source: hosted 243 | version: "3.2.0" 244 | glob: 245 | dependency: transitive 246 | description: 247 | name: glob 248 | sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" 249 | url: "https://pub.dev" 250 | source: hosted 251 | version: "2.1.2" 252 | graphs: 253 | dependency: transitive 254 | description: 255 | name: graphs 256 | sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19 257 | url: "https://pub.dev" 258 | source: hosted 259 | version: "2.3.1" 260 | http_multi_server: 261 | dependency: transitive 262 | description: 263 | name: http_multi_server 264 | sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" 265 | url: "https://pub.dev" 266 | source: hosted 267 | version: "3.2.1" 268 | http_parser: 269 | dependency: transitive 270 | description: 271 | name: http_parser 272 | sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" 273 | url: "https://pub.dev" 274 | source: hosted 275 | version: "4.0.2" 276 | io: 277 | dependency: transitive 278 | description: 279 | name: io 280 | sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" 281 | url: "https://pub.dev" 282 | source: hosted 283 | version: "1.0.4" 284 | js: 285 | dependency: transitive 286 | description: 287 | name: js 288 | sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 289 | url: "https://pub.dev" 290 | source: hosted 291 | version: "0.6.7" 292 | json_annotation: 293 | dependency: transitive 294 | description: 295 | name: json_annotation 296 | sha256: b10a7b2ff83d83c777edba3c6a0f97045ddadd56c944e1a23a3fdf43a1bf4467 297 | url: "https://pub.dev" 298 | source: hosted 299 | version: "4.8.1" 300 | lints: 301 | dependency: "direct dev" 302 | description: 303 | name: lints 304 | sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452" 305 | url: "https://pub.dev" 306 | source: hosted 307 | version: "2.1.1" 308 | logging: 309 | dependency: transitive 310 | description: 311 | name: logging 312 | sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" 313 | url: "https://pub.dev" 314 | source: hosted 315 | version: "1.2.0" 316 | matcher: 317 | dependency: transitive 318 | description: 319 | name: matcher 320 | sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb 321 | url: "https://pub.dev" 322 | source: hosted 323 | version: "0.12.16+1" 324 | meta: 325 | dependency: transitive 326 | description: 327 | name: meta 328 | sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 329 | url: "https://pub.dev" 330 | source: hosted 331 | version: "1.11.0" 332 | mime: 333 | dependency: transitive 334 | description: 335 | name: mime 336 | sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e 337 | url: "https://pub.dev" 338 | source: hosted 339 | version: "1.0.4" 340 | node_preamble: 341 | dependency: transitive 342 | description: 343 | name: node_preamble 344 | sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" 345 | url: "https://pub.dev" 346 | source: hosted 347 | version: "2.0.2" 348 | package_config: 349 | dependency: transitive 350 | description: 351 | name: package_config 352 | sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" 353 | url: "https://pub.dev" 354 | source: hosted 355 | version: "2.1.0" 356 | path: 357 | dependency: transitive 358 | description: 359 | name: path 360 | sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" 361 | url: "https://pub.dev" 362 | source: hosted 363 | version: "1.9.0" 364 | pool: 365 | dependency: transitive 366 | description: 367 | name: pool 368 | sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" 369 | url: "https://pub.dev" 370 | source: hosted 371 | version: "1.5.1" 372 | pub_semver: 373 | dependency: transitive 374 | description: 375 | name: pub_semver 376 | sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" 377 | url: "https://pub.dev" 378 | source: hosted 379 | version: "2.1.4" 380 | pubspec_parse: 381 | dependency: transitive 382 | description: 383 | name: pubspec_parse 384 | sha256: c63b2876e58e194e4b0828fcb080ad0e06d051cb607a6be51a9e084f47cb9367 385 | url: "https://pub.dev" 386 | source: hosted 387 | version: "1.2.3" 388 | quiver: 389 | dependency: transitive 390 | description: 391 | name: quiver 392 | sha256: b1c1ac5ce6688d77f65f3375a9abb9319b3cb32486bdc7a1e0fdf004d7ba4e47 393 | url: "https://pub.dev" 394 | source: hosted 395 | version: "3.2.1" 396 | shelf: 397 | dependency: transitive 398 | description: 399 | name: shelf 400 | sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 401 | url: "https://pub.dev" 402 | source: hosted 403 | version: "1.4.1" 404 | shelf_packages_handler: 405 | dependency: transitive 406 | description: 407 | name: shelf_packages_handler 408 | sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e" 409 | url: "https://pub.dev" 410 | source: hosted 411 | version: "3.0.2" 412 | shelf_static: 413 | dependency: transitive 414 | description: 415 | name: shelf_static 416 | sha256: a41d3f53c4adf0f57480578c1d61d90342cd617de7fc8077b1304643c2d85c1e 417 | url: "https://pub.dev" 418 | source: hosted 419 | version: "1.1.2" 420 | shelf_web_socket: 421 | dependency: transitive 422 | description: 423 | name: shelf_web_socket 424 | sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1" 425 | url: "https://pub.dev" 426 | source: hosted 427 | version: "1.0.4" 428 | source_gen: 429 | dependency: transitive 430 | description: 431 | name: source_gen 432 | sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" 433 | url: "https://pub.dev" 434 | source: hosted 435 | version: "1.5.0" 436 | source_map_stack_trace: 437 | dependency: transitive 438 | description: 439 | name: source_map_stack_trace 440 | sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae" 441 | url: "https://pub.dev" 442 | source: hosted 443 | version: "2.1.1" 444 | source_maps: 445 | dependency: transitive 446 | description: 447 | name: source_maps 448 | sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703" 449 | url: "https://pub.dev" 450 | source: hosted 451 | version: "0.10.12" 452 | source_span: 453 | dependency: transitive 454 | description: 455 | name: source_span 456 | sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" 457 | url: "https://pub.dev" 458 | source: hosted 459 | version: "1.10.0" 460 | stack_trace: 461 | dependency: transitive 462 | description: 463 | name: stack_trace 464 | sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" 465 | url: "https://pub.dev" 466 | source: hosted 467 | version: "1.11.1" 468 | stream_channel: 469 | dependency: transitive 470 | description: 471 | name: stream_channel 472 | sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 473 | url: "https://pub.dev" 474 | source: hosted 475 | version: "2.1.2" 476 | stream_transform: 477 | dependency: transitive 478 | description: 479 | name: stream_transform 480 | sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" 481 | url: "https://pub.dev" 482 | source: hosted 483 | version: "2.1.0" 484 | string_scanner: 485 | dependency: transitive 486 | description: 487 | name: string_scanner 488 | sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" 489 | url: "https://pub.dev" 490 | source: hosted 491 | version: "1.2.0" 492 | term_glyph: 493 | dependency: transitive 494 | description: 495 | name: term_glyph 496 | sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 497 | url: "https://pub.dev" 498 | source: hosted 499 | version: "1.2.1" 500 | test: 501 | dependency: "direct dev" 502 | description: 503 | name: test 504 | sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f 505 | url: "https://pub.dev" 506 | source: hosted 507 | version: "1.24.9" 508 | test_api: 509 | dependency: transitive 510 | description: 511 | name: test_api 512 | sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" 513 | url: "https://pub.dev" 514 | source: hosted 515 | version: "0.6.1" 516 | test_core: 517 | dependency: transitive 518 | description: 519 | name: test_core 520 | sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a 521 | url: "https://pub.dev" 522 | source: hosted 523 | version: "0.5.9" 524 | timing: 525 | dependency: transitive 526 | description: 527 | name: timing 528 | sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" 529 | url: "https://pub.dev" 530 | source: hosted 531 | version: "1.0.1" 532 | typed_data: 533 | dependency: transitive 534 | description: 535 | name: typed_data 536 | sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c 537 | url: "https://pub.dev" 538 | source: hosted 539 | version: "1.3.2" 540 | vm_service: 541 | dependency: transitive 542 | description: 543 | name: vm_service 544 | sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 545 | url: "https://pub.dev" 546 | source: hosted 547 | version: "13.0.0" 548 | watcher: 549 | dependency: transitive 550 | description: 551 | name: watcher 552 | sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" 553 | url: "https://pub.dev" 554 | source: hosted 555 | version: "1.1.0" 556 | web: 557 | dependency: transitive 558 | description: 559 | name: web 560 | sha256: edc8a9573dd8c5a83a183dae1af2b6fd4131377404706ca4e5420474784906fa 561 | url: "https://pub.dev" 562 | source: hosted 563 | version: "0.4.0" 564 | web_socket_channel: 565 | dependency: transitive 566 | description: 567 | name: web_socket_channel 568 | sha256: "045ec2137c27bf1a32e6ffa0e734d532a6677bf9016a0d1a406c54e499ff945b" 569 | url: "https://pub.dev" 570 | source: hosted 571 | version: "2.4.1" 572 | webkit_inspection_protocol: 573 | dependency: transitive 574 | description: 575 | name: webkit_inspection_protocol 576 | sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572" 577 | url: "https://pub.dev" 578 | source: hosted 579 | version: "1.2.1" 580 | yaml: 581 | dependency: transitive 582 | description: 583 | name: yaml 584 | sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" 585 | url: "https://pub.dev" 586 | source: hosted 587 | version: "3.1.2" 588 | yaml_edit: 589 | dependency: transitive 590 | description: 591 | name: yaml_edit 592 | sha256: "1579d4a0340a83cf9e4d580ea51a16329c916973bffd5bd4b45e911b25d46bfd" 593 | url: "https://pub.dev" 594 | source: hosted 595 | version: "2.1.1" 596 | sdks: 597 | dart: ">=3.2.0 <4.0.0" 598 | -------------------------------------------------------------------------------- /dart_axum_tokio/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: dart_axum_tokio_sever 2 | description: 3 | version: 0.0.1 4 | publish_to: none 5 | environment: 6 | sdk: '>=3.2.0 <4.0.0' 7 | 8 | dependencies: 9 | flutter_rust_bridge: 10 | path: vendor/flutter_rust_bridge/frb_dart 11 | flutter_rust_bridge_utils: 12 | path: vendor/flutter_rust_bridge/frb_utils 13 | freezed_annotation: ^2.2.0 14 | 15 | dev_dependencies: 16 | lints: ^2.0.1 17 | test: ^1.21.4 18 | freezed: ^2.1.0+1 19 | build_runner: ^2.4.4 20 | ffigen: ^8.0.0 21 | -------------------------------------------------------------------------------- /dart_axum_tokio/rust/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "dart_axum_tokio_sever" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | [lib] 7 | crate-type = ["cdylib"] 8 | 9 | [dependencies] 10 | anyhow = { version = "1.0.64", features = ["backtrace"] } 11 | axum = "0.7.4" 12 | flutter_rust_bridge = { path = "../vendor/flutter_rust_bridge/frb_rust" } 13 | lazy_static = "1.4.0" 14 | log = "0.4.19" 15 | simd-json = "0.13.8" 16 | tokio = "1.36.0" 17 | -------------------------------------------------------------------------------- /dart_axum_tokio/rust/src/api/minimal.rs: -------------------------------------------------------------------------------- 1 | use axum::routing::{get, post}; 2 | use flutter_rust_bridge::{frb, DartFnFuture}; 3 | use lazy_static::lazy_static; 4 | use simd_json::to_vec; 5 | use std::sync::Arc; 6 | use tokio::runtime::Runtime; 7 | 8 | lazy_static! { 9 | static ref RT: Arc = Arc::new( 10 | tokio::runtime::Builder::new_multi_thread() 11 | .worker_threads(4) 12 | .enable_all() 13 | .build() 14 | .unwrap() 15 | ); 16 | } 17 | 18 | #[frb(init)] 19 | pub fn init_app() { 20 | flutter_rust_bridge::setup_default_user_utils(); 21 | } 22 | 23 | #[flutter_rust_bridge::frb(serialize)] 24 | pub async fn rustJsonDecode(mut s: Vec) -> Result { 25 | simd_json::to_owned_value(s.as_mut_slice()) 26 | } 27 | 28 | #[flutter_rust_bridge::frb(serialize)] 29 | pub async fn rustJsonEncode(v: simd_json::OwnedValue) -> Result, simd_json::Error> { 30 | to_vec(&v) 31 | } 32 | 33 | #[tokio::main(flavor = "current_thread")] 34 | #[flutter_rust_bridge::frb(serialize)] 35 | pub async fn start_server( 36 | dart_get_callback: impl (Fn() -> DartFnFuture>) + Send + Sync + 'static, 37 | dart_post_callback: impl (Fn(Vec) -> DartFnFuture>) + Send + Sync + 'static, 38 | ) -> bool { 39 | let get_callback = Arc::new(dart_get_callback); 40 | let post_callback = Arc::new(dart_post_callback); 41 | 42 | let _ = RT.spawn(async move { 43 | let address = "0.0.0.0:3000"; 44 | 45 | let get_handler = move || async move { get_callback().await }; 46 | let post_handler = move |req: axum::extract::Request| async move { 47 | let b = axum::body::to_bytes(req.into_body(), usize::MAX) 48 | .await 49 | .unwrap(); 50 | post_callback(b.to_vec()).await 51 | }; 52 | let app = axum::Router::new() 53 | .route("/", get(get_handler)) 54 | .route("/", post(post_handler)); 55 | 56 | println!("Listening on {address}"); 57 | let listener = tokio::net::TcpListener::bind(address).await.unwrap(); 58 | 59 | axum::serve(listener, app).await.unwrap(); 60 | }); 61 | 62 | return true; 63 | } 64 | -------------------------------------------------------------------------------- /dart_axum_tokio/rust/src/api/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod minimal; 2 | -------------------------------------------------------------------------------- /dart_axum_tokio/rust/src/frb_generated.io.rs: -------------------------------------------------------------------------------- 1 | // This file is automatically generated, so please do not edit it. 2 | // Generated by `flutter_rust_bridge`@ 2.0.0-dev.24. 3 | 4 | // Section: imports 5 | 6 | use super::*; 7 | use crate::api::minimal::*; 8 | use flutter_rust_bridge::for_generated::byteorder::{NativeEndian, ReadBytesExt, WriteBytesExt}; 9 | use flutter_rust_bridge::for_generated::transform_result_dco; 10 | use flutter_rust_bridge::{Handler, IntoIntoDart}; 11 | 12 | // Section: boilerplate 13 | 14 | flutter_rust_bridge::frb_generated_boilerplate_io!(); 15 | 16 | #[no_mangle] 17 | pub extern "C" fn frbgen_dart_axum_tokio_sever_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError( 18 | ptr: *const std::ffi::c_void, 19 | ) { 20 | MoiArc::>::increment_strong_count(ptr as _); 21 | } 22 | 23 | #[no_mangle] 24 | pub extern "C" fn frbgen_dart_axum_tokio_sever_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError( 25 | ptr: *const std::ffi::c_void, 26 | ) { 27 | MoiArc::>::decrement_strong_count(ptr as _); 28 | } 29 | 30 | #[no_mangle] 31 | pub extern "C" fn frbgen_dart_axum_tokio_sever_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue( 32 | ptr: *const std::ffi::c_void, 33 | ) { 34 | MoiArc::>::increment_strong_count(ptr as _); 35 | } 36 | 37 | #[no_mangle] 38 | pub extern "C" fn frbgen_dart_axum_tokio_sever_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue( 39 | ptr: *const std::ffi::c_void, 40 | ) { 41 | MoiArc::>::decrement_strong_count(ptr as _); 42 | } 43 | -------------------------------------------------------------------------------- /dart_axum_tokio/rust/src/frb_generated.rs: -------------------------------------------------------------------------------- 1 | // This file is automatically generated, so please do not edit it. 2 | // Generated by `flutter_rust_bridge`@ 2.0.0-dev.24. 3 | 4 | #![allow( 5 | non_camel_case_types, 6 | unused, 7 | non_snake_case, 8 | clippy::needless_return, 9 | clippy::redundant_closure_call, 10 | clippy::redundant_closure, 11 | clippy::useless_conversion, 12 | clippy::unit_arg, 13 | clippy::unused_unit, 14 | clippy::double_parens, 15 | clippy::let_and_return, 16 | clippy::too_many_arguments, 17 | clippy::match_single_binding 18 | )] 19 | 20 | // Section: imports 21 | 22 | use crate::api::minimal::*; 23 | use flutter_rust_bridge::for_generated::byteorder::{NativeEndian, ReadBytesExt, WriteBytesExt}; 24 | use flutter_rust_bridge::for_generated::transform_result_dco; 25 | use flutter_rust_bridge::{Handler, IntoIntoDart}; 26 | 27 | // Section: boilerplate 28 | 29 | flutter_rust_bridge::frb_generated_boilerplate!( 30 | default_stream_sink_codec = SseCodec, 31 | default_rust_opaque = RustOpaqueMoi, 32 | default_rust_auto_opaque = RustAutoOpaqueMoi, 33 | ); 34 | const FLUTTER_RUST_BRIDGE_CODEGEN_VERSION: &str = "2.0.0-dev.24"; 35 | 36 | // Section: executor 37 | 38 | flutter_rust_bridge::frb_generated_default_handler!(); 39 | 40 | // Section: wire_funcs 41 | 42 | fn wire_init_app_impl( 43 | port_: flutter_rust_bridge::for_generated::MessagePort, 44 | ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, 45 | rust_vec_len_: i32, 46 | data_len_: i32, 47 | ) { 48 | FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::( 49 | flutter_rust_bridge::for_generated::TaskInfo { 50 | debug_name: "init_app", 51 | port: Some(port_), 52 | mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal, 53 | }, 54 | move || { 55 | let message = unsafe { 56 | flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( 57 | ptr_, 58 | rust_vec_len_, 59 | data_len_, 60 | ) 61 | }; 62 | let mut deserializer = 63 | flutter_rust_bridge::for_generated::SseDeserializer::new(message); 64 | deserializer.end(); 65 | move |context| { 66 | transform_result_sse((move || { 67 | Result::<_, ()>::Ok(crate::api::minimal::init_app()) 68 | })()) 69 | } 70 | }, 71 | ) 72 | } 73 | fn wire_rustJsonDecode_impl( 74 | port_: flutter_rust_bridge::for_generated::MessagePort, 75 | ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, 76 | rust_vec_len_: i32, 77 | data_len_: i32, 78 | ) { 79 | FLUTTER_RUST_BRIDGE_HANDLER.wrap_async::( 80 | flutter_rust_bridge::for_generated::TaskInfo { 81 | debug_name: "rustJsonDecode", 82 | port: Some(port_), 83 | mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal, 84 | }, 85 | move || { 86 | let message = unsafe { 87 | flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( 88 | ptr_, 89 | rust_vec_len_, 90 | data_len_, 91 | ) 92 | }; 93 | let mut deserializer = 94 | flutter_rust_bridge::for_generated::SseDeserializer::new(message); 95 | let api_s = >::sse_decode(&mut deserializer); 96 | deserializer.end(); 97 | move |context| async move { 98 | transform_result_sse( 99 | (move || async move { crate::api::minimal::rustJsonDecode(api_s).await })() 100 | .await, 101 | ) 102 | } 103 | }, 104 | ) 105 | } 106 | fn wire_rustJsonEncode_impl( 107 | port_: flutter_rust_bridge::for_generated::MessagePort, 108 | ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, 109 | rust_vec_len_: i32, 110 | data_len_: i32, 111 | ) { 112 | FLUTTER_RUST_BRIDGE_HANDLER.wrap_async::( 113 | flutter_rust_bridge::for_generated::TaskInfo { 114 | debug_name: "rustJsonEncode", 115 | port: Some(port_), 116 | mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal, 117 | }, 118 | move || { 119 | let message = unsafe { 120 | flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( 121 | ptr_, 122 | rust_vec_len_, 123 | data_len_, 124 | ) 125 | }; 126 | let mut deserializer = 127 | flutter_rust_bridge::for_generated::SseDeserializer::new(message); 128 | let api_v = ::sse_decode(&mut deserializer); 129 | deserializer.end(); 130 | move |context| async move { 131 | transform_result_sse( 132 | (move || async move { crate::api::minimal::rustJsonEncode(api_v).await })() 133 | .await, 134 | ) 135 | } 136 | }, 137 | ) 138 | } 139 | fn wire_start_server_impl( 140 | port_: flutter_rust_bridge::for_generated::MessagePort, 141 | ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, 142 | rust_vec_len_: i32, 143 | data_len_: i32, 144 | ) { 145 | FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::( 146 | flutter_rust_bridge::for_generated::TaskInfo { 147 | debug_name: "start_server", 148 | port: Some(port_), 149 | mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal, 150 | }, 151 | move || { 152 | let message = unsafe { 153 | flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( 154 | ptr_, 155 | rust_vec_len_, 156 | data_len_, 157 | ) 158 | }; 159 | let mut deserializer = 160 | flutter_rust_bridge::for_generated::SseDeserializer::new(message); 161 | let api_dart_get_callback = decode_DartFn_Inputs__Output_list_prim_u_8_strict( 162 | ::sse_decode(&mut deserializer), 163 | ); 164 | let api_dart_post_callback = 165 | decode_DartFn_Inputs_list_prim_u_8_strict_Output_list_prim_u_8_strict( 166 | ::sse_decode(&mut deserializer), 167 | ); 168 | deserializer.end(); 169 | move |context| { 170 | transform_result_sse((move || { 171 | Result::<_, ()>::Ok(crate::api::minimal::start_server( 172 | api_dart_get_callback, 173 | api_dart_post_callback, 174 | )) 175 | })()) 176 | } 177 | }, 178 | ) 179 | } 180 | 181 | // Section: related_funcs 182 | 183 | fn decode_DartFn_Inputs__Output_list_prim_u_8_strict( 184 | dart_opaque: flutter_rust_bridge::DartOpaque, 185 | ) -> impl Fn() -> flutter_rust_bridge::DartFnFuture> { 186 | use flutter_rust_bridge::IntoDart; 187 | 188 | async fn body(dart_opaque: flutter_rust_bridge::DartOpaque) -> Vec { 189 | let args = vec![]; 190 | let message = FLUTTER_RUST_BRIDGE_HANDLER 191 | .dart_fn_invoke(dart_opaque, args) 192 | .await; 193 | >::sse_decode_single(message) 194 | } 195 | 196 | move || { 197 | flutter_rust_bridge::for_generated::convert_into_dart_fn_future(body(dart_opaque.clone())) 198 | } 199 | } 200 | fn decode_DartFn_Inputs_list_prim_u_8_strict_Output_list_prim_u_8_strict( 201 | dart_opaque: flutter_rust_bridge::DartOpaque, 202 | ) -> impl Fn(Vec) -> flutter_rust_bridge::DartFnFuture> { 203 | use flutter_rust_bridge::IntoDart; 204 | 205 | async fn body(dart_opaque: flutter_rust_bridge::DartOpaque, arg0: Vec) -> Vec { 206 | let args = vec![arg0.into_into_dart().into_dart()]; 207 | let message = FLUTTER_RUST_BRIDGE_HANDLER 208 | .dart_fn_invoke(dart_opaque, args) 209 | .await; 210 | >::sse_decode_single(message) 211 | } 212 | 213 | move |arg0: Vec| { 214 | flutter_rust_bridge::for_generated::convert_into_dart_fn_future(body( 215 | dart_opaque.clone(), 216 | arg0, 217 | )) 218 | } 219 | } 220 | flutter_rust_bridge::frb_generated_moi_arc_impl_value!( 221 | flutter_rust_bridge::for_generated::rust_async::RwLock 222 | ); 223 | flutter_rust_bridge::frb_generated_moi_arc_impl_value!( 224 | flutter_rust_bridge::for_generated::rust_async::RwLock 225 | ); 226 | 227 | // Section: dart2rust 228 | 229 | impl SseDecode for simd_json::Error { 230 | // Codec=Sse (Serialization based), see doc to use other codecs 231 | fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { 232 | let mut inner = , 234 | >>::sse_decode(deserializer); 235 | return inner.rust_auto_opaque_decode_owned(); 236 | } 237 | } 238 | 239 | impl SseDecode for simd_json::OwnedValue { 240 | // Codec=Sse (Serialization based), see doc to use other codecs 241 | fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { 242 | let mut inner = , 244 | >>::sse_decode(deserializer); 245 | return inner.rust_auto_opaque_decode_owned(); 246 | } 247 | } 248 | 249 | impl SseDecode for flutter_rust_bridge::DartOpaque { 250 | // Codec=Sse (Serialization based), see doc to use other codecs 251 | fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { 252 | let mut inner = ::sse_decode(deserializer); 253 | return unsafe { flutter_rust_bridge::for_generated::sse_decode_dart_opaque(inner) }; 254 | } 255 | } 256 | 257 | impl SseDecode 258 | for RustOpaqueMoi> 259 | { 260 | // Codec=Sse (Serialization based), see doc to use other codecs 261 | fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { 262 | let mut inner = ::sse_decode(deserializer); 263 | return decode_rust_opaque_moi(inner); 264 | } 265 | } 266 | 267 | impl SseDecode 268 | for RustOpaqueMoi> 269 | { 270 | // Codec=Sse (Serialization based), see doc to use other codecs 271 | fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { 272 | let mut inner = ::sse_decode(deserializer); 273 | return decode_rust_opaque_moi(inner); 274 | } 275 | } 276 | 277 | impl SseDecode for bool { 278 | // Codec=Sse (Serialization based), see doc to use other codecs 279 | fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { 280 | deserializer.cursor.read_u8().unwrap() != 0 281 | } 282 | } 283 | 284 | impl SseDecode for Vec { 285 | // Codec=Sse (Serialization based), see doc to use other codecs 286 | fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { 287 | let mut len_ = ::sse_decode(deserializer); 288 | let mut ans_ = vec![]; 289 | for idx_ in 0..len_ { 290 | ans_.push(::sse_decode(deserializer)); 291 | } 292 | return ans_; 293 | } 294 | } 295 | 296 | impl SseDecode for u8 { 297 | // Codec=Sse (Serialization based), see doc to use other codecs 298 | fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { 299 | deserializer.cursor.read_u8().unwrap() 300 | } 301 | } 302 | 303 | impl SseDecode for () { 304 | // Codec=Sse (Serialization based), see doc to use other codecs 305 | fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self {} 306 | } 307 | 308 | impl SseDecode for usize { 309 | // Codec=Sse (Serialization based), see doc to use other codecs 310 | fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { 311 | deserializer.cursor.read_u64::().unwrap() as _ 312 | } 313 | } 314 | 315 | impl SseDecode for i32 { 316 | // Codec=Sse (Serialization based), see doc to use other codecs 317 | fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { 318 | deserializer.cursor.read_i32::().unwrap() 319 | } 320 | } 321 | 322 | fn pde_ffi_dispatcher_primary_impl( 323 | func_id: i32, 324 | port: flutter_rust_bridge::for_generated::MessagePort, 325 | ptr: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, 326 | rust_vec_len: i32, 327 | data_len: i32, 328 | ) { 329 | // Codec=Pde (Serialization + dispatch), see doc to use other codecs 330 | match func_id { 331 | 1 => wire_init_app_impl(port, ptr, rust_vec_len, data_len), 332 | 2 => wire_rustJsonDecode_impl(port, ptr, rust_vec_len, data_len), 333 | 3 => wire_rustJsonEncode_impl(port, ptr, rust_vec_len, data_len), 334 | 4 => wire_start_server_impl(port, ptr, rust_vec_len, data_len), 335 | _ => unreachable!(), 336 | } 337 | } 338 | 339 | fn pde_ffi_dispatcher_sync_impl( 340 | func_id: i32, 341 | ptr: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, 342 | rust_vec_len: i32, 343 | data_len: i32, 344 | ) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse { 345 | // Codec=Pde (Serialization + dispatch), see doc to use other codecs 346 | match func_id { 347 | _ => unreachable!(), 348 | } 349 | } 350 | 351 | // Section: rust2dart 352 | 353 | pub struct Local_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError( 354 | simd_json::Error, 355 | ); 356 | // Codec=Dco (DartCObject based), see doc to use other codecs 357 | impl flutter_rust_bridge::IntoDart 358 | for Local_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError 359 | { 360 | fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { 361 | flutter_rust_bridge::for_generated::rust_auto_opaque_encode::<_, MoiArc<_>>(self.0) 362 | .into_dart() 363 | } 364 | } 365 | impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive 366 | for Local_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError 367 | { 368 | } 369 | impl 370 | flutter_rust_bridge::IntoIntoDart< 371 | Local_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError, 372 | > for simd_json::Error 373 | { 374 | fn into_into_dart( 375 | self, 376 | ) -> Local_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError 377 | { 378 | Local_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError( 379 | self, 380 | ) 381 | } 382 | } 383 | pub struct Local_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue( 384 | simd_json::OwnedValue, 385 | ); 386 | // Codec=Dco (DartCObject based), see doc to use other codecs 387 | impl flutter_rust_bridge::IntoDart for Local_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue { 388 | fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { 389 | flutter_rust_bridge::for_generated::rust_auto_opaque_encode::<_, MoiArc<_>>(self.0).into_dart() 390 | } 391 | } 392 | impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive for Local_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue {} 393 | impl flutter_rust_bridge::IntoIntoDart for simd_json :: OwnedValue { 394 | fn into_into_dart(self) -> Local_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue { 395 | Local_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue(self) 396 | } 397 | } 398 | 399 | impl SseEncode for simd_json::Error { 400 | // Codec=Sse (Serialization based), see doc to use other codecs 401 | fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { 402 | >>::sse_encode(flutter_rust_bridge::for_generated::rust_auto_opaque_encode::<_, MoiArc<_>>(self), serializer); 403 | } 404 | } 405 | 406 | impl SseEncode for simd_json::OwnedValue { 407 | // Codec=Sse (Serialization based), see doc to use other codecs 408 | fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { 409 | , 411 | >>::sse_encode( 412 | flutter_rust_bridge::for_generated::rust_auto_opaque_encode::<_, MoiArc<_>>(self), 413 | serializer, 414 | ); 415 | } 416 | } 417 | 418 | impl SseEncode for flutter_rust_bridge::DartOpaque { 419 | // Codec=Sse (Serialization based), see doc to use other codecs 420 | fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { 421 | ::sse_encode(self.encode(), serializer); 422 | } 423 | } 424 | 425 | impl SseEncode 426 | for RustOpaqueMoi> 427 | { 428 | // Codec=Sse (Serialization based), see doc to use other codecs 429 | fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { 430 | let (ptr, size) = self.sse_encode_raw(); 431 | ::sse_encode(ptr, serializer); 432 | ::sse_encode(size, serializer); 433 | } 434 | } 435 | 436 | impl SseEncode 437 | for RustOpaqueMoi> 438 | { 439 | // Codec=Sse (Serialization based), see doc to use other codecs 440 | fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { 441 | let (ptr, size) = self.sse_encode_raw(); 442 | ::sse_encode(ptr, serializer); 443 | ::sse_encode(size, serializer); 444 | } 445 | } 446 | 447 | impl SseEncode for bool { 448 | // Codec=Sse (Serialization based), see doc to use other codecs 449 | fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { 450 | serializer.cursor.write_u8(self as _).unwrap(); 451 | } 452 | } 453 | 454 | impl SseEncode for Vec { 455 | // Codec=Sse (Serialization based), see doc to use other codecs 456 | fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { 457 | ::sse_encode(self.len() as _, serializer); 458 | for item in self { 459 | ::sse_encode(item, serializer); 460 | } 461 | } 462 | } 463 | 464 | impl SseEncode for u8 { 465 | // Codec=Sse (Serialization based), see doc to use other codecs 466 | fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { 467 | serializer.cursor.write_u8(self).unwrap(); 468 | } 469 | } 470 | 471 | impl SseEncode for () { 472 | // Codec=Sse (Serialization based), see doc to use other codecs 473 | fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) {} 474 | } 475 | 476 | impl SseEncode for usize { 477 | // Codec=Sse (Serialization based), see doc to use other codecs 478 | fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { 479 | serializer 480 | .cursor 481 | .write_u64::(self as _) 482 | .unwrap(); 483 | } 484 | } 485 | 486 | impl SseEncode for i32 { 487 | // Codec=Sse (Serialization based), see doc to use other codecs 488 | fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { 489 | serializer.cursor.write_i32::(self).unwrap(); 490 | } 491 | } 492 | 493 | #[cfg(not(target_family = "wasm"))] 494 | #[path = "frb_generated.io.rs"] 495 | mod io; 496 | #[cfg(not(target_family = "wasm"))] 497 | pub use io::*; 498 | 499 | /// cbindgen:ignore 500 | #[cfg(target_family = "wasm")] 501 | #[path = "frb_generated.web.rs"] 502 | mod web; 503 | #[cfg(target_family = "wasm")] 504 | pub use web::*; 505 | -------------------------------------------------------------------------------- /dart_axum_tokio/rust/src/frb_generated.web.rs: -------------------------------------------------------------------------------- 1 | // This file is automatically generated, so please do not edit it. 2 | // Generated by `flutter_rust_bridge`@ 2.0.0-dev.24. 3 | 4 | // Section: imports 5 | 6 | use super::*; 7 | use crate::api::minimal::*; 8 | use flutter_rust_bridge::for_generated::byteorder::{NativeEndian, ReadBytesExt, WriteBytesExt}; 9 | use flutter_rust_bridge::for_generated::transform_result_dco; 10 | use flutter_rust_bridge::for_generated::wasm_bindgen; 11 | use flutter_rust_bridge::for_generated::wasm_bindgen::prelude::*; 12 | use flutter_rust_bridge::{Handler, IntoIntoDart}; 13 | 14 | // Section: boilerplate 15 | 16 | flutter_rust_bridge::frb_generated_boilerplate_web!(); 17 | 18 | #[wasm_bindgen] 19 | pub fn rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError( 20 | ptr: *const std::ffi::c_void, 21 | ) { 22 | MoiArc::>::increment_strong_count(ptr as _); 23 | } 24 | 25 | #[wasm_bindgen] 26 | pub fn rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonError( 27 | ptr: *const std::ffi::c_void, 28 | ) { 29 | MoiArc::>::decrement_strong_count(ptr as _); 30 | } 31 | 32 | #[wasm_bindgen] 33 | pub fn rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue( 34 | ptr: *const std::ffi::c_void, 35 | ) { 36 | MoiArc::>::increment_strong_count(ptr as _); 37 | } 38 | 39 | #[wasm_bindgen] 40 | pub fn rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLocksimd_jsonOwnedValue( 41 | ptr: *const std::ffi::c_void, 42 | ) { 43 | MoiArc::>::decrement_strong_count(ptr as _); 44 | } 45 | -------------------------------------------------------------------------------- /dart_axum_tokio/rust/src/lib.rs: -------------------------------------------------------------------------------- 1 | pub mod api; 2 | mod frb_generated; /* AUTO INJECTED BY flutter_rust_bridge. This line may not be accurate, and you can change it according to your needs. */ 3 | -------------------------------------------------------------------------------- /dart_axum_tokio/wrk_post.lua: -------------------------------------------------------------------------------- 1 | wrk.method = "POST" 2 | wrk.headers["Content-Type"] = "application/json" 3 | 4 | file = io.open("../testdata/posts.json", "rb") 5 | wrk.body = file:read("*a") 6 | -------------------------------------------------------------------------------- /deno.ts: -------------------------------------------------------------------------------- 1 | async function handler(req: Request): Response { 2 | if (req.method == "GET") { 3 | return new Response("Hello World"); 4 | } else if (req.method == "POST") { 5 | const json = await req.json(); 6 | return new Response(JSON.stringify(json)); 7 | } 8 | return new Response("Not implemented"); 9 | } 10 | 11 | Deno.serve({ port: 3000, hostname: "127.0.0.1", handler }); 12 | -------------------------------------------------------------------------------- /go.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "encoding/json" 5 | "fmt" 6 | "net/http" 7 | ) 8 | 9 | func HelloServer(w http.ResponseWriter, r *http.Request) { 10 | if r.Method == "GET" { 11 | fmt.Fprintf(w, "Hello World") 12 | } else if r.Method == "POST" { 13 | decoder := json.NewDecoder(r.Body) 14 | var obj interface{} 15 | err := decoder.Decode(&obj) 16 | if err != nil { 17 | fmt.Fprintf(w, "Error %v", err) 18 | return 19 | } 20 | data, err := json.Marshal(obj) 21 | if err != nil { 22 | fmt.Fprintf(w, "Error %v", err) 23 | return 24 | } 25 | w.Write(data) 26 | } 27 | } 28 | 29 | func main() { 30 | fmt.Println("Listening on :3000") 31 | http.HandleFunc("/", HelloServer) 32 | http.ListenAndServe(":3000", nil) 33 | } 34 | -------------------------------------------------------------------------------- /node.js: -------------------------------------------------------------------------------- 1 | const http = require("node:http"); 2 | 3 | const hostname = "127.0.0.1"; 4 | const port = 3000; 5 | 6 | const server = http.createServer((req, res) => { 7 | if (req.method == "GET") { 8 | res.statusCode = 200; 9 | res.end("Hello World"); 10 | return; 11 | } else if (req.method == "POST") { 12 | let body = []; 13 | req 14 | .on("data", (chunk) => { 15 | body.push(chunk); 16 | }) 17 | .on("end", () => { 18 | body = Buffer.concat(body).toString(); 19 | res.statusCode = 200; 20 | res.end(JSON.stringify(JSON.parse(body))); 21 | }); 22 | return; 23 | } 24 | 25 | res.statusCode = 500; 26 | res.end("Not implemented"); 27 | }); 28 | 29 | server.listen(port, hostname, () => { 30 | console.log(`Server running at http://${hostname}:${port}/`); 31 | }); 32 | -------------------------------------------------------------------------------- /regex/.gitignore: -------------------------------------------------------------------------------- 1 | regex_swift 2 | -------------------------------------------------------------------------------- /regex/Makefile: -------------------------------------------------------------------------------- 1 | 2 | regex_swift: regex.swift 3 | swiftc -Ounchecked -enable-bare-slash-regex $< -o $@ 4 | -------------------------------------------------------------------------------- /regex/regex.py: -------------------------------------------------------------------------------- 1 | import re 2 | 3 | msg = "FLRD0056B>OGFLR,qAS,LSZI2:/215553h4730.50N\\00757.08En000/000/A=001975 !W56! id3ED0056B -019fpm +0.0rot 22.5dB -9.0kHz gps1x1" 4 | 5 | N = 1000000 6 | pattern = re.compile(r'(?P