update readme, breakup features
This commit is contained in:
parent
a67fcad5c0
commit
c9b7464538
10 changed files with 214 additions and 262 deletions
9
.rust-toolchain.toml
Normal file
9
.rust-toolchain.toml
Normal file
|
@ -0,0 +1,9 @@
|
|||
|
||||
[toolchain]
|
||||
channel = "1.78"
|
||||
components = ["rust-src", "rustc-dev", "llvm-tools-preview"]
|
||||
targets = [
|
||||
"wasm32-unknown-unknown",
|
||||
"x86_64-unknown-linux-musl",
|
||||
"x86_64-unknown-linux-gnu",
|
||||
]
|
300
Cargo.lock
generated
300
Cargo.lock
generated
|
@ -4,11 +4,11 @@ version = 3
|
|||
|
||||
[[package]]
|
||||
name = "addr2line"
|
||||
version = "0.21.0"
|
||||
version = "0.22.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
|
||||
checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678"
|
||||
dependencies = [
|
||||
"gimli",
|
||||
"gimli 0.29.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -28,9 +28,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "anyhow"
|
||||
version = "1.0.82"
|
||||
version = "1.0.86"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519"
|
||||
checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da"
|
||||
|
||||
[[package]]
|
||||
name = "arrayvec"
|
||||
|
@ -40,15 +40,15 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
|
|||
|
||||
[[package]]
|
||||
name = "autocfg"
|
||||
version = "1.2.0"
|
||||
version = "1.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80"
|
||||
checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0"
|
||||
|
||||
[[package]]
|
||||
name = "backtrace"
|
||||
version = "0.3.71"
|
||||
version = "0.3.72"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d"
|
||||
checksum = "17c6a35df3749d2e8bb1b7b21a976d82b15548788d2735b9d82f329268f71a11"
|
||||
dependencies = [
|
||||
"addr2line",
|
||||
"cc",
|
||||
|
@ -62,9 +62,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "base64"
|
||||
version = "0.22.0"
|
||||
version = "0.22.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9475866fec1451be56a3c2400fd081ff546538961565ccb5b7142cbd22bc7a51"
|
||||
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
|
||||
|
||||
[[package]]
|
||||
name = "base64-simd"
|
||||
|
@ -87,6 +87,12 @@ version = "1.3.2"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "2.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1"
|
||||
|
||||
[[package]]
|
||||
name = "bitvec"
|
||||
version = "1.0.1"
|
||||
|
@ -122,9 +128,9 @@ checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9"
|
|||
|
||||
[[package]]
|
||||
name = "cc"
|
||||
version = "1.0.95"
|
||||
version = "1.0.98"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d32a725bc159af97c3e629873bb9f88fb8cf8a4867175f76dc987815ea07c83b"
|
||||
checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f"
|
||||
|
||||
[[package]]
|
||||
name = "cfg-if"
|
||||
|
@ -178,60 +184,36 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "338089f42c427b86394a5ee60ff321da23a5c89c9d89514c829687b26359fcff"
|
||||
|
||||
[[package]]
|
||||
name = "crc32fast"
|
||||
version = "1.4.0"
|
||||
name = "crc32_digest"
|
||||
version = "0.8.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa"
|
||||
checksum = "45d5efbc16ba04a6c1691aee22f18e9cce02fb7b7bdf85296d99139389b41983"
|
||||
dependencies = [
|
||||
"crc32fast",
|
||||
"digest",
|
||||
"generic-array",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crc32fast"
|
||||
version = "1.4.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-utils"
|
||||
version = "0.8.19"
|
||||
version = "0.8.20"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345"
|
||||
|
||||
[[package]]
|
||||
name = "darling"
|
||||
version = "0.10.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858"
|
||||
dependencies = [
|
||||
"darling_core",
|
||||
"darling_macro",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "darling_core"
|
||||
version = "0.10.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b"
|
||||
dependencies = [
|
||||
"fnv",
|
||||
"ident_case",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"strsim",
|
||||
"syn 1.0.109",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "darling_macro"
|
||||
version = "0.10.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72"
|
||||
dependencies = [
|
||||
"darling_core",
|
||||
"quote",
|
||||
"syn 1.0.109",
|
||||
]
|
||||
checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80"
|
||||
|
||||
[[package]]
|
||||
name = "data-encoding"
|
||||
version = "2.5.0"
|
||||
version = "2.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5"
|
||||
checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2"
|
||||
|
||||
[[package]]
|
||||
name = "debugid"
|
||||
|
@ -243,6 +225,15 @@ dependencies = [
|
|||
"uuid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "digest"
|
||||
version = "0.8.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5"
|
||||
dependencies = [
|
||||
"generic-array",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "dmsort"
|
||||
version = "1.0.2"
|
||||
|
@ -306,20 +297,14 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "flate2"
|
||||
version = "1.0.29"
|
||||
version = "1.0.30"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4556222738635b7a3417ae6130d8f52201e45a0c4d1a907f0826383adb5f85e7"
|
||||
checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae"
|
||||
dependencies = [
|
||||
"crc32fast",
|
||||
"miniz_oxide",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fnv"
|
||||
version = "1.0.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
|
||||
|
||||
[[package]]
|
||||
name = "form_urlencoded"
|
||||
version = "1.2.1"
|
||||
|
@ -391,7 +376,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.63",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -424,6 +409,15 @@ dependencies = [
|
|||
"slab",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "generic-array"
|
||||
version = "0.12.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd"
|
||||
dependencies = [
|
||||
"typenum",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "gimli"
|
||||
version = "0.28.1"
|
||||
|
@ -434,6 +428,12 @@ dependencies = [
|
|||
"stable_deref_trait",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "gimli"
|
||||
version = "0.29.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd"
|
||||
|
||||
[[package]]
|
||||
name = "glob"
|
||||
version = "0.3.1"
|
||||
|
@ -453,9 +453,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "hashbrown"
|
||||
version = "0.14.3"
|
||||
version = "0.14.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
|
||||
checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
|
||||
|
||||
[[package]]
|
||||
name = "hermit-abi"
|
||||
|
@ -469,12 +469,6 @@ version = "0.4.3"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
|
||||
|
||||
[[package]]
|
||||
name = "ident_case"
|
||||
version = "1.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
|
||||
|
||||
[[package]]
|
||||
name = "idna"
|
||||
version = "0.5.0"
|
||||
|
@ -560,15 +554,15 @@ checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67"
|
|||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.153"
|
||||
version = "0.2.155"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
|
||||
checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c"
|
||||
|
||||
[[package]]
|
||||
name = "lock_api"
|
||||
version = "0.4.11"
|
||||
version = "0.4.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
|
||||
checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
"scopeguard",
|
||||
|
@ -609,9 +603,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
|
|||
|
||||
[[package]]
|
||||
name = "miniz_oxide"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7"
|
||||
checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae"
|
||||
dependencies = [
|
||||
"adler",
|
||||
]
|
||||
|
@ -633,7 +627,7 @@ version = "0.9.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bfb67c6dd0fa9b00619c41c5700b6f92d5f418be49b45ddb9970fbd4569df3c8"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"bitflags 1.3.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -677,33 +671,32 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "object"
|
||||
version = "0.32.2"
|
||||
version = "0.35.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441"
|
||||
checksum = "b8ec7ab813848ba4522158d5517a6093db1ded27575b070f4177b8d12b41db5e"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ok_macros"
|
||||
version = "0.1.6"
|
||||
version = "0.1.9"
|
||||
dependencies = [
|
||||
"darling",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"slog",
|
||||
"syn 2.0.63",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "okstd"
|
||||
version = "0.1.6"
|
||||
version = "0.1.9"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"backtrace",
|
||||
"base64",
|
||||
"colored 2.1.0",
|
||||
"crc16",
|
||||
"crc32_digest",
|
||||
"fastvlq",
|
||||
"fern",
|
||||
"futures",
|
||||
|
@ -736,9 +729,9 @@ checksum = "7f222829ae9293e33a9f5e9f440c6760a3d450a64affe1846486b140db81c1f4"
|
|||
|
||||
[[package]]
|
||||
name = "parking_lot"
|
||||
version = "0.12.1"
|
||||
version = "0.12.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
|
||||
checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27"
|
||||
dependencies = [
|
||||
"lock_api",
|
||||
"parking_lot_core",
|
||||
|
@ -746,15 +739,15 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "parking_lot_core"
|
||||
version = "0.9.9"
|
||||
version = "0.9.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
|
||||
checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"redox_syscall",
|
||||
"smallvec",
|
||||
"windows-targets 0.48.5",
|
||||
"windows-targets 0.52.5",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -774,7 +767,7 @@ version = "0.10.4"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c4e89a9f2f40b2389ba6da0814c8044bf942bece03dffa1514f84e3b525f4f9a"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"bitflags 1.3.2",
|
||||
"elsa",
|
||||
"maybe-owned",
|
||||
"pdb",
|
||||
|
@ -823,9 +816,9 @@ checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
|
|||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.81"
|
||||
version = "1.0.84"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba"
|
||||
checksum = "ec96c6a92621310b51366f1e28d05ef11489516e93be030060e5fc12024a49d6"
|
||||
dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
|
@ -858,11 +851,11 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "redox_syscall"
|
||||
version = "0.4.1"
|
||||
version = "0.5.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
|
||||
checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"bitflags 2.5.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -896,9 +889,9 @@ checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56"
|
|||
|
||||
[[package]]
|
||||
name = "rustc-demangle"
|
||||
version = "0.1.23"
|
||||
version = "0.1.24"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
|
||||
checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"
|
||||
|
||||
[[package]]
|
||||
name = "rustc-hash"
|
||||
|
@ -917,9 +910,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "ryu"
|
||||
version = "1.0.17"
|
||||
version = "1.0.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1"
|
||||
checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
|
||||
|
||||
[[package]]
|
||||
name = "scopeguard"
|
||||
|
@ -944,7 +937,7 @@ checksum = "1db149f81d46d2deba7cd3c50772474707729550221e69588478ebf9ada425ae"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.63",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -958,9 +951,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "semver"
|
||||
version = "1.0.22"
|
||||
version = "1.0.23"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca"
|
||||
checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b"
|
||||
|
||||
[[package]]
|
||||
name = "semver-parser"
|
||||
|
@ -970,29 +963,29 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
|
|||
|
||||
[[package]]
|
||||
name = "serde"
|
||||
version = "1.0.199"
|
||||
version = "1.0.203"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0c9f6e76df036c77cd94996771fb40db98187f096dd0b9af39c6c6e452ba966a"
|
||||
checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094"
|
||||
dependencies = [
|
||||
"serde_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_derive"
|
||||
version = "1.0.199"
|
||||
version = "1.0.203"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "11bd257a6541e141e42ca6d24ae26f7714887b47e89aa739099104c7e4d3b7fc"
|
||||
checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.63",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_json"
|
||||
version = "1.0.116"
|
||||
version = "1.0.117"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3e17db7126d17feb94eb3fad46bf1a96b034e8aacbc2e775fe81505f8b0b2813"
|
||||
checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3"
|
||||
dependencies = [
|
||||
"itoa",
|
||||
"ryu",
|
||||
|
@ -1001,18 +994,18 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "serde_spanned"
|
||||
version = "0.6.5"
|
||||
version = "0.6.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1"
|
||||
checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "signal-hook-registry"
|
||||
version = "1.4.1"
|
||||
version = "1.4.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
|
||||
checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
@ -1041,12 +1034,6 @@ dependencies = [
|
|||
"autocfg",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "slog"
|
||||
version = "2.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8347046d4ebd943127157b94d63abb990fcf729dc4e9978927fdf4ac3c998d06"
|
||||
|
||||
[[package]]
|
||||
name = "smallvec"
|
||||
version = "1.13.2"
|
||||
|
@ -1055,9 +1042,9 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
|
|||
|
||||
[[package]]
|
||||
name = "socket2"
|
||||
version = "0.5.6"
|
||||
version = "0.5.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871"
|
||||
checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"windows-sys 0.52.0",
|
||||
|
@ -1102,12 +1089,6 @@ dependencies = [
|
|||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "strsim"
|
||||
version = "0.9.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c"
|
||||
|
||||
[[package]]
|
||||
name = "symbolic"
|
||||
version = "12.8.0"
|
||||
|
@ -1145,7 +1126,7 @@ dependencies = [
|
|||
"elsa",
|
||||
"fallible-iterator 0.3.0",
|
||||
"flate2",
|
||||
"gimli",
|
||||
"gimli 0.28.1",
|
||||
"goblin",
|
||||
"lazy_static",
|
||||
"nom",
|
||||
|
@ -1210,20 +1191,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "1.0.109"
|
||||
version = "2.0.66"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.63"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bf5be731623ca1a1fb7d8be6f261a3be6d3e2337b8a1f97be944d020c8fcb704"
|
||||
checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
@ -1247,22 +1217,22 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "thiserror"
|
||||
version = "1.0.58"
|
||||
version = "1.0.61"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297"
|
||||
checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709"
|
||||
dependencies = [
|
||||
"thiserror-impl",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "thiserror-impl"
|
||||
version = "1.0.58"
|
||||
version = "1.0.61"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7"
|
||||
checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.63",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -1307,14 +1277,14 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.63",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml"
|
||||
version = "0.8.12"
|
||||
version = "0.8.13"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e9dd1545e8208b4a5af1aa9bbd0b4cf7e9ea08fabc5d0a5c67fcaafa17433aa3"
|
||||
checksum = "a4e43f8cc456c9704c851ae29c67e17ef65d2c30017c17a9765b89c382dc8bba"
|
||||
dependencies = [
|
||||
"serde",
|
||||
"serde_spanned",
|
||||
|
@ -1324,18 +1294,18 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "toml_datetime"
|
||||
version = "0.6.5"
|
||||
version = "0.6.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1"
|
||||
checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml_edit"
|
||||
version = "0.22.12"
|
||||
version = "0.22.13"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d3328d4f68a705b2a4498da1d580585d39a6510f98318a2cec3018a7ec61ddef"
|
||||
checksum = "c127785850e8c20836d49732ae6abfa47616e60bf9d9f57c43c250361a9db96c"
|
||||
dependencies = [
|
||||
"indexmap",
|
||||
"serde",
|
||||
|
@ -1363,7 +1333,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.63",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -1389,6 +1359,12 @@ dependencies = [
|
|||
"toml",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "typenum"
|
||||
version = "1.17.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-bidi"
|
||||
version = "0.3.15"
|
||||
|
@ -1446,7 +1422,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "77f1154f1ab868e2a01d9834a805faca7bf8b50d041b4ca714d005d0dab1c50c"
|
||||
dependencies = [
|
||||
"indexmap",
|
||||
"semver 1.0.22",
|
||||
"semver 1.0.23",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -1477,11 +1453,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
|
|||
|
||||
[[package]]
|
||||
name = "winapi-util"
|
||||
version = "0.1.6"
|
||||
version = "0.1.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
|
||||
checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b"
|
||||
dependencies = [
|
||||
"winapi",
|
||||
"windows-sys 0.52.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -1631,9 +1607,9 @@ checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0"
|
|||
|
||||
[[package]]
|
||||
name = "winnow"
|
||||
version = "0.6.8"
|
||||
version = "0.6.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c3c52e9c97a68071b23e836c9380edae937f17b9c4667bd021973efc689f618d"
|
||||
checksum = "86c949fede1d13936a99f14fafd3e76fd642b556dd2ce96287fbe2e0151bfac6"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
|
20
Cargo.toml
20
Cargo.toml
|
@ -1,13 +1,16 @@
|
|||
[package]
|
||||
name = "okstd"
|
||||
version = "0.1.6"
|
||||
version = "0.1.9"
|
||||
edition = "2021"
|
||||
|
||||
[lib]
|
||||
crate-type = ["cdylib", "rlib"]
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[features]
|
||||
unstable = ["dep:symbolic", "dep:sourcemap"]
|
||||
|
||||
unstable = ["dep:symbolic", "dep:sourcemap", "dep:backtrace", "macros" ]
|
||||
macros = ["dep:ok_macros"]
|
||||
|
||||
[dependencies]
|
||||
symbolic = { version = "12.8.0", features = [
|
||||
|
@ -17,27 +20,30 @@ symbolic = { version = "12.8.0", features = [
|
|||
"symcache",
|
||||
"debuginfo",
|
||||
], optional = true }
|
||||
|
||||
crc32_digest = "0.8.1"
|
||||
sourcemap = { version = "8.0.1", optional = true }
|
||||
anyhow = "1.0.81"
|
||||
backtrace = { version = "0.3.71", features = ["serde", "serialize-serde"] }
|
||||
backtrace = { version = "0.3.71", features = ["serde", "serialize-serde"], optional = true }
|
||||
base64 = "0.22.0"
|
||||
crc16 = "0.4.0"
|
||||
fastvlq = "1.1.1"
|
||||
futures = "0.3.30"
|
||||
hex = "0.4.3"
|
||||
num_cpus = "1.16.0"
|
||||
ok_macros = { version = "0.1.6", path = "ok_macros", registry = "oksoftware" }
|
||||
ok_macros = { version = "0.1.9", path = "ok_macros", registry = "oksoftware", optional = true }
|
||||
rustc-demangle = "0.1.23"
|
||||
serde = "*"
|
||||
serde_json = "*"
|
||||
log = "0.4"
|
||||
colored = "2"
|
||||
fern = { version = "0.6", features = ["colored"] }
|
||||
|
||||
termcolor = "1.4.1"
|
||||
tokio = { version = "1.37.0", features = ["full"] }
|
||||
url = "2.5.0"
|
||||
|
||||
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
|
||||
tokio = { version = "1.37.0", features = ["full"] }
|
||||
|
||||
[workspace]
|
||||
members = ["integration", "ok_macros"]
|
||||
|
||||
|
|
|
@ -4,6 +4,12 @@
|
|||
|
||||
Standards that are OK.
|
||||
|
||||
## Motivation
|
||||
|
||||
Rust's ecosystem is known for its vibrant community and wealth of high-quality crates. However, this abundance has led to some fragmentation, especially when it comes to foundational aspects like asynchronous programming, I/O, and logging. Developers are often faced with choosing between multiple ways of handling async code (e.g., async-std, tokio, smol, surf), several approaches to async I/O, and numerous logging frameworks (e.g., log, env_logger, pretty_env_logger, femme, flexi_logger). While having options is valuable, it can also lead to decision paralysis and make it harder to build an ecosystem of interoperable libraries and frameworks.
|
||||
|
||||
This is the crate when we reach for when we need such primitives, essentially the "Battery Included" crate.
|
||||
|
||||
## Getting Started
|
||||
|
||||
```bash
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "ok_macros"
|
||||
version = "0.1.6"
|
||||
version = "0.1.9"
|
||||
edition = "2021"
|
||||
|
||||
|
||||
|
@ -12,6 +12,4 @@ proc-macro = true
|
|||
[dependencies]
|
||||
syn = { version = "2.0.63", features = ["full", "extra-traits", "visit-mut"] }
|
||||
quote = "^1"
|
||||
darling = "0.10.0"
|
||||
proc-macro2 = "1.0.3"
|
||||
slog = "2.7.0"
|
||||
|
|
|
@ -93,25 +93,7 @@ pub fn setup_logging(
|
|||
}
|
||||
|
||||
|
||||
/// setup panic hook for crashdu.mp
|
||||
/// similar to log, we just want to setup the panic hook
|
||||
/// and keep the function as is
|
||||
///
|
||||
/// # Example
|
||||
///
|
||||
/// ```rust,notest
|
||||
/// #[okstd::crashdump]
|
||||
/// fn does_something() {
|
||||
/// // do something
|
||||
/// }
|
||||
///```
|
||||
/// to
|
||||
/// ```rust,notest
|
||||
/// fn does_something() {
|
||||
/// setup_panic_hook();
|
||||
/// // do something
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
pub fn setup_panic_hook(
|
||||
_args: proc_macro::TokenStream,
|
||||
input: proc_macro::TokenStream,
|
||||
|
@ -152,38 +134,7 @@ pub fn setup_panic_hook(
|
|||
TokenStream::from(result)
|
||||
}
|
||||
|
||||
/// testing
|
||||
/// take a function and if it's not async, just add the #[test] attribute
|
||||
/// if it's async, add the #[test] attribute and setup the runtime
|
||||
/// take the previous function body then pass it into block_on as
|
||||
/// a closure
|
||||
/// ```rust,notest
|
||||
/// #[okstd::test]
|
||||
/// fn does_something() {
|
||||
/// // do something
|
||||
/// }
|
||||
/// ```
|
||||
/// to
|
||||
/// ```rust,notest
|
||||
/// #[test]
|
||||
/// fn does_something() {
|
||||
/// // do something
|
||||
/// }
|
||||
/// ```
|
||||
/// or
|
||||
/// ```rust,notest
|
||||
/// #[okstd::test]
|
||||
/// async fn does_something() {
|
||||
/// // do something
|
||||
/// }
|
||||
/// ```
|
||||
/// to
|
||||
/// ```rust,notest
|
||||
/// #[test]
|
||||
/// fn does_something() {
|
||||
/// Runtimes::setup_runtimes().unwrap().block_on(async #body)
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
pub fn test(
|
||||
_args: proc_macro::TokenStream,
|
||||
input: proc_macro::TokenStream,
|
||||
|
@ -192,7 +143,7 @@ pub fn test(
|
|||
|
||||
let fn_name = &item_fn.clone().sig.ident;
|
||||
|
||||
let attrs: &Vec<syn::Attribute> = &item_fn.attrs;
|
||||
let _attrs: &Vec<syn::Attribute> = &item_fn.attrs;
|
||||
let asyncness: &Option<syn::token::Async> = &item_fn.sig.asyncness;
|
||||
let generics: &syn::Generics = &item_fn.sig.generics;
|
||||
let inputs: &Punctuated<syn::FnArg, syn::token::Comma> = &item_fn.sig.inputs;
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
#![recursion_limit = "128"]
|
||||
extern crate proc_macro;
|
||||
extern crate syn;
|
||||
|
||||
use proc_macro::TokenStream;
|
||||
use quote::quote;
|
||||
|
|
20
src/lib.rs
20
src/lib.rs
|
@ -1,10 +1,10 @@
|
|||
//!
|
||||
|
||||
pub mod oklog;
|
||||
// if not wasm
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
pub mod okasync;
|
||||
|
||||
#[cfg(feature = "unstable")]
|
||||
pub mod notokpanic;
|
||||
pub mod okpanic;
|
||||
mod e2e_tests;
|
||||
|
||||
extern crate fern;
|
||||
|
@ -12,11 +12,14 @@ extern crate fern;
|
|||
use log as rustlog;
|
||||
|
||||
pub mod prelude {
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
pub use crate::okasync::*;
|
||||
|
||||
pub use crate::oklog::setup_logging;
|
||||
|
||||
#[cfg(feature = "macros")]
|
||||
pub use super::main;
|
||||
#[cfg(feature = "macros")]
|
||||
pub use super::log;
|
||||
|
||||
// re-export the slog macros
|
||||
|
@ -28,16 +31,21 @@ pub mod prelude {
|
|||
pub use crate::rustlog::warn;
|
||||
|
||||
pub use crate::rustlog::LevelFilter;
|
||||
|
||||
#[cfg(feature = "macros")]
|
||||
pub use std::panic::set_hook;
|
||||
|
||||
#[cfg(feature = "macros")]
|
||||
#[cfg(feature = "unstable")]
|
||||
pub use crate::notokpanic::panic_hook;
|
||||
pub use crate::okpanic::panic_hook;
|
||||
}
|
||||
|
||||
#[cfg(feature = "macros")]
|
||||
pub use ok_macros::main;
|
||||
#[cfg(feature = "macros")]
|
||||
pub use ok_macros::test;
|
||||
#[cfg(feature = "macros")]
|
||||
pub use ok_macros::log;
|
||||
|
||||
|
||||
#[cfg(feature = "macros")]
|
||||
#[cfg(feature = "unstable")]
|
||||
pub use ok_macros::crashdump;
|
35
src/oklog.rs
35
src/oklog.rs
|
@ -5,17 +5,22 @@ use std::{io, path::PathBuf};
|
|||
// get module color hashes the module name
|
||||
// and attempts to return a unique color as far as ansi colors go
|
||||
fn get_module_color(module: &str) -> colored::Color {
|
||||
// crc16 is a good hash for this
|
||||
let hash = crc16::State::<crc16::XMODEM>::calculate(module.as_bytes());
|
||||
let hash = hash + 5;
|
||||
match hash % 6 {
|
||||
let hash = module
|
||||
.chars()
|
||||
.fold(0 as u32, |acc, c| acc.wrapping_add(c as u32));
|
||||
match hash % 13 {
|
||||
0 => Color::Red,
|
||||
1 => Color::Green,
|
||||
2 => Color::Yellow,
|
||||
3 => Color::Blue,
|
||||
4 => Color::Magenta,
|
||||
5 => Color::Cyan,
|
||||
_ => Color::White,
|
||||
8 => Color::BrightRed,
|
||||
9 => Color::BrightGreen,
|
||||
10 => Color::BrightYellow,
|
||||
11 => Color::BrightBlue,
|
||||
12 => Color::BrightMagenta,
|
||||
_ => Color::BrightCyan,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -39,7 +44,7 @@ pub fn setup_logging(level: log::LevelFilter) -> Result<(), fern::InitError> {
|
|||
|
||||
out.finish(format_args!(
|
||||
"{} {}:{} {} {}",
|
||||
format!("{}/{}", "ok.software/", module).color(module_color),
|
||||
format!("{}/{}", "ok.software", module).color(module_color),
|
||||
loc,
|
||||
record.line().unwrap(),
|
||||
colors.color(record.level()),
|
||||
|
@ -57,6 +62,24 @@ mod tests {
|
|||
use super::*;
|
||||
use log::info;
|
||||
|
||||
#[test]
|
||||
fn test_module_color() {
|
||||
let module = "okstd::oklog";
|
||||
let color = get_module_color(module);
|
||||
println!("Module: {} Color: {:?}", module, color);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_module_color_randomness_by_hash() {
|
||||
let mut colors = vec![];
|
||||
for i in 0..100 {
|
||||
let module = format!("okstd::oklog::{}", i);
|
||||
let color = get_module_color(&module);
|
||||
colors.push(color);
|
||||
}
|
||||
println!("Colors: {:?}", colors);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_logging() {
|
||||
setup_logging(log::LevelFilter::Error).unwrap();
|
||||
|
|
|
@ -46,30 +46,6 @@ const WELL_KNOWN_BORDER_FRAMES: &[&str] = &[
|
|||
"tracing_core::",
|
||||
];
|
||||
|
||||
// i64 to u64 without loss of data
|
||||
fn u64(x: i64) -> u64 {
|
||||
x as u64
|
||||
}
|
||||
|
||||
// i64 to u64 without loss of data
|
||||
fn i64(x: u64) -> i64 {
|
||||
x as i64
|
||||
}
|
||||
|
||||
fn uuid_to_i64(uuid: Uuid) -> (i64, i64) {
|
||||
let (high, low) = uuid.as_u64_pair();
|
||||
(
|
||||
i64::from_be_bytes(high.to_ne_bytes()),
|
||||
i64::from_ne_bytes(low.to_ne_bytes()),
|
||||
)
|
||||
}
|
||||
|
||||
fn i64_to_uuid(high: i64, low: i64) -> Uuid {
|
||||
let high = u64::from_ne_bytes(high.to_ne_bytes());
|
||||
let low = u64::from_ne_bytes(low.to_ne_bytes());
|
||||
Uuid::from_u64_pair(high, low)
|
||||
}
|
||||
|
||||
// generate_crashdump_url generates a crashdump URL for the
|
||||
// given addresses, current platform, architecture and debugId
|
||||
// buildId, commit and cargo package meta.
|
||||
|
@ -103,6 +79,7 @@ fn encode_crashdump_url(addresses: &[i64], debug_id: DebugId) -> String {
|
|||
|
||||
// decode_crashdump_url decodes a crashdump URL and returns the
|
||||
// addresses, debugId, buildId, commit and cargo package meta.
|
||||
#[allow(dead_code)]
|
||||
fn decode_crashdump_url(url: &str) -> (Vec<i64>, DebugId) {
|
||||
let u = url::Url::parse(url).unwrap();
|
||||
let segments = u.path_segments().unwrap().collect::<Vec<_>>();
|
Loading…
Reference in a new issue