Merge pull request #1373 from aarroyoc/http-open
Add Hyper based `http_open/3`
This commit is contained in:
537
Cargo.lock
generated
537
Cargo.lock
generated
@@ -132,6 +132,12 @@ version = "1.4.3"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
|
checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "bytes"
|
||||||
|
version = "1.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cc"
|
name = "cc"
|
||||||
version = "1.0.73"
|
version = "1.0.73"
|
||||||
@@ -219,7 +225,7 @@ dependencies = [
|
|||||||
"crossterm_winapi",
|
"crossterm_winapi",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"libc",
|
"libc",
|
||||||
"mio",
|
"mio 0.6.23",
|
||||||
"parking_lot 0.10.2",
|
"parking_lot 0.10.2",
|
||||||
"signal-hook",
|
"signal-hook",
|
||||||
"winapi 0.3.9",
|
"winapi 0.3.9",
|
||||||
@@ -294,9 +300,9 @@ checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ed25519"
|
name = "ed25519"
|
||||||
version = "1.4.0"
|
version = "1.4.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "eed12bbf7b5312f8da1c2722bc06d8c6b12c2d86a7fb35a194c7f3e6fc2bbe39"
|
checksum = "3d5c4b5e5959dc2c2b89918d8e2cc40fcdd623cef026ed09d2f0ee05199dc8e4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"signature",
|
"signature",
|
||||||
]
|
]
|
||||||
@@ -355,15 +361,21 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fd-lock"
|
name = "fd-lock"
|
||||||
version = "3.0.4"
|
version = "3.0.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "02ecad9808e0596f8956d14f7fa868f996290bd01c8d7329d6e5bc2bb76adf8f"
|
checksum = "46e245f4c8ec30c6415c56cb132c07e69e74f1942f6b4a4061da748b49f486ca"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if 1.0.0",
|
"cfg-if 1.0.0",
|
||||||
"rustix",
|
"rustix",
|
||||||
"windows-sys",
|
"windows-sys 0.30.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "fnv"
|
||||||
|
version = "1.0.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "foreign-types"
|
name = "foreign-types"
|
||||||
version = "0.3.2"
|
version = "0.3.2"
|
||||||
@@ -411,6 +423,45 @@ dependencies = [
|
|||||||
"new_debug_unreachable",
|
"new_debug_unreachable",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "futures-channel"
|
||||||
|
version = "0.3.21"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010"
|
||||||
|
dependencies = [
|
||||||
|
"futures-core",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "futures-core"
|
||||||
|
version = "0.3.21"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "futures-sink"
|
||||||
|
version = "0.3.21"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "futures-task"
|
||||||
|
version = "0.3.21"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "futures-util"
|
||||||
|
version = "0.3.21"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a"
|
||||||
|
dependencies = [
|
||||||
|
"futures-core",
|
||||||
|
"futures-task",
|
||||||
|
"pin-project-lite",
|
||||||
|
"pin-utils",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fxhash"
|
name = "fxhash"
|
||||||
version = "0.2.1"
|
version = "0.2.1"
|
||||||
@@ -431,13 +482,13 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "getrandom"
|
name = "getrandom"
|
||||||
version = "0.2.5"
|
version = "0.2.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d39cd93900197114fa1fcb7ae84ca742095eed9442088988ae74fa744e930e77"
|
checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if 1.0.0",
|
"cfg-if 1.0.0",
|
||||||
"libc",
|
"libc",
|
||||||
"wasi",
|
"wasi 0.10.2+wasi-snapshot-preview1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -458,8 +509,8 @@ checksum = "fe69f1cbdb6e28af2bac214e943b99ce8a0a06b447d15d3e61161b0423139f3f"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro-hack",
|
"proc-macro-hack",
|
||||||
"proc-macro2 1.0.36",
|
"proc-macro2 1.0.36",
|
||||||
"quote 1.0.15",
|
"quote 1.0.17",
|
||||||
"syn 1.0.88",
|
"syn 1.0.90",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -472,6 +523,25 @@ dependencies = [
|
|||||||
"winapi 0.3.9",
|
"winapi 0.3.9",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "h2"
|
||||||
|
version = "0.3.12"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "62eeb471aa3e3c9197aa4bfeabfe02982f6dc96f750486c0bb0009ac58b26d2b"
|
||||||
|
dependencies = [
|
||||||
|
"bytes",
|
||||||
|
"fnv",
|
||||||
|
"futures-core",
|
||||||
|
"futures-sink",
|
||||||
|
"futures-util",
|
||||||
|
"http",
|
||||||
|
"indexmap",
|
||||||
|
"slab",
|
||||||
|
"tokio",
|
||||||
|
"tokio-util",
|
||||||
|
"tracing",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hashbrown"
|
name = "hashbrown"
|
||||||
version = "0.11.2"
|
version = "0.11.2"
|
||||||
@@ -487,6 +557,15 @@ dependencies = [
|
|||||||
"unicode-segmentation",
|
"unicode-segmentation",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hermit-abi"
|
||||||
|
version = "0.1.19"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
|
||||||
|
dependencies = [
|
||||||
|
"libc",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hostname"
|
name = "hostname"
|
||||||
version = "0.3.1"
|
version = "0.3.1"
|
||||||
@@ -512,6 +591,77 @@ dependencies = [
|
|||||||
"syn 0.15.44",
|
"syn 0.15.44",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "http"
|
||||||
|
version = "0.2.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "31f4c6746584866f0feabcc69893c5b51beef3831656a968ed7ae254cdc4fd03"
|
||||||
|
dependencies = [
|
||||||
|
"bytes",
|
||||||
|
"fnv",
|
||||||
|
"itoa",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "http-body"
|
||||||
|
version = "0.4.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6"
|
||||||
|
dependencies = [
|
||||||
|
"bytes",
|
||||||
|
"http",
|
||||||
|
"pin-project-lite",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "httparse"
|
||||||
|
version = "1.6.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9100414882e15fb7feccb4897e5f0ff0ff1ca7d1a86a23208ada4d7a18e6c6c4"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "httpdate"
|
||||||
|
version = "1.0.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hyper"
|
||||||
|
version = "0.14.18"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b26ae0a80afebe130861d90abf98e3814a4f28a4c6ffeb5ab8ebb2be311e0ef2"
|
||||||
|
dependencies = [
|
||||||
|
"bytes",
|
||||||
|
"futures-channel",
|
||||||
|
"futures-core",
|
||||||
|
"futures-util",
|
||||||
|
"h2",
|
||||||
|
"http",
|
||||||
|
"http-body",
|
||||||
|
"httparse",
|
||||||
|
"httpdate",
|
||||||
|
"itoa",
|
||||||
|
"pin-project-lite",
|
||||||
|
"socket2",
|
||||||
|
"tokio",
|
||||||
|
"tower-service",
|
||||||
|
"tracing",
|
||||||
|
"want",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hyper-tls"
|
||||||
|
version = "0.5.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
|
||||||
|
dependencies = [
|
||||||
|
"bytes",
|
||||||
|
"hyper",
|
||||||
|
"native-tls",
|
||||||
|
"tokio",
|
||||||
|
"tokio-native-tls",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "indexmap"
|
name = "indexmap"
|
||||||
version = "1.8.0"
|
version = "1.8.0"
|
||||||
@@ -533,9 +683,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "io-lifetimes"
|
name = "io-lifetimes"
|
||||||
version = "0.5.3"
|
version = "0.6.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ec58677acfea8a15352d42fc87d11d63596ade9239e0a7c9352914417515dbe6"
|
checksum = "9448015e586b611e5d322f6703812bbca2f1e709d5773ecd38ddb4e3bb649504"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "iovec"
|
name = "iovec"
|
||||||
@@ -617,9 +767,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.2.120"
|
version = "0.2.121"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ad5c14e80759d0939d013e6ca49930e59fc53dd8e5009132f76240c179380c09"
|
checksum = "efaa7b300f3b5fe8eb6bf21ce3895e1751d9665086af2d64b42f19701015ff4f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libsodium-sys"
|
name = "libsodium-sys"
|
||||||
@@ -659,9 +809,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "log"
|
name = "log"
|
||||||
version = "0.4.14"
|
version = "0.4.16"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
|
checksum = "6389c490849ff5bc16be905ae24bc913a9c8892e19b2341dbc175e14c341c2b8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if 1.0.0",
|
"cfg-if 1.0.0",
|
||||||
]
|
]
|
||||||
@@ -732,12 +882,26 @@ dependencies = [
|
|||||||
"kernel32-sys",
|
"kernel32-sys",
|
||||||
"libc",
|
"libc",
|
||||||
"log",
|
"log",
|
||||||
"miow",
|
"miow 0.2.2",
|
||||||
"net2",
|
"net2",
|
||||||
"slab",
|
"slab",
|
||||||
"winapi 0.2.8",
|
"winapi 0.2.8",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "mio"
|
||||||
|
version = "0.8.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "52da4364ffb0e4fe33a9841a98a3f3014fb964045ce4f7a45a398243c8d6b0c9"
|
||||||
|
dependencies = [
|
||||||
|
"libc",
|
||||||
|
"log",
|
||||||
|
"miow 0.3.7",
|
||||||
|
"ntapi",
|
||||||
|
"wasi 0.11.0+wasi-snapshot-preview1",
|
||||||
|
"winapi 0.3.9",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "miow"
|
name = "miow"
|
||||||
version = "0.2.2"
|
version = "0.2.2"
|
||||||
@@ -750,6 +914,15 @@ dependencies = [
|
|||||||
"ws2_32-sys",
|
"ws2_32-sys",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "miow"
|
||||||
|
version = "0.3.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21"
|
||||||
|
dependencies = [
|
||||||
|
"winapi 0.3.9",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "modular-bitfield"
|
name = "modular-bitfield"
|
||||||
version = "0.11.2"
|
version = "0.11.2"
|
||||||
@@ -765,15 +938,15 @@ version = "0.11.2"
|
|||||||
source = "git+https://github.com/mthom/modular-bitfield#213535c684af277563678179d8496f11b84a283f"
|
source = "git+https://github.com/mthom/modular-bitfield#213535c684af277563678179d8496f11b84a283f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2 1.0.36",
|
"proc-macro2 1.0.36",
|
||||||
"quote 1.0.15",
|
"quote 1.0.17",
|
||||||
"syn 1.0.88",
|
"syn 1.0.90",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "native-tls"
|
name = "native-tls"
|
||||||
version = "0.2.8"
|
version = "0.2.9"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "48ba9f7719b5a0f42f338907614285fb5fd70e53858141f69898a1fb7203b24d"
|
checksum = "09bf6f32a3afefd0b587ee42ed19acd945c6d1f3b5424040f50b2f24ab16be77"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"libc",
|
"libc",
|
||||||
@@ -839,6 +1012,15 @@ dependencies = [
|
|||||||
"memoffset",
|
"memoffset",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ntapi"
|
||||||
|
version = "0.3.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f"
|
||||||
|
dependencies = [
|
||||||
|
"winapi 0.3.9",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "num-bigint"
|
name = "num-bigint"
|
||||||
version = "0.2.6"
|
version = "0.2.6"
|
||||||
@@ -893,6 +1075,16 @@ dependencies = [
|
|||||||
"autocfg 1.1.0",
|
"autocfg 1.1.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "num_cpus"
|
||||||
|
version = "1.13.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
|
||||||
|
dependencies = [
|
||||||
|
"hermit-abi",
|
||||||
|
"libc",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "once_cell"
|
name = "once_cell"
|
||||||
version = "1.10.0"
|
version = "1.10.0"
|
||||||
@@ -927,9 +1119,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "openssl-src"
|
name = "openssl-src"
|
||||||
version = "111.17.0+1.1.1m"
|
version = "111.18.0+1.1.1n"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "05d6a336abd10814198f66e2a91ccd7336611f30334119ca8ce300536666fcf4"
|
checksum = "7897a926e1e8d00219127dc020130eca4292e5ca666dd592480d72c3eca2ff6c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cc",
|
"cc",
|
||||||
]
|
]
|
||||||
@@ -978,6 +1170,16 @@ dependencies = [
|
|||||||
"parking_lot_core 0.8.5",
|
"parking_lot_core 0.8.5",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "parking_lot"
|
||||||
|
version = "0.12.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "87f5ec2493a61ac0506c0f4199f99070cbe83857b0337006a30f3e6719b8ef58"
|
||||||
|
dependencies = [
|
||||||
|
"lock_api 0.4.6",
|
||||||
|
"parking_lot_core 0.9.1",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "parking_lot_core"
|
name = "parking_lot_core"
|
||||||
version = "0.7.2"
|
version = "0.7.2"
|
||||||
@@ -1001,11 +1203,24 @@ dependencies = [
|
|||||||
"cfg-if 1.0.0",
|
"cfg-if 1.0.0",
|
||||||
"instant",
|
"instant",
|
||||||
"libc",
|
"libc",
|
||||||
"redox_syscall 0.2.11",
|
"redox_syscall 0.2.12",
|
||||||
"smallvec",
|
"smallvec",
|
||||||
"winapi 0.3.9",
|
"winapi 0.3.9",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "parking_lot_core"
|
||||||
|
version = "0.9.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "28141e0cc4143da2443301914478dc976a61ffdb3f043058310c70df2fed8954"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if 1.0.0",
|
||||||
|
"libc",
|
||||||
|
"redox_syscall 0.2.12",
|
||||||
|
"smallvec",
|
||||||
|
"windows-sys 0.32.0",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "phf"
|
name = "phf"
|
||||||
version = "0.7.24"
|
version = "0.7.24"
|
||||||
@@ -1066,8 +1281,8 @@ dependencies = [
|
|||||||
"phf_shared 0.9.0",
|
"phf_shared 0.9.0",
|
||||||
"proc-macro-hack",
|
"proc-macro-hack",
|
||||||
"proc-macro2 1.0.36",
|
"proc-macro2 1.0.36",
|
||||||
"quote 1.0.15",
|
"quote 1.0.17",
|
||||||
"syn 1.0.88",
|
"syn 1.0.90",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1088,6 +1303,18 @@ dependencies = [
|
|||||||
"siphasher 0.3.10",
|
"siphasher 0.3.10",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pin-project-lite"
|
||||||
|
version = "0.2.8"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pin-utils"
|
||||||
|
version = "0.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pkg-config"
|
name = "pkg-config"
|
||||||
version = "0.3.24"
|
version = "0.3.24"
|
||||||
@@ -1168,9 +1395,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "quote"
|
name = "quote"
|
||||||
version = "1.0.15"
|
version = "1.0.17"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145"
|
checksum = "632d02bff7f874a36f33ea8bb416cd484b90cc66c1194b1a1110d067a7013f58"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2 1.0.36",
|
"proc-macro2 1.0.36",
|
||||||
]
|
]
|
||||||
@@ -1338,21 +1565,22 @@ checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "redox_syscall"
|
name = "redox_syscall"
|
||||||
version = "0.2.11"
|
version = "0.2.12"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8380fe0152551244f0747b1bf41737e0f8a74f97a14ccefd1148187271634f3c"
|
checksum = "8ae183fc1b06c149f0c1793e1eb447c8b04bfe46d48e9e48bfb8d2d7ed64ecf0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "redox_users"
|
name = "redox_users"
|
||||||
version = "0.4.0"
|
version = "0.4.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64"
|
checksum = "7776223e2696f1aa4c6b0170e83212f47296a00424305117d013dfe86fb0fe55"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"getrandom",
|
"getrandom",
|
||||||
"redox_syscall 0.2.11",
|
"redox_syscall 0.2.12",
|
||||||
|
"thiserror",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1424,9 +1652,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rustix"
|
name = "rustix"
|
||||||
version = "0.33.4"
|
version = "0.34.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ef7ec6a44fba95d21fa522760c03c16ca5ee95cebb6e4ef579cab3e6d7ba6c06"
|
checksum = "cd3cc851a13d30a34cb747ba2a0c5101a4b2e8b1677a29b213ee465365ea495e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"errno",
|
"errno",
|
||||||
@@ -1512,6 +1740,8 @@ dependencies = [
|
|||||||
"fxhash",
|
"fxhash",
|
||||||
"git-version",
|
"git-version",
|
||||||
"hostname",
|
"hostname",
|
||||||
|
"hyper",
|
||||||
|
"hyper-tls",
|
||||||
"indexmap",
|
"indexmap",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"lexical",
|
"lexical",
|
||||||
@@ -1525,7 +1755,7 @@ dependencies = [
|
|||||||
"phf 0.9.0",
|
"phf 0.9.0",
|
||||||
"predicates-core",
|
"predicates-core",
|
||||||
"proc-macro2 1.0.36",
|
"proc-macro2 1.0.36",
|
||||||
"quote 1.0.15",
|
"quote 1.0.17",
|
||||||
"ref_thread_local",
|
"ref_thread_local",
|
||||||
"ring",
|
"ring",
|
||||||
"ripemd160",
|
"ripemd160",
|
||||||
@@ -1542,9 +1772,10 @@ dependencies = [
|
|||||||
"static_assertions",
|
"static_assertions",
|
||||||
"strum",
|
"strum",
|
||||||
"strum_macros",
|
"strum_macros",
|
||||||
"syn 1.0.88",
|
"syn 1.0.90",
|
||||||
"to-syn-value",
|
"to-syn-value",
|
||||||
"to-syn-value_derive",
|
"to-syn-value_derive",
|
||||||
|
"tokio",
|
||||||
"walkdir",
|
"walkdir",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -1594,8 +1825,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9"
|
checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2 1.0.36",
|
"proc-macro2 1.0.36",
|
||||||
"quote 1.0.15",
|
"quote 1.0.17",
|
||||||
"syn 1.0.88",
|
"syn 1.0.90",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1627,8 +1858,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "b2acd6defeddb41eb60bb468f8825d0cfd0c2a76bc03bfd235b6a1dc4f6a1ad5"
|
checksum = "b2acd6defeddb41eb60bb468f8825d0cfd0c2a76bc03bfd235b6a1dc4f6a1ad5"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2 1.0.36",
|
"proc-macro2 1.0.36",
|
||||||
"quote 1.0.15",
|
"quote 1.0.17",
|
||||||
"syn 1.0.88",
|
"syn 1.0.90",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1651,7 +1882,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "7e31d442c16f047a671b5a71e2161d6e68814012b7f5379d269ebd915fac2729"
|
checksum = "7e31d442c16f047a671b5a71e2161d6e68814012b7f5379d269ebd915fac2729"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
"mio",
|
"mio 0.6.23",
|
||||||
"signal-hook-registry",
|
"signal-hook-registry",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -1705,6 +1936,16 @@ version = "1.8.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83"
|
checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "socket2"
|
||||||
|
version = "0.4.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0"
|
||||||
|
dependencies = [
|
||||||
|
"libc",
|
||||||
|
"winapi 0.3.9",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sodiumoxide"
|
name = "sodiumoxide"
|
||||||
version = "0.2.7"
|
version = "0.2.7"
|
||||||
@@ -1759,7 +2000,7 @@ dependencies = [
|
|||||||
"phf_generator 0.7.24",
|
"phf_generator 0.7.24",
|
||||||
"phf_shared 0.7.24",
|
"phf_shared 0.7.24",
|
||||||
"proc-macro2 1.0.36",
|
"proc-macro2 1.0.36",
|
||||||
"quote 1.0.15",
|
"quote 1.0.17",
|
||||||
"string_cache_shared",
|
"string_cache_shared",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -1783,9 +2024,9 @@ checksum = "5bb0dc7ee9c15cea6199cde9a127fa16a4c5819af85395457ad72d68edc85a38"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"heck",
|
"heck",
|
||||||
"proc-macro2 1.0.36",
|
"proc-macro2 1.0.36",
|
||||||
"quote 1.0.15",
|
"quote 1.0.17",
|
||||||
"rustversion",
|
"rustversion",
|
||||||
"syn 1.0.88",
|
"syn 1.0.90",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1807,12 +2048,12 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "1.0.88"
|
version = "1.0.90"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ebd69e719f31e88618baa1eaa6ee2de5c9a1c004f1e9ecdb58e8352a13f20a01"
|
checksum = "704df27628939572cd88d33f171cd6f896f4eaca85252c6e0a72d8d8287ee86f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2 1.0.36",
|
"proc-macro2 1.0.36",
|
||||||
"quote 1.0.15",
|
"quote 1.0.17",
|
||||||
"unicode-xid 0.2.2",
|
"unicode-xid 0.2.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -1825,16 +2066,16 @@ dependencies = [
|
|||||||
"cfg-if 1.0.0",
|
"cfg-if 1.0.0",
|
||||||
"fastrand",
|
"fastrand",
|
||||||
"libc",
|
"libc",
|
||||||
"redox_syscall 0.2.11",
|
"redox_syscall 0.2.12",
|
||||||
"remove_dir_all",
|
"remove_dir_all",
|
||||||
"winapi 0.3.9",
|
"winapi 0.3.9",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tendril"
|
name = "tendril"
|
||||||
version = "0.4.2"
|
version = "0.4.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a9ef557cb397a4f0a5a3a628f06515f78563f2209e64d47055d9dc6052bf5e33"
|
checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futf",
|
"futf",
|
||||||
"mac",
|
"mac",
|
||||||
@@ -1847,6 +2088,26 @@ version = "0.2.4"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "507e9898683b6c43a9aa55b64259b721b52ba226e0f3779137e50ad114a4c90b"
|
checksum = "507e9898683b6c43a9aa55b64259b721b52ba226e0f3779137e50ad114a4c90b"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "thiserror"
|
||||||
|
version = "1.0.30"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417"
|
||||||
|
dependencies = [
|
||||||
|
"thiserror-impl",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "thiserror-impl"
|
||||||
|
version = "1.0.30"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2 1.0.36",
|
||||||
|
"quote 1.0.17",
|
||||||
|
"syn 1.0.90",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "time"
|
name = "time"
|
||||||
version = "0.1.43"
|
version = "0.1.43"
|
||||||
@@ -1863,7 +2124,7 @@ version = "0.1.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "45dcb7b4108a4793bdd74aa3714296c6eaf43663edf73fa8625d0d7621e68447"
|
checksum = "45dcb7b4108a4793bdd74aa3714296c6eaf43663edf73fa8625d0d7621e68447"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"syn 1.0.88",
|
"syn 1.0.90",
|
||||||
"to-syn-value_derive",
|
"to-syn-value_derive",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -1874,10 +2135,97 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "cd4fdec6de01b568c1d3721c9d46a352623c536cd55a8a5acfefb63d1fccccbc"
|
checksum = "cd4fdec6de01b568c1d3721c9d46a352623c536cd55a8a5acfefb63d1fccccbc"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2 1.0.36",
|
"proc-macro2 1.0.36",
|
||||||
"quote 1.0.15",
|
"quote 1.0.17",
|
||||||
"syn 1.0.88",
|
"syn 1.0.90",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tokio"
|
||||||
|
version = "1.17.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2af73ac49756f3f7c01172e34a23e5d0216f6c32333757c2c61feb2bbff5a5ee"
|
||||||
|
dependencies = [
|
||||||
|
"bytes",
|
||||||
|
"libc",
|
||||||
|
"memchr",
|
||||||
|
"mio 0.8.2",
|
||||||
|
"num_cpus",
|
||||||
|
"once_cell",
|
||||||
|
"parking_lot 0.12.0",
|
||||||
|
"pin-project-lite",
|
||||||
|
"signal-hook-registry",
|
||||||
|
"socket2",
|
||||||
|
"tokio-macros",
|
||||||
|
"winapi 0.3.9",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tokio-macros"
|
||||||
|
version = "1.7.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2 1.0.36",
|
||||||
|
"quote 1.0.17",
|
||||||
|
"syn 1.0.90",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tokio-native-tls"
|
||||||
|
version = "0.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b"
|
||||||
|
dependencies = [
|
||||||
|
"native-tls",
|
||||||
|
"tokio",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tokio-util"
|
||||||
|
version = "0.6.9"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0"
|
||||||
|
dependencies = [
|
||||||
|
"bytes",
|
||||||
|
"futures-core",
|
||||||
|
"futures-sink",
|
||||||
|
"log",
|
||||||
|
"pin-project-lite",
|
||||||
|
"tokio",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tower-service"
|
||||||
|
version = "0.3.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tracing"
|
||||||
|
version = "0.1.32"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "4a1bdf54a7c28a2bbf701e1d2233f6c77f473486b94bee4f9678da5a148dca7f"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if 1.0.0",
|
||||||
|
"pin-project-lite",
|
||||||
|
"tracing-core",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tracing-core"
|
||||||
|
version = "0.1.23"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "aa31669fa42c09c34d94d8165dd2012e8ff3c66aca50f3bb226b68f216f2706c"
|
||||||
|
dependencies = [
|
||||||
|
"lazy_static",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "try-lock"
|
||||||
|
version = "0.2.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "typenum"
|
name = "typenum"
|
||||||
version = "1.15.0"
|
version = "1.15.0"
|
||||||
@@ -1958,12 +2306,28 @@ dependencies = [
|
|||||||
"winapi-util",
|
"winapi-util",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "want"
|
||||||
|
version = "0.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
|
||||||
|
dependencies = [
|
||||||
|
"log",
|
||||||
|
"try-lock",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasi"
|
name = "wasi"
|
||||||
version = "0.10.2+wasi-snapshot-preview1"
|
version = "0.10.2+wasi-snapshot-preview1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
|
checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wasi"
|
||||||
|
version = "0.11.0+wasi-snapshot-preview1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen"
|
name = "wasm-bindgen"
|
||||||
version = "0.2.79"
|
version = "0.2.79"
|
||||||
@@ -1984,8 +2348,8 @@ dependencies = [
|
|||||||
"lazy_static",
|
"lazy_static",
|
||||||
"log",
|
"log",
|
||||||
"proc-macro2 1.0.36",
|
"proc-macro2 1.0.36",
|
||||||
"quote 1.0.15",
|
"quote 1.0.17",
|
||||||
"syn 1.0.88",
|
"syn 1.0.90",
|
||||||
"wasm-bindgen-shared",
|
"wasm-bindgen-shared",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -1995,7 +2359,7 @@ version = "0.2.79"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2f4203d69e40a52ee523b2529a773d5ffc1dc0071801c87b3d270b471b80ed01"
|
checksum = "2f4203d69e40a52ee523b2529a773d5ffc1dc0071801c87b3d270b471b80ed01"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"quote 1.0.15",
|
"quote 1.0.17",
|
||||||
"wasm-bindgen-macro-support",
|
"wasm-bindgen-macro-support",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -2006,8 +2370,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "bfa8a30d46208db204854cadbb5d4baf5fcf8071ba5bf48190c3e59937962ebc"
|
checksum = "bfa8a30d46208db204854cadbb5d4baf5fcf8071ba5bf48190c3e59937962ebc"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2 1.0.36",
|
"proc-macro2 1.0.36",
|
||||||
"quote 1.0.15",
|
"quote 1.0.17",
|
||||||
"syn 1.0.88",
|
"syn 1.0.90",
|
||||||
"wasm-bindgen-backend",
|
"wasm-bindgen-backend",
|
||||||
"wasm-bindgen-shared",
|
"wasm-bindgen-shared",
|
||||||
]
|
]
|
||||||
@@ -2077,11 +2441,24 @@ version = "0.30.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "030b7ff91626e57a05ca64a07c481973cbb2db774e4852c9c7ca342408c6a99a"
|
checksum = "030b7ff91626e57a05ca64a07c481973cbb2db774e4852c9c7ca342408c6a99a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"windows_aarch64_msvc",
|
"windows_aarch64_msvc 0.30.0",
|
||||||
"windows_i686_gnu",
|
"windows_i686_gnu 0.30.0",
|
||||||
"windows_i686_msvc",
|
"windows_i686_msvc 0.30.0",
|
||||||
"windows_x86_64_gnu",
|
"windows_x86_64_gnu 0.30.0",
|
||||||
"windows_x86_64_msvc",
|
"windows_x86_64_msvc 0.30.0",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows-sys"
|
||||||
|
version = "0.32.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "3df6e476185f92a12c072be4a189a0210dcdcf512a1891d6dff9edb874deadc6"
|
||||||
|
dependencies = [
|
||||||
|
"windows_aarch64_msvc 0.32.0",
|
||||||
|
"windows_i686_gnu 0.32.0",
|
||||||
|
"windows_i686_msvc 0.32.0",
|
||||||
|
"windows_x86_64_gnu 0.32.0",
|
||||||
|
"windows_x86_64_msvc 0.32.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -2090,30 +2467,60 @@ version = "0.30.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "29277a4435d642f775f63c7d1faeb927adba532886ce0287bd985bffb16b6bca"
|
checksum = "29277a4435d642f775f63c7d1faeb927adba532886ce0287bd985bffb16b6bca"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_aarch64_msvc"
|
||||||
|
version = "0.32.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d8e92753b1c443191654ec532f14c199742964a061be25d77d7a96f09db20bf5"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_i686_gnu"
|
name = "windows_i686_gnu"
|
||||||
version = "0.30.0"
|
version = "0.30.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1145e1989da93956c68d1864f32fb97c8f561a8f89a5125f6a2b7ea75524e4b8"
|
checksum = "1145e1989da93956c68d1864f32fb97c8f561a8f89a5125f6a2b7ea75524e4b8"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_i686_gnu"
|
||||||
|
version = "0.32.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6a711c68811799e017b6038e0922cb27a5e2f43a2ddb609fe0b6f3eeda9de615"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_i686_msvc"
|
name = "windows_i686_msvc"
|
||||||
version = "0.30.0"
|
version = "0.30.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d4a09e3a0d4753b73019db171c1339cd4362c8c44baf1bcea336235e955954a6"
|
checksum = "d4a09e3a0d4753b73019db171c1339cd4362c8c44baf1bcea336235e955954a6"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_i686_msvc"
|
||||||
|
version = "0.32.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "146c11bb1a02615db74680b32a68e2d61f553cc24c4eb5b4ca10311740e44172"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_x86_64_gnu"
|
name = "windows_x86_64_gnu"
|
||||||
version = "0.30.0"
|
version = "0.30.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8ca64fcb0220d58db4c119e050e7af03c69e6f4f415ef69ec1773d9aab422d5a"
|
checksum = "8ca64fcb0220d58db4c119e050e7af03c69e6f4f415ef69ec1773d9aab422d5a"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_x86_64_gnu"
|
||||||
|
version = "0.32.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c912b12f7454c6620635bbff3450962753834be2a594819bd5e945af18ec64bc"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_x86_64_msvc"
|
name = "windows_x86_64_msvc"
|
||||||
version = "0.30.0"
|
version = "0.30.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "08cabc9f0066848fef4bc6a1c1668e6efce38b661d2aeec75d18d8617eebb5f1"
|
checksum = "08cabc9f0066848fef4bc6a1c1668e6efce38b661d2aeec75d18d8617eebb5f1"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_x86_64_msvc"
|
||||||
|
version = "0.32.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "504a2476202769977a040c6364301a3f65d0cc9e3fb08600b2bda150a0488316"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ws2_32-sys"
|
name = "ws2_32-sys"
|
||||||
version = "0.2.1"
|
version = "0.2.1"
|
||||||
|
|||||||
@@ -65,6 +65,9 @@ sodiumoxide = "0.2.6"
|
|||||||
static_assertions = "1.1.0"
|
static_assertions = "1.1.0"
|
||||||
slice-deque = "0.3.0"
|
slice-deque = "0.3.0"
|
||||||
ryu = "1.0.9"
|
ryu = "1.0.9"
|
||||||
|
hyper = { version = "0.14", features = ["full"] }
|
||||||
|
hyper-tls = "0.5.0"
|
||||||
|
tokio = { version = "1", features = ["full"] }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
assert_cmd = "1.0.3"
|
assert_cmd = "1.0.3"
|
||||||
|
|||||||
@@ -540,6 +540,8 @@ enum SystemClauseType {
|
|||||||
CpuNow,
|
CpuNow,
|
||||||
#[strum_discriminants(strum(props(Arity = "2", Name = "$det_length_rundown")))]
|
#[strum_discriminants(strum(props(Arity = "2", Name = "$det_length_rundown")))]
|
||||||
DeterministicLengthRundown,
|
DeterministicLengthRundown,
|
||||||
|
#[strum_discriminants(strum(props(Arity = "7", Name = "$http_open")))]
|
||||||
|
HttpOpen,
|
||||||
REPL(REPLCodePtr),
|
REPL(REPLCodePtr),
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1661,6 +1663,7 @@ fn generate_instruction_preface() -> TokenStream {
|
|||||||
&Instruction::CallMaybe(_) |
|
&Instruction::CallMaybe(_) |
|
||||||
&Instruction::CallCpuNow(_) |
|
&Instruction::CallCpuNow(_) |
|
||||||
&Instruction::CallDeterministicLengthRundown(_) |
|
&Instruction::CallDeterministicLengthRundown(_) |
|
||||||
|
&Instruction::CallHttpOpen(_) |
|
||||||
&Instruction::CallCurrentTime(_) |
|
&Instruction::CallCurrentTime(_) |
|
||||||
&Instruction::CallQuotedToken(_) |
|
&Instruction::CallQuotedToken(_) |
|
||||||
&Instruction::CallReadTermFromChars(_) |
|
&Instruction::CallReadTermFromChars(_) |
|
||||||
@@ -1864,6 +1867,7 @@ fn generate_instruction_preface() -> TokenStream {
|
|||||||
&Instruction::ExecuteMaybe(_) |
|
&Instruction::ExecuteMaybe(_) |
|
||||||
&Instruction::ExecuteCpuNow(_) |
|
&Instruction::ExecuteCpuNow(_) |
|
||||||
&Instruction::ExecuteDeterministicLengthRundown(_) |
|
&Instruction::ExecuteDeterministicLengthRundown(_) |
|
||||||
|
&Instruction::ExecuteHttpOpen(_) |
|
||||||
&Instruction::ExecuteCurrentTime(_) |
|
&Instruction::ExecuteCurrentTime(_) |
|
||||||
&Instruction::ExecuteQuotedToken(_) |
|
&Instruction::ExecuteQuotedToken(_) |
|
||||||
&Instruction::ExecuteReadTermFromChars(_) |
|
&Instruction::ExecuteReadTermFromChars(_) |
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ pub enum ArenaHeaderTag {
|
|||||||
OutputFileStream = 0b10100,
|
OutputFileStream = 0b10100,
|
||||||
NamedTcpStream = 0b011100,
|
NamedTcpStream = 0b011100,
|
||||||
NamedTlsStream = 0b100000,
|
NamedTlsStream = 0b100000,
|
||||||
|
NamedHttpClientStream = 0b100001,
|
||||||
ReadlineStream = 0b110000,
|
ReadlineStream = 0b110000,
|
||||||
StaticStringStream = 0b110100,
|
StaticStringStream = 0b110100,
|
||||||
ByteStream = 0b111000,
|
ByteStream = 0b111000,
|
||||||
@@ -412,6 +413,9 @@ unsafe fn drop_slab_in_place(value: &mut AllocSlab) {
|
|||||||
ArenaHeaderTag::NamedTlsStream => {
|
ArenaHeaderTag::NamedTlsStream => {
|
||||||
ptr::drop_in_place(value.payload_offset::<StreamLayout<CharReader<NamedTlsStream>>>());
|
ptr::drop_in_place(value.payload_offset::<StreamLayout<CharReader<NamedTlsStream>>>());
|
||||||
}
|
}
|
||||||
|
ArenaHeaderTag::NamedHttpClientStream => {
|
||||||
|
ptr::drop_in_place(value.payload_offset::<StreamLayout<CharReader<NamedHttpClientStream>>>());
|
||||||
|
}
|
||||||
ArenaHeaderTag::ReadlineStream => {
|
ArenaHeaderTag::ReadlineStream => {
|
||||||
ptr::drop_in_place(value.payload_offset::<StreamLayout<ReadlineStream>>());
|
ptr::drop_in_place(value.payload_offset::<StreamLayout<ReadlineStream>>());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
Written 2020, 2021 by Markus Triska (triska@metalevel.at)
|
Written 2022 by Adrián Arroyo Calle (adrian.arroyocalle@gmail.com)
|
||||||
Part of Scryer Prolog.
|
Part of Scryer Prolog.
|
||||||
|
|
||||||
http_open(+Address, -Stream, +Options)
|
http_open(+Address, -Stream, +Options)
|
||||||
@@ -7,12 +7,16 @@
|
|||||||
|
|
||||||
Yields Stream to read the body of an HTTP reply from Address.
|
Yields Stream to read the body of an HTTP reply from Address.
|
||||||
Address is a list of characters, and includes the method. Both HTTP
|
Address is a list of characters, and includes the method. Both HTTP
|
||||||
and HTTPS are supported. Redirects are followed.
|
and HTTPS are supported.
|
||||||
|
|
||||||
Currently, Options must be the empty list. Options may be
|
Options supported:
|
||||||
added in the future to give more control over the connection.
|
|
||||||
|
|
||||||
We use HTTP/1.0 until we can read chunked transfer-encoding.
|
* method(+Method): Sets the HTTP method of the call. Method can be get (default), head, delete, post, put or patch.
|
||||||
|
* data(+Data): Data to be sent in the request. Useful for POST, PUT and PATCH operations.
|
||||||
|
* size(-Size): Unifies with the value of the Content-Length header
|
||||||
|
* request_headers(+RequestHeaders): Headers to be used in the request
|
||||||
|
* headers(-ListHeaders): Unifies with a list with all headers returned in the response
|
||||||
|
* status_code(-Code): Unifies with the status code of the request (200, 201, 404, ...)
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
@@ -23,62 +27,42 @@
|
|||||||
|
|
||||||
:- module(http_open, [http_open/3]).
|
:- module(http_open, [http_open/3]).
|
||||||
|
|
||||||
:- use_module(library(sockets)).
|
:- use_module(library(lists)).
|
||||||
:- use_module(library(error)).
|
|
||||||
:- use_module(library(format)).
|
|
||||||
:- use_module(library(charsio)).
|
|
||||||
:- use_module(library(dcgs)).
|
|
||||||
:- use_module(library(lists), [member/2]).
|
|
||||||
:- use_module(library(tls)).
|
|
||||||
|
|
||||||
http_open(Address, Stream, Options) :-
|
http_open(Address, Response, Options) :-
|
||||||
must_be(list, Options),
|
parse_http_options(Options, OptionValues),
|
||||||
must_be(list, Address),
|
( member(method(Method), OptionValues) -> true; Method = get),
|
||||||
once(phrase((seq(SchemeCs), "://", seq(Rest)), Address)),
|
( member(data(Data), OptionValues) -> true; Data = []),
|
||||||
atom_chars(Scheme, SchemeCs),
|
( member(request_headers(RequestHeaders), OptionValues) -> true; RequestHeaders = ['user-agent'("Scryer Prolog")]),
|
||||||
chars_host_url(Rest, Host, URL),
|
( member(status_code(Code), OptionValues) -> true; true),
|
||||||
connect(Scheme, Host, Stream0),
|
( member(headers(Headers), OptionValues) -> true; true),
|
||||||
format(Stream0, "\
|
( member(size(Size), OptionValues) -> member('content-length'(Size), Headers); true),
|
||||||
GET ~s HTTP/1.0\r\n\
|
'$http_open'(Address, Response, Method, Code, Data, Headers, RequestHeaders).
|
||||||
Host: ~w\r\n\
|
|
||||||
User-Agent: Scryer Prolog\r\n\
|
|
||||||
Connection: close\r\n\r\n\
|
|
||||||
", [URL,Host]),
|
|
||||||
read_line_to_chars(Stream0, StatusLine, []),
|
|
||||||
once(phrase(("HTTP/1.",(['0']|['1'])," ",[D1]), StatusLine, _)),
|
|
||||||
read_header_lines(Stream0, HeaderLines),
|
|
||||||
handle_response(D1, HeaderLines, Stream0, Stream).
|
|
||||||
|
|
||||||
handle_response('2', _, Stream, Stream). % ok
|
parse_http_options(Options, OptionValues) :-
|
||||||
handle_response('3', HeaderLines, Stream0, Stream) :- % redirect
|
maplist(parse_http_options_, Options, OptionValues).
|
||||||
close(Stream0),
|
|
||||||
once((member(Line, HeaderLines),
|
|
||||||
phrase(("Location: ",seq(Location),"\r\n"), Line))),
|
|
||||||
http_open(Location, Stream, []).
|
|
||||||
|
|
||||||
% Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
|
parse_http_options_(method(Method), method(Method)) :-
|
||||||
|
( var(Method) ->
|
||||||
read_header_lines(Stream, Hs) :-
|
throw(error(instantiation_error, http_open/3))
|
||||||
read_line_to_chars(Stream, Cs, []),
|
;
|
||||||
( Cs == "" -> Hs = []
|
member(Method, [get, post, put, delete, patch, head]) -> true
|
||||||
; Cs == "\r\n" -> Hs = []
|
;
|
||||||
; Hs = [Cs|Rest],
|
throw(error(domain_error(http_option, method(Method)), _))
|
||||||
read_header_lines(Stream, Rest)
|
|
||||||
).
|
).
|
||||||
|
|
||||||
chars_host_url(Cs, Host, [/|Us]) :-
|
parse_http_options_(data(Data), data(Data)) :-
|
||||||
( phrase((seq(Hs),"/",seq(Us)), Cs) ->
|
( var(Data) ->
|
||||||
true
|
throw(error(instantiation_error, http_open/3))
|
||||||
; Hs = Cs,
|
; true
|
||||||
Us = []
|
).
|
||||||
),
|
|
||||||
atom_chars(Host, Hs).
|
|
||||||
|
|
||||||
connect(https, Host, Stream) :-
|
parse_http_options_(request_headers(Headers), request_headers(Headers)) :-
|
||||||
socket_client_open(Host:443, Stream0, []),
|
( var(Headers) ->
|
||||||
atom_chars(Host, HostChars),
|
throw(error(instantiation_error, http_open/3))
|
||||||
tls_client_context(Context, [hostname(HostChars)]),
|
; true
|
||||||
tls_client_negotiate(Context, Stream0, Stream).
|
).
|
||||||
connect(http, Host, Stream) :-
|
|
||||||
socket_client_open(Host:80, Stream, []).
|
|
||||||
|
|
||||||
|
parse_http_options_(size(Size), size(Size)).
|
||||||
|
parse_http_options_(status_code(Code), status_code(Code)).
|
||||||
|
parse_http_options_(headers(Headers), headers(Headers)).
|
||||||
@@ -4127,6 +4127,14 @@ impl Machine {
|
|||||||
try_or_throw!(self.machine_st, self.det_length_rundown());
|
try_or_throw!(self.machine_st, self.det_length_rundown());
|
||||||
step_or_fail!(self, self.machine_st.p = self.machine_st.cp);
|
step_or_fail!(self, self.machine_st.p = self.machine_st.cp);
|
||||||
}
|
}
|
||||||
|
&Instruction::CallHttpOpen(_) => {
|
||||||
|
try_or_throw!(self.machine_st, self.http_open());
|
||||||
|
step_or_fail!(self, self.machine_st.p += 1);
|
||||||
|
}
|
||||||
|
&Instruction::ExecuteHttpOpen(_) => {
|
||||||
|
try_or_throw!(self.machine_st, self.http_open());
|
||||||
|
step_or_fail!(self, self.machine_st.p = self.machine_st.cp);
|
||||||
|
}
|
||||||
&Instruction::CallCurrentTime(_) => {
|
&Instruction::CallCurrentTime(_) => {
|
||||||
self.current_time();
|
self.current_time();
|
||||||
step_or_fail!(self, self.machine_st.p += 1);
|
step_or_fail!(self, self.machine_st.p += 1);
|
||||||
|
|||||||
@@ -224,6 +224,11 @@ impl Machine {
|
|||||||
let user_output = Stream::from_owned_string("".to_owned(), &mut machine_st.arena);
|
let user_output = Stream::from_owned_string("".to_owned(), &mut machine_st.arena);
|
||||||
let user_error = Stream::stderr(&mut machine_st.arena);
|
let user_error = Stream::stderr(&mut machine_st.arena);
|
||||||
|
|
||||||
|
let runtime = tokio::runtime::Builder::new_current_thread()
|
||||||
|
.enable_all()
|
||||||
|
.build()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
let mut wam = Machine {
|
let mut wam = Machine {
|
||||||
machine_st,
|
machine_st,
|
||||||
indices: IndexStore::new(),
|
indices: IndexStore::new(),
|
||||||
@@ -232,6 +237,7 @@ impl Machine {
|
|||||||
user_output,
|
user_output,
|
||||||
user_error,
|
user_error,
|
||||||
load_contexts: vec![],
|
load_contexts: vec![],
|
||||||
|
runtime
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut lib_path = current_dir();
|
let mut lib_path = current_dir();
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ use std::cmp::Ordering;
|
|||||||
use std::env;
|
use std::env;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::sync::atomic::AtomicBool;
|
use std::sync::atomic::AtomicBool;
|
||||||
|
use tokio::runtime::Runtime;
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
pub static ref INTERRUPT: AtomicBool = AtomicBool::new(false);
|
pub static ref INTERRUPT: AtomicBool = AtomicBool::new(false);
|
||||||
@@ -62,6 +63,7 @@ pub struct Machine {
|
|||||||
pub(super) user_output: Stream,
|
pub(super) user_output: Stream,
|
||||||
pub(super) user_error: Stream,
|
pub(super) user_error: Stream,
|
||||||
pub(super) load_contexts: Vec<LoadContext>,
|
pub(super) load_contexts: Vec<LoadContext>,
|
||||||
|
pub(super) runtime: Runtime,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
@@ -405,6 +407,11 @@ impl Machine {
|
|||||||
let user_output = Stream::stdout(&mut machine_st.arena);
|
let user_output = Stream::stdout(&mut machine_st.arena);
|
||||||
let user_error = Stream::stderr(&mut machine_st.arena);
|
let user_error = Stream::stderr(&mut machine_st.arena);
|
||||||
|
|
||||||
|
let runtime = tokio::runtime::Builder::new_current_thread()
|
||||||
|
.enable_all()
|
||||||
|
.build()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
let mut wam = Machine {
|
let mut wam = Machine {
|
||||||
machine_st,
|
machine_st,
|
||||||
indices: IndexStore::new(),
|
indices: IndexStore::new(),
|
||||||
@@ -413,6 +420,7 @@ impl Machine {
|
|||||||
user_output,
|
user_output,
|
||||||
user_error,
|
user_error,
|
||||||
load_contexts: vec![],
|
load_contexts: vec![],
|
||||||
|
runtime,
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut lib_path = current_dir();
|
let mut lib_path = current_dir();
|
||||||
|
|||||||
@@ -15,10 +15,11 @@ pub use modular_bitfield::prelude::*;
|
|||||||
use std::cmp::Ordering;
|
use std::cmp::Ordering;
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
use std::fmt::Debug;
|
||||||
use std::fs::{File, OpenOptions};
|
use std::fs::{File, OpenOptions};
|
||||||
use std::hash::{Hash};
|
use std::hash::{Hash};
|
||||||
use std::io;
|
use std::io;
|
||||||
use std::io::{Cursor, ErrorKind, Read, Seek, SeekFrom, Write};
|
use std::io::{BufRead, Cursor, ErrorKind, Read, Seek, SeekFrom, Write};
|
||||||
use std::mem;
|
use std::mem;
|
||||||
use std::net::{TcpStream, Shutdown};
|
use std::net::{TcpStream, Shutdown};
|
||||||
use std::ops::{Deref, DerefMut};
|
use std::ops::{Deref, DerefMut};
|
||||||
@@ -237,6 +238,24 @@ impl Write for NamedTlsStream {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub struct NamedHttpClientStream {
|
||||||
|
url: Atom,
|
||||||
|
body_reader: Box<dyn BufRead>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Debug for NamedHttpClientStream {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
write!(f, "Http Client Stream [{}]", self.url.as_str())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Read for NamedHttpClientStream {
|
||||||
|
#[inline]
|
||||||
|
fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
|
||||||
|
self.body_reader.read(buf)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct StandardOutputStream {}
|
pub struct StandardOutputStream {}
|
||||||
|
|
||||||
@@ -375,6 +394,7 @@ arena_allocated_impl_for_stream!(CharReader<InputFileStream>, InputFileStream);
|
|||||||
arena_allocated_impl_for_stream!(OutputFileStream, OutputFileStream);
|
arena_allocated_impl_for_stream!(OutputFileStream, OutputFileStream);
|
||||||
arena_allocated_impl_for_stream!(CharReader<NamedTcpStream>, NamedTcpStream);
|
arena_allocated_impl_for_stream!(CharReader<NamedTcpStream>, NamedTcpStream);
|
||||||
arena_allocated_impl_for_stream!(CharReader<NamedTlsStream>, NamedTlsStream);
|
arena_allocated_impl_for_stream!(CharReader<NamedTlsStream>, NamedTlsStream);
|
||||||
|
arena_allocated_impl_for_stream!(CharReader<NamedHttpClientStream>, NamedHttpClientStream);
|
||||||
arena_allocated_impl_for_stream!(ReadlineStream, ReadlineStream);
|
arena_allocated_impl_for_stream!(ReadlineStream, ReadlineStream);
|
||||||
arena_allocated_impl_for_stream!(StaticStringStream, StaticStringStream);
|
arena_allocated_impl_for_stream!(StaticStringStream, StaticStringStream);
|
||||||
arena_allocated_impl_for_stream!(StandardOutputStream, StandardOutputStream);
|
arena_allocated_impl_for_stream!(StandardOutputStream, StandardOutputStream);
|
||||||
@@ -388,6 +408,7 @@ pub enum Stream {
|
|||||||
StaticString(TypedArenaPtr<StreamLayout<StaticStringStream>>),
|
StaticString(TypedArenaPtr<StreamLayout<StaticStringStream>>),
|
||||||
NamedTcp(TypedArenaPtr<StreamLayout<CharReader<NamedTcpStream>>>),
|
NamedTcp(TypedArenaPtr<StreamLayout<CharReader<NamedTcpStream>>>),
|
||||||
NamedTls(TypedArenaPtr<StreamLayout<CharReader<NamedTlsStream>>>),
|
NamedTls(TypedArenaPtr<StreamLayout<CharReader<NamedTlsStream>>>),
|
||||||
|
NamedHttpClient(TypedArenaPtr<StreamLayout<CharReader<NamedHttpClientStream>>>),
|
||||||
Null(StreamOptions),
|
Null(StreamOptions),
|
||||||
Readline(TypedArenaPtr<StreamLayout<ReadlineStream>>),
|
Readline(TypedArenaPtr<StreamLayout<ReadlineStream>>),
|
||||||
StandardOutput(TypedArenaPtr<StreamLayout<StandardOutputStream>>),
|
StandardOutput(TypedArenaPtr<StreamLayout<StandardOutputStream>>),
|
||||||
@@ -442,6 +463,7 @@ impl Stream {
|
|||||||
}
|
}
|
||||||
ArenaHeaderTag::NamedTcpStream => Stream::NamedTcp(TypedArenaPtr::new(ptr as *mut _)),
|
ArenaHeaderTag::NamedTcpStream => Stream::NamedTcp(TypedArenaPtr::new(ptr as *mut _)),
|
||||||
ArenaHeaderTag::NamedTlsStream => Stream::NamedTls(TypedArenaPtr::new(ptr as *mut _)),
|
ArenaHeaderTag::NamedTlsStream => Stream::NamedTls(TypedArenaPtr::new(ptr as *mut _)),
|
||||||
|
ArenaHeaderTag::NamedHttpClientStream => Stream::NamedHttpClient(TypedArenaPtr::new(ptr as *mut _)),
|
||||||
ArenaHeaderTag::ReadlineStream => Stream::Readline(TypedArenaPtr::new(ptr as *mut _)),
|
ArenaHeaderTag::ReadlineStream => Stream::Readline(TypedArenaPtr::new(ptr as *mut _)),
|
||||||
ArenaHeaderTag::StaticStringStream => {
|
ArenaHeaderTag::StaticStringStream => {
|
||||||
Stream::StaticString(TypedArenaPtr::new(ptr as *mut _))
|
Stream::StaticString(TypedArenaPtr::new(ptr as *mut _))
|
||||||
@@ -494,6 +516,7 @@ impl Stream {
|
|||||||
Stream::StaticString(ptr) => ptr.header_ptr(),
|
Stream::StaticString(ptr) => ptr.header_ptr(),
|
||||||
Stream::NamedTcp(ptr) => ptr.header_ptr(),
|
Stream::NamedTcp(ptr) => ptr.header_ptr(),
|
||||||
Stream::NamedTls(ptr) => ptr.header_ptr(),
|
Stream::NamedTls(ptr) => ptr.header_ptr(),
|
||||||
|
Stream::NamedHttpClient(ptr) => ptr.header_ptr(),
|
||||||
Stream::Null(_) => ptr::null(),
|
Stream::Null(_) => ptr::null(),
|
||||||
Stream::Readline(ptr) => ptr.header_ptr(),
|
Stream::Readline(ptr) => ptr.header_ptr(),
|
||||||
Stream::StandardOutput(ptr) => ptr.header_ptr(),
|
Stream::StandardOutput(ptr) => ptr.header_ptr(),
|
||||||
@@ -509,6 +532,7 @@ impl Stream {
|
|||||||
Stream::StaticString(ref ptr) => &ptr.options,
|
Stream::StaticString(ref ptr) => &ptr.options,
|
||||||
Stream::NamedTcp(ref ptr) => &ptr.options,
|
Stream::NamedTcp(ref ptr) => &ptr.options,
|
||||||
Stream::NamedTls(ref ptr) => &ptr.options,
|
Stream::NamedTls(ref ptr) => &ptr.options,
|
||||||
|
Stream::NamedHttpClient(ref ptr) => &ptr.options,
|
||||||
Stream::Null(ref options) => options,
|
Stream::Null(ref options) => options,
|
||||||
Stream::Readline(ref ptr) => &ptr.options,
|
Stream::Readline(ref ptr) => &ptr.options,
|
||||||
Stream::StandardOutput(ref ptr) => &ptr.options,
|
Stream::StandardOutput(ref ptr) => &ptr.options,
|
||||||
@@ -524,6 +548,7 @@ impl Stream {
|
|||||||
Stream::StaticString(ref mut ptr) => &mut ptr.options,
|
Stream::StaticString(ref mut ptr) => &mut ptr.options,
|
||||||
Stream::NamedTcp(ref mut ptr) => &mut ptr.options,
|
Stream::NamedTcp(ref mut ptr) => &mut ptr.options,
|
||||||
Stream::NamedTls(ref mut ptr) => &mut ptr.options,
|
Stream::NamedTls(ref mut ptr) => &mut ptr.options,
|
||||||
|
Stream::NamedHttpClient(ref mut ptr) => &mut ptr.options,
|
||||||
Stream::Null(ref mut options) => options,
|
Stream::Null(ref mut options) => options,
|
||||||
Stream::Readline(ref mut ptr) => &mut ptr.options,
|
Stream::Readline(ref mut ptr) => &mut ptr.options,
|
||||||
Stream::StandardOutput(ref mut ptr) => &mut ptr.options,
|
Stream::StandardOutput(ref mut ptr) => &mut ptr.options,
|
||||||
@@ -540,6 +565,7 @@ impl Stream {
|
|||||||
Stream::StaticString(ptr) => ptr.lines_read += incr_num_lines_read,
|
Stream::StaticString(ptr) => ptr.lines_read += incr_num_lines_read,
|
||||||
Stream::NamedTcp(ptr) => ptr.lines_read += incr_num_lines_read,
|
Stream::NamedTcp(ptr) => ptr.lines_read += incr_num_lines_read,
|
||||||
Stream::NamedTls(ptr) => ptr.lines_read += incr_num_lines_read,
|
Stream::NamedTls(ptr) => ptr.lines_read += incr_num_lines_read,
|
||||||
|
Stream::NamedHttpClient(ptr) => ptr.lines_read += incr_num_lines_read,
|
||||||
Stream::Null(_) => {}
|
Stream::Null(_) => {}
|
||||||
Stream::Readline(ptr) => ptr.lines_read += incr_num_lines_read,
|
Stream::Readline(ptr) => ptr.lines_read += incr_num_lines_read,
|
||||||
Stream::StandardOutput(ptr) => ptr.lines_read += incr_num_lines_read,
|
Stream::StandardOutput(ptr) => ptr.lines_read += incr_num_lines_read,
|
||||||
@@ -556,6 +582,7 @@ impl Stream {
|
|||||||
Stream::StaticString(ptr) => ptr.lines_read = value,
|
Stream::StaticString(ptr) => ptr.lines_read = value,
|
||||||
Stream::NamedTcp(ptr) => ptr.lines_read = value,
|
Stream::NamedTcp(ptr) => ptr.lines_read = value,
|
||||||
Stream::NamedTls(ptr) => ptr.lines_read = value,
|
Stream::NamedTls(ptr) => ptr.lines_read = value,
|
||||||
|
Stream::NamedHttpClient(ptr) => ptr.lines_read = value,
|
||||||
Stream::Null(_) => {}
|
Stream::Null(_) => {}
|
||||||
Stream::Readline(ptr) => ptr.lines_read = value,
|
Stream::Readline(ptr) => ptr.lines_read = value,
|
||||||
Stream::StandardOutput(ptr) => ptr.lines_read = value,
|
Stream::StandardOutput(ptr) => ptr.lines_read = value,
|
||||||
@@ -572,6 +599,7 @@ impl Stream {
|
|||||||
Stream::StaticString(ptr) => ptr.lines_read,
|
Stream::StaticString(ptr) => ptr.lines_read,
|
||||||
Stream::NamedTcp(ptr) => ptr.lines_read,
|
Stream::NamedTcp(ptr) => ptr.lines_read,
|
||||||
Stream::NamedTls(ptr) => ptr.lines_read,
|
Stream::NamedTls(ptr) => ptr.lines_read,
|
||||||
|
Stream::NamedHttpClient(ptr) => ptr.lines_read,
|
||||||
Stream::Null(_) => 0,
|
Stream::Null(_) => 0,
|
||||||
Stream::Readline(ptr) => ptr.lines_read,
|
Stream::Readline(ptr) => ptr.lines_read,
|
||||||
Stream::StandardOutput(ptr) => ptr.lines_read,
|
Stream::StandardOutput(ptr) => ptr.lines_read,
|
||||||
@@ -586,6 +614,7 @@ impl CharRead for Stream {
|
|||||||
Stream::InputFile(file) => (*file).peek_char(),
|
Stream::InputFile(file) => (*file).peek_char(),
|
||||||
Stream::NamedTcp(tcp_stream) => (*tcp_stream).peek_char(),
|
Stream::NamedTcp(tcp_stream) => (*tcp_stream).peek_char(),
|
||||||
Stream::NamedTls(tls_stream) => (*tls_stream).peek_char(),
|
Stream::NamedTls(tls_stream) => (*tls_stream).peek_char(),
|
||||||
|
Stream::NamedHttpClient(http_stream) => (*http_stream).peek_char(),
|
||||||
Stream::Readline(rl_stream) => (*rl_stream).peek_char(),
|
Stream::Readline(rl_stream) => (*rl_stream).peek_char(),
|
||||||
Stream::StaticString(src) => (*src).peek_char(),
|
Stream::StaticString(src) => (*src).peek_char(),
|
||||||
Stream::Byte(cursor) => (*cursor).peek_char(),
|
Stream::Byte(cursor) => (*cursor).peek_char(),
|
||||||
@@ -604,6 +633,7 @@ impl CharRead for Stream {
|
|||||||
Stream::InputFile(file) => (*file).read_char(),
|
Stream::InputFile(file) => (*file).read_char(),
|
||||||
Stream::NamedTcp(tcp_stream) => (*tcp_stream).read_char(),
|
Stream::NamedTcp(tcp_stream) => (*tcp_stream).read_char(),
|
||||||
Stream::NamedTls(tls_stream) => (*tls_stream).read_char(),
|
Stream::NamedTls(tls_stream) => (*tls_stream).read_char(),
|
||||||
|
Stream::NamedHttpClient(http_stream) => (*http_stream).read_char(),
|
||||||
Stream::Readline(rl_stream) => (*rl_stream).read_char(),
|
Stream::Readline(rl_stream) => (*rl_stream).read_char(),
|
||||||
Stream::StaticString(src) => (*src).read_char(),
|
Stream::StaticString(src) => (*src).read_char(),
|
||||||
Stream::Byte(cursor) => (*cursor).read_char(),
|
Stream::Byte(cursor) => (*cursor).read_char(),
|
||||||
@@ -622,6 +652,7 @@ impl CharRead for Stream {
|
|||||||
Stream::InputFile(file) => file.put_back_char(c),
|
Stream::InputFile(file) => file.put_back_char(c),
|
||||||
Stream::NamedTcp(tcp_stream) => tcp_stream.put_back_char(c),
|
Stream::NamedTcp(tcp_stream) => tcp_stream.put_back_char(c),
|
||||||
Stream::NamedTls(tls_stream) => tls_stream.put_back_char(c),
|
Stream::NamedTls(tls_stream) => tls_stream.put_back_char(c),
|
||||||
|
Stream::NamedHttpClient(http_stream) => http_stream.put_back_char(c),
|
||||||
Stream::Readline(rl_stream) => rl_stream.put_back_char(c),
|
Stream::Readline(rl_stream) => rl_stream.put_back_char(c),
|
||||||
Stream::StaticString(src) => src.put_back_char(c),
|
Stream::StaticString(src) => src.put_back_char(c),
|
||||||
Stream::Byte(cursor) => cursor.put_back_char(c),
|
Stream::Byte(cursor) => cursor.put_back_char(c),
|
||||||
@@ -637,6 +668,7 @@ impl CharRead for Stream {
|
|||||||
Stream::InputFile(ref mut file) => file.consume(nread),
|
Stream::InputFile(ref mut file) => file.consume(nread),
|
||||||
Stream::NamedTcp(ref mut tcp_stream) => tcp_stream.consume(nread),
|
Stream::NamedTcp(ref mut tcp_stream) => tcp_stream.consume(nread),
|
||||||
Stream::NamedTls(ref mut tls_stream) => tls_stream.consume(nread),
|
Stream::NamedTls(ref mut tls_stream) => tls_stream.consume(nread),
|
||||||
|
Stream::NamedHttpClient(ref mut http_stream) => http_stream.consume(nread),
|
||||||
Stream::Readline(ref mut rl_stream) => rl_stream.consume(nread),
|
Stream::Readline(ref mut rl_stream) => rl_stream.consume(nread),
|
||||||
Stream::StaticString(ref mut src) => src.consume(nread),
|
Stream::StaticString(ref mut src) => src.consume(nread),
|
||||||
Stream::Byte(ref mut cursor) => cursor.consume(nread),
|
Stream::Byte(ref mut cursor) => cursor.consume(nread),
|
||||||
@@ -655,6 +687,7 @@ impl Read for Stream {
|
|||||||
Stream::InputFile(file) => (*file).read(buf),
|
Stream::InputFile(file) => (*file).read(buf),
|
||||||
Stream::NamedTcp(tcp_stream) => (*tcp_stream).read(buf),
|
Stream::NamedTcp(tcp_stream) => (*tcp_stream).read(buf),
|
||||||
Stream::NamedTls(tls_stream) => (*tls_stream).read(buf),
|
Stream::NamedTls(tls_stream) => (*tls_stream).read(buf),
|
||||||
|
Stream::NamedHttpClient(http_stream) => (*http_stream).read(buf),
|
||||||
Stream::Readline(rl_stream) => (*rl_stream).read(buf),
|
Stream::Readline(rl_stream) => (*rl_stream).read(buf),
|
||||||
Stream::StaticString(src) => (*src).read(buf),
|
Stream::StaticString(src) => (*src).read(buf),
|
||||||
Stream::Byte(cursor) => (*cursor).read(buf),
|
Stream::Byte(cursor) => (*cursor).read(buf),
|
||||||
@@ -680,6 +713,7 @@ impl Write for Stream {
|
|||||||
Stream::Byte(ref mut cursor) => cursor.get_mut().write(buf),
|
Stream::Byte(ref mut cursor) => cursor.get_mut().write(buf),
|
||||||
Stream::StandardOutput(stream) => stream.write(buf),
|
Stream::StandardOutput(stream) => stream.write(buf),
|
||||||
Stream::StandardError(stream) => stream.write(buf),
|
Stream::StandardError(stream) => stream.write(buf),
|
||||||
|
Stream::NamedHttpClient(_) |
|
||||||
Stream::StaticString(_) |
|
Stream::StaticString(_) |
|
||||||
Stream::Readline(_) |
|
Stream::Readline(_) |
|
||||||
Stream::InputFile(..) |
|
Stream::InputFile(..) |
|
||||||
@@ -698,6 +732,7 @@ impl Write for Stream {
|
|||||||
Stream::Byte(ref mut cursor) => cursor.stream.get_mut().flush(),
|
Stream::Byte(ref mut cursor) => cursor.stream.get_mut().flush(),
|
||||||
Stream::StandardError(stream) => stream.stream.flush(),
|
Stream::StandardError(stream) => stream.stream.flush(),
|
||||||
Stream::StandardOutput(stream) => stream.stream.flush(),
|
Stream::StandardOutput(stream) => stream.stream.flush(),
|
||||||
|
Stream::NamedHttpClient(_) |
|
||||||
Stream::StaticString(_) |
|
Stream::StaticString(_) |
|
||||||
Stream::Readline(_) |
|
Stream::Readline(_) |
|
||||||
Stream::InputFile(_) |
|
Stream::InputFile(_) |
|
||||||
@@ -822,6 +857,7 @@ impl Stream {
|
|||||||
Stream::StaticString(stream) => stream.past_end_of_stream,
|
Stream::StaticString(stream) => stream.past_end_of_stream,
|
||||||
Stream::NamedTcp(stream) => stream.past_end_of_stream,
|
Stream::NamedTcp(stream) => stream.past_end_of_stream,
|
||||||
Stream::NamedTls(stream) => stream.past_end_of_stream,
|
Stream::NamedTls(stream) => stream.past_end_of_stream,
|
||||||
|
Stream::NamedHttpClient(stream) => stream.past_end_of_stream,
|
||||||
Stream::Null(_) => false,
|
Stream::Null(_) => false,
|
||||||
Stream::Readline(stream) => stream.past_end_of_stream,
|
Stream::Readline(stream) => stream.past_end_of_stream,
|
||||||
Stream::StandardOutput(stream) => stream.past_end_of_stream,
|
Stream::StandardOutput(stream) => stream.past_end_of_stream,
|
||||||
@@ -843,6 +879,7 @@ impl Stream {
|
|||||||
Stream::StaticString(stream) => stream.past_end_of_stream = value,
|
Stream::StaticString(stream) => stream.past_end_of_stream = value,
|
||||||
Stream::NamedTcp(stream) => stream.past_end_of_stream = value,
|
Stream::NamedTcp(stream) => stream.past_end_of_stream = value,
|
||||||
Stream::NamedTls(stream) => stream.past_end_of_stream = value,
|
Stream::NamedTls(stream) => stream.past_end_of_stream = value,
|
||||||
|
Stream::NamedHttpClient(stream) => stream.past_end_of_stream = value,
|
||||||
Stream::Null(_) => {}
|
Stream::Null(_) => {}
|
||||||
Stream::Readline(stream) => stream.past_end_of_stream = value,
|
Stream::Readline(stream) => stream.past_end_of_stream = value,
|
||||||
Stream::StandardOutput(stream) => stream.past_end_of_stream = value,
|
Stream::StandardOutput(stream) => stream.past_end_of_stream = value,
|
||||||
@@ -906,6 +943,7 @@ impl Stream {
|
|||||||
Stream::Byte(_)
|
Stream::Byte(_)
|
||||||
| Stream::Readline(_)
|
| Stream::Readline(_)
|
||||||
| Stream::StaticString(_)
|
| Stream::StaticString(_)
|
||||||
|
| Stream::NamedHttpClient(_)
|
||||||
| Stream::InputFile(..) => atom!("read"),
|
| Stream::InputFile(..) => atom!("read"),
|
||||||
Stream::NamedTcp(..) | Stream::NamedTls(..) => atom!("read_append"),
|
Stream::NamedTcp(..) | Stream::NamedTls(..) => atom!("read_append"),
|
||||||
Stream::OutputFile(file) if file.is_append => atom!("append"),
|
Stream::OutputFile(file) if file.is_append => atom!("append"),
|
||||||
@@ -963,6 +1001,21 @@ impl Stream {
|
|||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
pub(crate) fn from_http_stream(
|
||||||
|
url: Atom,
|
||||||
|
http_stream: Box<dyn BufRead>,
|
||||||
|
arena: &mut Arena,
|
||||||
|
) -> Self {
|
||||||
|
Stream::NamedHttpClient(arena_alloc!(
|
||||||
|
StreamLayout::new(CharReader::new(NamedHttpClientStream {
|
||||||
|
url,
|
||||||
|
body_reader: http_stream
|
||||||
|
})),
|
||||||
|
arena
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub(crate) fn from_file_as_output(
|
pub(crate) fn from_file_as_output(
|
||||||
file_name: Atom,
|
file_name: Atom,
|
||||||
@@ -999,6 +1052,14 @@ impl Stream {
|
|||||||
Stream::NamedTls(ref mut tls_stream) => {
|
Stream::NamedTls(ref mut tls_stream) => {
|
||||||
tls_stream.inner_mut().tls_stream.shutdown()
|
tls_stream.inner_mut().tls_stream.shutdown()
|
||||||
}
|
}
|
||||||
|
Stream::NamedHttpClient(ref mut http_stream) => {
|
||||||
|
unsafe {
|
||||||
|
http_stream.set_tag(ArenaHeaderTag::Dropped);
|
||||||
|
std::ptr::drop_in_place(&mut http_stream.inner_mut().body_reader as *mut _);
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
Stream::InputFile(mut file_stream) => {
|
Stream::InputFile(mut file_stream) => {
|
||||||
// close the stream by dropping the inner File.
|
// close the stream by dropping the inner File.
|
||||||
unsafe {
|
unsafe {
|
||||||
@@ -1035,6 +1096,7 @@ impl Stream {
|
|||||||
match self {
|
match self {
|
||||||
Stream::NamedTcp(..)
|
Stream::NamedTcp(..)
|
||||||
| Stream::NamedTls(..)
|
| Stream::NamedTls(..)
|
||||||
|
| Stream::NamedHttpClient(..)
|
||||||
| Stream::Byte(_)
|
| Stream::Byte(_)
|
||||||
| Stream::Readline(_)
|
| Stream::Readline(_)
|
||||||
| Stream::StaticString(_)
|
| Stream::StaticString(_)
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ use std::mem;
|
|||||||
use std::net::{TcpListener, TcpStream};
|
use std::net::{TcpListener, TcpStream};
|
||||||
use std::num::NonZeroU32;
|
use std::num::NonZeroU32;
|
||||||
use std::ops::Sub;
|
use std::ops::Sub;
|
||||||
|
use std::str::FromStr;
|
||||||
use std::process;
|
use std::process;
|
||||||
|
|
||||||
use chrono::{offset::Local, DateTime};
|
use chrono::{offset::Local, DateTime};
|
||||||
@@ -73,6 +74,11 @@ use base64;
|
|||||||
use roxmltree;
|
use roxmltree;
|
||||||
use select;
|
use select;
|
||||||
|
|
||||||
|
use hyper::{Body, Client, HeaderMap, Method, Request, Uri};
|
||||||
|
use hyper::header::{HeaderName, HeaderValue};
|
||||||
|
use hyper::body::Buf;
|
||||||
|
use hyper_tls::HttpsConnector;
|
||||||
|
|
||||||
ref_thread_local! {
|
ref_thread_local! {
|
||||||
pub(crate) static managed RANDOM_STATE: RandState<'static> = RandState::new();
|
pub(crate) static managed RANDOM_STATE: RandState<'static> = RandState::new();
|
||||||
}
|
}
|
||||||
@@ -3263,6 +3269,129 @@ impl Machine {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline(always)]
|
||||||
|
pub(crate) fn http_open(&mut self) -> CallResult {
|
||||||
|
let address_sink = self.machine_st.store(self.machine_st.deref(self.machine_st.registers[1]));
|
||||||
|
let method = read_heap_cell!(self.machine_st.store(self.machine_st.deref(self.machine_st.registers[3])),
|
||||||
|
(HeapCellValueTag::Atom, (name, arity)) => {
|
||||||
|
debug_assert_eq!(arity, 0);
|
||||||
|
match name {
|
||||||
|
atom!("get") => Method::GET,
|
||||||
|
atom!("post") => Method::POST,
|
||||||
|
atom!("put") => Method::PUT,
|
||||||
|
atom!("delete") => Method::DELETE,
|
||||||
|
atom!("patch") => Method::PATCH,
|
||||||
|
atom!("head") => Method::HEAD,
|
||||||
|
_ => unreachable!(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
unreachable!()
|
||||||
|
}
|
||||||
|
);
|
||||||
|
let address_status = self.machine_st.store(self.machine_st.deref(self.machine_st.registers[4]));
|
||||||
|
let address_data = self.machine_st.store(self.machine_st.deref(self.machine_st.registers[5]));
|
||||||
|
let mut bytes: Vec<u8> = Vec::new();
|
||||||
|
if let Some(string) = self.machine_st.value_to_str_like(address_data) {
|
||||||
|
bytes = string.as_str().bytes().collect();
|
||||||
|
}
|
||||||
|
let stub_gen = || functor_stub(atom!("http_open"), 3);
|
||||||
|
|
||||||
|
let headers = match self.machine_st.try_from_list(self.machine_st.registers[7], stub_gen) {
|
||||||
|
Ok(addrs) => {
|
||||||
|
let mut header_map = HeaderMap::new();
|
||||||
|
for heap_cell in addrs{
|
||||||
|
read_heap_cell!(heap_cell,
|
||||||
|
(HeapCellValueTag::Str, s) => {
|
||||||
|
let name = cell_as_atom_cell!(self.machine_st.heap[s]).get_name();
|
||||||
|
let value = self.machine_st.value_to_str_like(self.machine_st.heap[s + 1]).unwrap();
|
||||||
|
header_map.insert(HeaderName::from_str(name.as_str()).unwrap(), HeaderValue::from_str(value.as_str()).unwrap());
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
unreachable!()
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
header_map
|
||||||
|
},
|
||||||
|
Err(e) => return Err(e)
|
||||||
|
};
|
||||||
|
if let Some(address_sink) = self.machine_st.value_to_str_like(address_sink) {
|
||||||
|
let address_string = match address_sink {
|
||||||
|
AtomOrString::Atom(atom) => {
|
||||||
|
String::from(atom.as_str())
|
||||||
|
}
|
||||||
|
AtomOrString::String(string) => {
|
||||||
|
String::from(string.as_str())
|
||||||
|
}
|
||||||
|
};
|
||||||
|
let address: Uri = address_string.parse().unwrap();
|
||||||
|
|
||||||
|
let stream = self.runtime.block_on(async {
|
||||||
|
let https = HttpsConnector::new();
|
||||||
|
let client = Client::builder()
|
||||||
|
.build::<_, hyper::Body>(https);
|
||||||
|
|
||||||
|
// request
|
||||||
|
let mut req = Request::builder()
|
||||||
|
.method(method)
|
||||||
|
.uri(address)
|
||||||
|
.body(Body::from(bytes))
|
||||||
|
.unwrap();
|
||||||
|
// request headers
|
||||||
|
*req.headers_mut() = headers;
|
||||||
|
// do it!
|
||||||
|
let resp = client.request(req).await.unwrap();
|
||||||
|
// status code
|
||||||
|
let status = resp.status().as_u16();
|
||||||
|
self.machine_st.unify_fixnum(Fixnum::build_with(status as i64), address_status);
|
||||||
|
// headers
|
||||||
|
let headers: Vec<HeapCellValue> = resp.headers().iter().map(|(header_name, header_value)| {
|
||||||
|
let h = self.machine_st.heap.len();
|
||||||
|
|
||||||
|
let header_term = functor!(
|
||||||
|
self.machine_st.atom_tbl.build_with(header_name.as_str()),
|
||||||
|
[cell(string_as_cstr_cell!(self.machine_st.atom_tbl.build_with(header_value.to_str().unwrap())))]
|
||||||
|
);
|
||||||
|
|
||||||
|
self.machine_st.heap.extend(header_term.into_iter());
|
||||||
|
str_loc_as_cell!(h)
|
||||||
|
}).collect();
|
||||||
|
|
||||||
|
let headers_list = iter_to_heap_list(&mut self.machine_st.heap, headers.into_iter());
|
||||||
|
unify!(self.machine_st, heap_loc_as_cell!(headers_list), self.machine_st.registers[6]);
|
||||||
|
// body
|
||||||
|
let buf = hyper::body::aggregate(resp).await.unwrap();
|
||||||
|
let reader = buf.reader();
|
||||||
|
|
||||||
|
let mut stream = Stream::from_http_stream(
|
||||||
|
self.machine_st.atom_tbl.build_with(&address_string),
|
||||||
|
Box::new(reader),
|
||||||
|
&mut self.machine_st.arena
|
||||||
|
);
|
||||||
|
*stream.options_mut() = StreamOptions::default();
|
||||||
|
if let Some(alias) = stream.options().get_alias() {
|
||||||
|
self.indices.stream_aliases.insert(alias, stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
self.indices.streams.insert(stream);
|
||||||
|
|
||||||
|
stream_as_cell!(stream)
|
||||||
|
});
|
||||||
|
|
||||||
|
let stream_addr = self.machine_st.store(self.machine_st.deref(self.machine_st.registers[2]));
|
||||||
|
self.machine_st.bind(stream_addr.as_var().unwrap(), stream);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
let err = self.machine_st.domain_error(DomainErrorType::SourceSink, address_sink);
|
||||||
|
let stub = functor_stub(atom!("http_open"), 3);
|
||||||
|
|
||||||
|
return Err(self.machine_st.error_form(err, stub));
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
pub(crate) fn current_time(&mut self) {
|
pub(crate) fn current_time(&mut self) {
|
||||||
let timestamp = self.systemtime_to_timestamp(SystemTime::now());
|
let timestamp = self.systemtime_to_timestamp(SystemTime::now());
|
||||||
|
|||||||
@@ -305,6 +305,7 @@ macro_rules! match_untyped_arena_ptr_pat {
|
|||||||
| ArenaHeaderTag::OutputFileStream
|
| ArenaHeaderTag::OutputFileStream
|
||||||
| ArenaHeaderTag::NamedTcpStream
|
| ArenaHeaderTag::NamedTcpStream
|
||||||
| ArenaHeaderTag::NamedTlsStream
|
| ArenaHeaderTag::NamedTlsStream
|
||||||
|
| ArenaHeaderTag::NamedHttpClientStream
|
||||||
| ArenaHeaderTag::ReadlineStream
|
| ArenaHeaderTag::ReadlineStream
|
||||||
| ArenaHeaderTag::StaticStringStream
|
| ArenaHeaderTag::StaticStringStream
|
||||||
| ArenaHeaderTag::ByteStream
|
| ArenaHeaderTag::ByteStream
|
||||||
|
|||||||
Reference in New Issue
Block a user