mirror of
https://github.com/Noratrieb/haesli.git
synced 2026-01-14 11:45:02 +01:00
rename lol
This commit is contained in:
parent
c68cd04af7
commit
543e39f129
70 changed files with 283 additions and 266 deletions
4
.gitattributes
vendored
4
.gitattributes
vendored
|
|
@ -1,2 +1,2 @@
|
||||||
amqp_core/src/methods/generated.rs linguist-generated
|
haesli_core/src/methods/generated.rs linguist-generated
|
||||||
amqp_transport/src/methods/generated.rs linguist-generated
|
haesli_transport/src/methods/generated.rs linguist-generated
|
||||||
235
Cargo.lock
generated
235
Cargo.lock
generated
|
|
@ -21,82 +21,17 @@ dependencies = [
|
||||||
name = "amqp"
|
name = "amqp"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"amqp_core",
|
|
||||||
"amqp_dashboard",
|
|
||||||
"amqp_transport",
|
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"clap 3.1.5",
|
"clap 3.1.6",
|
||||||
|
"haesli_core",
|
||||||
|
"haesli_dashboard",
|
||||||
|
"haesli_transport",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tracing",
|
"tracing",
|
||||||
"tracing-subscriber",
|
"tracing-subscriber",
|
||||||
"tracing-tree",
|
"tracing-tree",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "amqp_core"
|
|
||||||
version = "0.1.0"
|
|
||||||
dependencies = [
|
|
||||||
"amqp_datastructure",
|
|
||||||
"bytes",
|
|
||||||
"parking_lot",
|
|
||||||
"rand",
|
|
||||||
"smallvec",
|
|
||||||
"thiserror",
|
|
||||||
"tokio",
|
|
||||||
"uuid",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "amqp_dashboard"
|
|
||||||
version = "0.1.0"
|
|
||||||
dependencies = [
|
|
||||||
"amqp_core",
|
|
||||||
"anyhow",
|
|
||||||
"axum",
|
|
||||||
"mime_guess",
|
|
||||||
"serde",
|
|
||||||
"tokio",
|
|
||||||
"tower",
|
|
||||||
"tower-http",
|
|
||||||
"tracing",
|
|
||||||
"walkdir",
|
|
||||||
"zip",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "amqp_datastructure"
|
|
||||||
version = "0.1.0"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "amqp_messaging"
|
|
||||||
version = "0.1.0"
|
|
||||||
dependencies = [
|
|
||||||
"amqp_core",
|
|
||||||
"amqp_datastructure",
|
|
||||||
"parking_lot",
|
|
||||||
"tokio",
|
|
||||||
"tracing",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "amqp_transport"
|
|
||||||
version = "0.1.0"
|
|
||||||
dependencies = [
|
|
||||||
"amqp_core",
|
|
||||||
"amqp_messaging",
|
|
||||||
"anyhow",
|
|
||||||
"bytes",
|
|
||||||
"criterion",
|
|
||||||
"nom",
|
|
||||||
"once_cell",
|
|
||||||
"rand",
|
|
||||||
"regex",
|
|
||||||
"smallvec",
|
|
||||||
"thiserror",
|
|
||||||
"tokio",
|
|
||||||
"tracing",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ansi_term"
|
name = "ansi_term"
|
||||||
version = "0.12.1"
|
version = "0.12.1"
|
||||||
|
|
@ -108,9 +43,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "anyhow"
|
name = "anyhow"
|
||||||
version = "1.0.55"
|
version = "1.0.56"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "159bb86af3a200e19a068f4224eae4c8bb2d0fa054c7e5d1cacd5cef95e684cd"
|
checksum = "4361135be9122e0870de935d7c439aef945b9f9ddd4199a553b5270b49c82a27"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "async-trait"
|
name = "async-trait"
|
||||||
|
|
@ -172,9 +107,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "axum-core"
|
name = "axum-core"
|
||||||
version = "0.1.1"
|
version = "0.1.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1ca6c0b218388a7ed6a8d25e94f7dea5498daaa4fd8c711fb3ff166041b06fda"
|
checksum = "6dbcda393bef9c87572779cb8ef916f12d77750b27535dd6819fa86591627a51"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"bytes",
|
"bytes",
|
||||||
|
|
@ -275,9 +210,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap"
|
name = "clap"
|
||||||
version = "3.1.5"
|
version = "3.1.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ced1892c55c910c1219e98d6fc8d71f6bddba7905866ce740066d8bfea859312"
|
checksum = "d8c93436c21e4698bacadf42917db28b23017027a4deccb35dbe47a7e7840123"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"atty",
|
"atty",
|
||||||
"bitflags",
|
"bitflags",
|
||||||
|
|
@ -350,9 +285,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "crossbeam-channel"
|
name = "crossbeam-channel"
|
||||||
version = "0.5.2"
|
version = "0.5.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e54ea8bc3fb1ee042f5aace6e3c6e025d3874866da222930f70ce62aceba0bfa"
|
checksum = "5aaa7bd5fb665c6864b5f963dd9097905c54125909c7aa94c9e18507cdbe6c53"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"crossbeam-utils",
|
"crossbeam-utils",
|
||||||
|
|
@ -371,10 +306,11 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "crossbeam-epoch"
|
name = "crossbeam-epoch"
|
||||||
version = "0.9.7"
|
version = "0.9.8"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c00d6d2ea26e8b151d99093005cb442fb9a37aeaca582a03ec70946f49ab5ed9"
|
checksum = "1145cf131a2c6ba0615079ab6a638f7e1973ac9c2634fcbeaaad6114246efe8c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"autocfg",
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"crossbeam-utils",
|
"crossbeam-utils",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
|
|
@ -384,9 +320,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "crossbeam-utils"
|
name = "crossbeam-utils"
|
||||||
version = "0.8.7"
|
version = "0.8.8"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b5e5bed1f1c269533fa816a0a5492b3545209a205ca1a54842be180eb63a16a6"
|
checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
|
|
@ -489,13 +425,78 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "getrandom"
|
name = "getrandom"
|
||||||
version = "0.2.4"
|
version = "0.2.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "418d37c8b1d42553c93648be529cb70f920d3baf8ef469b74b9638df426e0b4c"
|
checksum = "d39cd93900197114fa1fcb7ae84ca742095eed9442088988ae74fa744e930e77"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"libc",
|
"libc",
|
||||||
"wasi",
|
"wasi 0.10.2+wasi-snapshot-preview1",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "haesli_core"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"bytes",
|
||||||
|
"haesli_datastructure",
|
||||||
|
"parking_lot",
|
||||||
|
"rand",
|
||||||
|
"smallvec",
|
||||||
|
"thiserror",
|
||||||
|
"tokio",
|
||||||
|
"uuid",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "haesli_dashboard"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"anyhow",
|
||||||
|
"axum",
|
||||||
|
"haesli_core",
|
||||||
|
"mime_guess",
|
||||||
|
"serde",
|
||||||
|
"tokio",
|
||||||
|
"tower",
|
||||||
|
"tower-http",
|
||||||
|
"tracing",
|
||||||
|
"walkdir",
|
||||||
|
"zip",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "haesli_datastructure"
|
||||||
|
version = "0.1.0"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "haesli_messaging"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"haesli_core",
|
||||||
|
"haesli_datastructure",
|
||||||
|
"parking_lot",
|
||||||
|
"tokio",
|
||||||
|
"tracing",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "haesli_transport"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"anyhow",
|
||||||
|
"bytes",
|
||||||
|
"criterion",
|
||||||
|
"haesli_core",
|
||||||
|
"haesli_messaging",
|
||||||
|
"nom",
|
||||||
|
"once_cell",
|
||||||
|
"rand",
|
||||||
|
"regex",
|
||||||
|
"smallvec",
|
||||||
|
"thiserror",
|
||||||
|
"tokio",
|
||||||
|
"tracing",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
@ -642,9 +643,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.2.119"
|
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 = "1bf2e165bb3457c8e098ea76f3e3bc9db55f87aa90d52d0e6be741470916aaa4"
|
checksum = "efaa7b300f3b5fe8eb6bf21ce3895e1751d9665086af2d64b42f19701015ff4f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lock_api"
|
name = "lock_api"
|
||||||
|
|
@ -734,14 +735,15 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "mio"
|
name = "mio"
|
||||||
version = "0.8.0"
|
version = "0.8.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ba272f85fa0b41fc91872be579b3bbe0f56b792aa361a380eb669469f68dafb2"
|
checksum = "52da4364ffb0e4fe33a9841a98a3f3014fb964045ce4f7a45a398243c8d6b0c9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
"log",
|
"log",
|
||||||
"miow",
|
"miow",
|
||||||
"ntapi",
|
"ntapi",
|
||||||
|
"wasi 0.11.0+wasi-snapshot-preview1",
|
||||||
"winapi",
|
"winapi",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
@ -756,13 +758,12 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nom"
|
name = "nom"
|
||||||
version = "7.1.0"
|
version = "7.1.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1b1d11e1ef389c76fe5b81bcaf2ea32cf88b62bc494e19f493d0b30e7a930109"
|
checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"memchr",
|
"memchr",
|
||||||
"minimal-lexical",
|
"minimal-lexical",
|
||||||
"version_check",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
@ -795,9 +796,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "once_cell"
|
name = "once_cell"
|
||||||
version = "1.9.0"
|
version = "1.10.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5"
|
checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oorandom"
|
name = "oorandom"
|
||||||
|
|
@ -950,9 +951,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "quote"
|
name = "quote"
|
||||||
version = "1.0.15"
|
version = "1.0.16"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145"
|
checksum = "b4af2ec4714533fcdf07e886f17025ace8b997b9ce51204ee69b6da831c3da57"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
]
|
]
|
||||||
|
|
@ -1014,18 +1015,18 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "redox_syscall"
|
name = "redox_syscall"
|
||||||
version = "0.2.10"
|
version = "0.2.11"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff"
|
checksum = "8380fe0152551244f0747b1bf41737e0f8a74f97a14ccefd1148187271634f3c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "regex"
|
name = "regex"
|
||||||
version = "1.5.4"
|
version = "1.5.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461"
|
checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aho-corasick",
|
"aho-corasick",
|
||||||
"memchr",
|
"memchr",
|
||||||
|
|
@ -1079,9 +1080,9 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "semver"
|
name = "semver"
|
||||||
version = "1.0.5"
|
version = "1.0.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0486718e92ec9a68fbed73bb5ef687d71103b142595b406835649bebd33f72c7"
|
checksum = "a4a3381e03edd24287172047536f20cabde766e2cd3e65e6b00fb3af51c4f38d"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
|
|
@ -1202,9 +1203,9 @@ checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "1.0.86"
|
version = "1.0.89"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b"
|
checksum = "ea297be220d52398dcc07ce15a209fce436d361735ac1db700cab3b6cdfb9f54"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
|
@ -1219,9 +1220,9 @@ checksum = "20518fe4a4c9acf048008599e464deb21beeae3d3578418951a189c235a7a9a8"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "termcolor"
|
name = "termcolor"
|
||||||
version = "1.1.2"
|
version = "1.1.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4"
|
checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"winapi-util",
|
"winapi-util",
|
||||||
]
|
]
|
||||||
|
|
@ -1354,9 +1355,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tower-http"
|
name = "tower-http"
|
||||||
version = "0.2.3"
|
version = "0.2.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2bb284cac1883d54083a0edbdc9cabf931dfed87455f8c7266c01ece6394a43a"
|
checksum = "aba3f3efabf7fb41fae8534fc20a817013dd1c12cb45441efb6c82e6556b4cd8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"bytes",
|
"bytes",
|
||||||
|
|
@ -1385,9 +1386,9 @@ checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tracing"
|
name = "tracing"
|
||||||
version = "0.1.31"
|
version = "0.1.32"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f6c650a8ef0cd2dd93736f033d21cbd1224c5a967aa0c258d00fcf7dafef9b9f"
|
checksum = "4a1bdf54a7c28a2bbf701e1d2233f6c77f473486b94bee4f9678da5a148dca7f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"log",
|
"log",
|
||||||
|
|
@ -1398,9 +1399,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tracing-attributes"
|
name = "tracing-attributes"
|
||||||
version = "0.1.19"
|
version = "0.1.20"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8276d9a4a3a558d7b7ad5303ad50b53d58264641b82914b7ada36bd762e7a716"
|
checksum = "2e65ce065b4b5c53e73bb28912318cb8c9e9ad3921f1d669eb0e68b4c8143a2b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
|
@ -1409,9 +1410,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tracing-core"
|
name = "tracing-core"
|
||||||
version = "0.1.22"
|
version = "0.1.23"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "03cfcb51380632a72d3111cb8d3447a8d908e577d31beeac006f836383d29a23"
|
checksum = "aa31669fa42c09c34d94d8165dd2012e8ff3c66aca50f3bb226b68f216f2706c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"valuable",
|
"valuable",
|
||||||
|
|
@ -1531,6 +1532,12 @@ 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"
|
||||||
|
|
@ -1680,7 +1687,7 @@ name = "xtask"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"clap 3.1.5",
|
"clap 3.1.6",
|
||||||
"heck",
|
"heck",
|
||||||
"itertools",
|
"itertools",
|
||||||
"strong-xml",
|
"strong-xml",
|
||||||
|
|
|
||||||
16
Cargo.toml
16
Cargo.toml
|
|
@ -1,11 +1,11 @@
|
||||||
[workspace]
|
[workspace]
|
||||||
members = [
|
members = [
|
||||||
".",
|
".",
|
||||||
"amqp_core",
|
"haesli_core",
|
||||||
"amqp_dashboard",
|
"haesli_dashboard",
|
||||||
"amqp_datastructure",
|
"haesli_datastructure",
|
||||||
"amqp_messaging",
|
"haesli_messaging",
|
||||||
"amqp_transport",
|
"haesli_transport",
|
||||||
"xtask",
|
"xtask",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
@ -18,9 +18,9 @@ edition = "2021"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
anyhow = "1.0.53"
|
anyhow = "1.0.53"
|
||||||
amqp_core = { path = "./amqp_core" }
|
haesli_core = { path = "./haesli_core" }
|
||||||
amqp_dashboard = { path = "./amqp_dashboard" }
|
haesli_dashboard = { path = "./haesli_dashboard" }
|
||||||
amqp_transport = { path = "./amqp_transport" }
|
haesli_transport = { path = "./haesli_transport" }
|
||||||
clap = { version = "3.1.5", features = ["derive"] }
|
clap = { version = "3.1.5", features = ["derive"] }
|
||||||
tokio = { version = "1.16.1", features = ["full"] }
|
tokio = { version = "1.16.1", features = ["full"] }
|
||||||
tracing = "0.1.30"
|
tracing = "0.1.30"
|
||||||
|
|
|
||||||
13
README.md
13
README.md
|
|
@ -1,7 +1,12 @@
|
||||||
# amqp
|
# Haesli - AMQP implementation in Rust
|
||||||
|
|
||||||
[amqp0-9-1 spec pdf](https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf)
|
**This is still work in progress!**
|
||||||
|
|
||||||
[amqp 0-9-1 spec generated_pdf](https://www.rabbitmq.com/resources/specs/amqp-xml-doc0-9-1.pdf)
|
|
||||||
|
|
||||||
[amqp0-9-1 spec xml](https://www.rabbitmq.com/resources/specs/amqp0-9-1.xml)
|
## Relevant links
|
||||||
|
|
||||||
|
[AMQP-0-9-1 specification](https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf)
|
||||||
|
|
||||||
|
[AMQP 0-9-1 specification generated method PDF](https://www.rabbitmq.com/resources/specs/amqp-xml-doc0-9-1.pdf)
|
||||||
|
|
||||||
|
[AMQP 0-9-1 specification method XML](https://www.rabbitmq.com/resources/specs/amqp0-9-1.xml)
|
||||||
|
|
|
||||||
|
|
@ -1,61 +0,0 @@
|
||||||
mod consume;
|
|
||||||
mod publish;
|
|
||||||
mod queue;
|
|
||||||
|
|
||||||
use amqp_core::{amqp_todo, connection::Channel, message::Message, methods::Method};
|
|
||||||
use tracing::info;
|
|
||||||
|
|
||||||
use crate::Result;
|
|
||||||
|
|
||||||
pub fn handle_basic_publish(channel_handle: Channel, message: Message) -> Result<()> {
|
|
||||||
publish::publish(channel_handle, message)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub async fn handle_method(channel_handle: Channel, method: Method) -> Result<Method> {
|
|
||||||
info!(?method, "Handling method");
|
|
||||||
|
|
||||||
let response = match method {
|
|
||||||
Method::ExchangeDeclare(_) => amqp_todo!(),
|
|
||||||
Method::ExchangeDeclareOk(_) => amqp_todo!(),
|
|
||||||
Method::ExchangeDelete(_) => amqp_todo!(),
|
|
||||||
Method::ExchangeDeleteOk(_) => amqp_todo!(),
|
|
||||||
Method::QueueDeclare(queue_declare) => queue::declare(channel_handle, queue_declare)?,
|
|
||||||
Method::QueueDeclareOk { .. } => amqp_todo!(),
|
|
||||||
Method::QueueBind(queue_bind) => queue::bind(channel_handle, queue_bind).await?,
|
|
||||||
Method::QueueBindOk(_) => amqp_todo!(),
|
|
||||||
Method::QueueUnbind { .. } => amqp_todo!(),
|
|
||||||
Method::QueueUnbindOk(_) => amqp_todo!(),
|
|
||||||
Method::QueuePurge { .. } => amqp_todo!(),
|
|
||||||
Method::QueuePurgeOk { .. } => amqp_todo!(),
|
|
||||||
Method::QueueDelete { .. } => amqp_todo!(),
|
|
||||||
Method::QueueDeleteOk { .. } => amqp_todo!(),
|
|
||||||
Method::BasicQos { .. } => amqp_todo!(),
|
|
||||||
Method::BasicQosOk(_) => amqp_todo!(),
|
|
||||||
Method::BasicConsume(consume) => consume::consume(channel_handle, consume)?,
|
|
||||||
Method::BasicConsumeOk { .. } => amqp_todo!(),
|
|
||||||
Method::BasicCancel { .. } => amqp_todo!(),
|
|
||||||
Method::BasicCancelOk { .. } => amqp_todo!(),
|
|
||||||
Method::BasicReturn { .. } => amqp_todo!(),
|
|
||||||
Method::BasicDeliver { .. } => amqp_todo!(),
|
|
||||||
Method::BasicGet { .. } => amqp_todo!(),
|
|
||||||
Method::BasicGetOk { .. } => amqp_todo!(),
|
|
||||||
Method::BasicGetEmpty { .. } => amqp_todo!(),
|
|
||||||
Method::BasicAck { .. } => amqp_todo!(),
|
|
||||||
Method::BasicReject { .. } => amqp_todo!(),
|
|
||||||
Method::BasicRecoverAsync { .. } => amqp_todo!(),
|
|
||||||
Method::BasicRecover { .. } => amqp_todo!(),
|
|
||||||
Method::BasicRecoverOk(_) => amqp_todo!(),
|
|
||||||
Method::TxSelect(_)
|
|
||||||
| Method::TxSelectOk(_)
|
|
||||||
| Method::TxCommit(_)
|
|
||||||
| Method::TxCommitOk(_)
|
|
||||||
| Method::TxRollback(_)
|
|
||||||
| Method::TxRollbackOk(_) => amqp_todo!(),
|
|
||||||
Method::BasicPublish { .. } => {
|
|
||||||
unreachable!("Basic.Publish is handled somewhere else because it has a body")
|
|
||||||
}
|
|
||||||
_ => unreachable!("Method handled by transport layer"),
|
|
||||||
};
|
|
||||||
|
|
||||||
Ok(response)
|
|
||||||
}
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
[package]
|
[package]
|
||||||
name = "amqp_core"
|
name = "haesli_core"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
amqp_datastructure = { path = "../amqp_datastructure" }
|
haesli_datastructure = { path = "../haesli_datastructure" }
|
||||||
bytes = "1.1.0"
|
bytes = "1.1.0"
|
||||||
parking_lot = "0.12.0"
|
parking_lot = "0.12.0"
|
||||||
rand = "0.8.5"
|
rand = "0.8.5"
|
||||||
|
|
@ -62,10 +62,13 @@ macro_rules! newtype {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
macro_rules! amqp_todo {
|
macro_rules! haesli_todo {
|
||||||
() => {
|
() => {
|
||||||
return Err(
|
return Err(::haesli_core::error::ConException::NotImplemented(concat!(
|
||||||
::amqp_core::error::ConException::NotImplemented(concat!(file!(), ":", line!())).into(),
|
file!(),
|
||||||
)
|
":",
|
||||||
|
line!()
|
||||||
|
))
|
||||||
|
.into())
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
@ -49,7 +49,7 @@ impl Display for QueueName {
|
||||||
pub struct QueueInner {
|
pub struct QueueInner {
|
||||||
pub id: QueueId,
|
pub id: QueueId,
|
||||||
pub name: QueueName,
|
pub name: QueueName,
|
||||||
pub messages: amqp_datastructure::MessageQueue<Message>,
|
pub messages: haesli_datastructure::MessageQueue<Message>,
|
||||||
pub durable: bool,
|
pub durable: bool,
|
||||||
pub exclusive: Option<ChannelId>,
|
pub exclusive: Option<ChannelId>,
|
||||||
/// Whether the queue will automatically be deleted when no consumers uses it anymore.
|
/// Whether the queue will automatically be deleted when no consumers uses it anymore.
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
[package]
|
[package]
|
||||||
name = "amqp_dashboard"
|
name = "haesli_dashboard"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
amqp_core = { path = "../amqp_core" }
|
haesli_core = { path = "../haesli_core" }
|
||||||
anyhow = "1.0.55"
|
anyhow = "1.0.55"
|
||||||
axum = "0.4.8"
|
axum = "0.4.8"
|
||||||
mime_guess = "2.0.4"
|
mime_guess = "2.0.4"
|
||||||
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB |
|
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 5.2 KiB |
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 9.4 KiB |
|
|
@ -10,7 +10,7 @@ const App = () => {
|
||||||
return (
|
return (
|
||||||
<div className="app">
|
<div className="app">
|
||||||
<header className="header">
|
<header className="header">
|
||||||
<h1>AMQP Dashboard</h1>
|
<h1>Haesli Dashboard</h1>
|
||||||
</header>
|
</header>
|
||||||
<DataPage prefix={URL_PREFIX} />
|
<DataPage prefix={URL_PREFIX} />
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -2,13 +2,13 @@
|
||||||
|
|
||||||
mod archive;
|
mod archive;
|
||||||
|
|
||||||
use amqp_core::GlobalData;
|
|
||||||
use axum::{
|
use axum::{
|
||||||
http::{Method, StatusCode},
|
http::{Method, StatusCode},
|
||||||
response::IntoResponse,
|
response::IntoResponse,
|
||||||
routing::{get, get_service},
|
routing::{get, get_service},
|
||||||
Json, Router,
|
Json, Router,
|
||||||
};
|
};
|
||||||
|
use haesli_core::GlobalData;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
use tower_http::cors::{Any, CorsLayer};
|
use tower_http::cors::{Any, CorsLayer};
|
||||||
use tracing::{error, info};
|
use tracing::{error, info};
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
[package]
|
[package]
|
||||||
name = "amqp_datastructure"
|
name = "haesli_datastructure"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
[package]
|
[package]
|
||||||
name = "amqp_messaging"
|
name = "haesli_messaging"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
amqp_core = { path = "../amqp_core" }
|
haesli_core = { path = "../haesli_core" }
|
||||||
amqp_datastructure = { path = "../amqp_datastructure" }
|
haesli_datastructure = { path = "../haesli_datastructure" }
|
||||||
parking_lot = "0.12.0"
|
parking_lot = "0.12.0"
|
||||||
tracing = "0.1.31"
|
tracing = "0.1.31"
|
||||||
tokio = { version = "1.17.0", features = ["full"] }
|
tokio = { version = "1.17.0", features = ["full"] }
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
#![warn(rust_2018_idioms)]
|
#![warn(rust_2018_idioms)]
|
||||||
#![deny(clippy::future_not_send)]
|
#![deny(clippy::future_not_send)]
|
||||||
|
|
||||||
use amqp_core::error::ProtocolError;
|
use haesli_core::error::ProtocolError;
|
||||||
|
|
||||||
pub mod methods;
|
pub mod methods;
|
||||||
mod queue_worker;
|
mod queue_worker;
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use amqp_core::{
|
use haesli_core::{
|
||||||
amqp_todo,
|
|
||||||
connection::Channel,
|
connection::Channel,
|
||||||
consumer::{Consumer, ConsumerId},
|
consumer::{Consumer, ConsumerId},
|
||||||
error::ChannelException,
|
error::ChannelException,
|
||||||
|
haesli_todo,
|
||||||
methods::{BasicConsume, BasicConsumeOk, Method},
|
methods::{BasicConsume, BasicConsumeOk, Method},
|
||||||
};
|
};
|
||||||
use tracing::info;
|
use tracing::info;
|
||||||
|
|
@ -23,13 +23,13 @@ pub fn consume(channel: Channel, basic_consume: BasicConsume) -> Result<Method>
|
||||||
} = basic_consume;
|
} = basic_consume;
|
||||||
|
|
||||||
if no_wait || no_local || exclusive || no_ack {
|
if no_wait || no_local || exclusive || no_ack {
|
||||||
amqp_todo!();
|
haesli_todo!();
|
||||||
}
|
}
|
||||||
|
|
||||||
let global_data = channel.global_data.clone();
|
let global_data = channel.global_data.clone();
|
||||||
|
|
||||||
let consumer_tag = if consumer_tag.is_empty() {
|
let consumer_tag = if consumer_tag.is_empty() {
|
||||||
amqp_core::random_uuid().to_string()
|
haesli_core::random_uuid().to_string()
|
||||||
} else {
|
} else {
|
||||||
consumer_tag
|
consumer_tag
|
||||||
};
|
};
|
||||||
61
haesli_messaging/src/methods/mod.rs
Normal file
61
haesli_messaging/src/methods/mod.rs
Normal file
|
|
@ -0,0 +1,61 @@
|
||||||
|
mod consume;
|
||||||
|
mod publish;
|
||||||
|
mod queue;
|
||||||
|
|
||||||
|
use haesli_core::{connection::Channel, haesli_todo, message::Message, methods::Method};
|
||||||
|
use tracing::info;
|
||||||
|
|
||||||
|
use crate::Result;
|
||||||
|
|
||||||
|
pub fn handle_basic_publish(channel_handle: Channel, message: Message) -> Result<()> {
|
||||||
|
publish::publish(channel_handle, message)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn handle_method(channel_handle: Channel, method: Method) -> Result<Method> {
|
||||||
|
info!(?method, "Handling method");
|
||||||
|
|
||||||
|
let response = match method {
|
||||||
|
Method::ExchangeDeclare(_) => haesli_todo!(),
|
||||||
|
Method::ExchangeDeclareOk(_) => haesli_todo!(),
|
||||||
|
Method::ExchangeDelete(_) => haesli_todo!(),
|
||||||
|
Method::ExchangeDeleteOk(_) => haesli_todo!(),
|
||||||
|
Method::QueueDeclare(queue_declare) => queue::declare(channel_handle, queue_declare)?,
|
||||||
|
Method::QueueDeclareOk { .. } => haesli_todo!(),
|
||||||
|
Method::QueueBind(queue_bind) => queue::bind(channel_handle, queue_bind).await?,
|
||||||
|
Method::QueueBindOk(_) => haesli_todo!(),
|
||||||
|
Method::QueueUnbind { .. } => haesli_todo!(),
|
||||||
|
Method::QueueUnbindOk(_) => haesli_todo!(),
|
||||||
|
Method::QueuePurge { .. } => haesli_todo!(),
|
||||||
|
Method::QueuePurgeOk { .. } => haesli_todo!(),
|
||||||
|
Method::QueueDelete { .. } => haesli_todo!(),
|
||||||
|
Method::QueueDeleteOk { .. } => haesli_todo!(),
|
||||||
|
Method::BasicQos { .. } => haesli_todo!(),
|
||||||
|
Method::BasicQosOk(_) => haesli_todo!(),
|
||||||
|
Method::BasicConsume(consume) => consume::consume(channel_handle, consume)?,
|
||||||
|
Method::BasicConsumeOk { .. } => haesli_todo!(),
|
||||||
|
Method::BasicCancel { .. } => haesli_todo!(),
|
||||||
|
Method::BasicCancelOk { .. } => haesli_todo!(),
|
||||||
|
Method::BasicReturn { .. } => haesli_todo!(),
|
||||||
|
Method::BasicDeliver { .. } => haesli_todo!(),
|
||||||
|
Method::BasicGet { .. } => haesli_todo!(),
|
||||||
|
Method::BasicGetOk { .. } => haesli_todo!(),
|
||||||
|
Method::BasicGetEmpty { .. } => haesli_todo!(),
|
||||||
|
Method::BasicAck { .. } => haesli_todo!(),
|
||||||
|
Method::BasicReject { .. } => haesli_todo!(),
|
||||||
|
Method::BasicRecoverAsync { .. } => haesli_todo!(),
|
||||||
|
Method::BasicRecover { .. } => haesli_todo!(),
|
||||||
|
Method::BasicRecoverOk(_) => haesli_todo!(),
|
||||||
|
Method::TxSelect(_)
|
||||||
|
| Method::TxSelectOk(_)
|
||||||
|
| Method::TxCommit(_)
|
||||||
|
| Method::TxCommitOk(_)
|
||||||
|
| Method::TxRollback(_)
|
||||||
|
| Method::TxRollbackOk(_) => haesli_todo!(),
|
||||||
|
Method::BasicPublish { .. } => {
|
||||||
|
unreachable!("Basic.Publish is handled somewhere else because it has a body")
|
||||||
|
}
|
||||||
|
_ => unreachable!("Method handled by transport layer"),
|
||||||
|
};
|
||||||
|
|
||||||
|
Ok(response)
|
||||||
|
}
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
use amqp_core::{
|
use haesli_core::{
|
||||||
amqp_todo,
|
|
||||||
connection::Channel,
|
connection::Channel,
|
||||||
error::{ChannelException, ConException},
|
error::{ChannelException, ConException},
|
||||||
|
haesli_todo,
|
||||||
message::Message,
|
message::Message,
|
||||||
queue::QueueEvent,
|
queue::QueueEvent,
|
||||||
};
|
};
|
||||||
|
|
@ -17,7 +17,7 @@ pub fn publish(channel_handle: Channel, message: Message) -> Result<()> {
|
||||||
let routing = &message.routing;
|
let routing = &message.routing;
|
||||||
|
|
||||||
if !routing.exchange.is_empty() {
|
if !routing.exchange.is_empty() {
|
||||||
amqp_todo!();
|
haesli_todo!();
|
||||||
}
|
}
|
||||||
|
|
||||||
let global_data = global_data.lock();
|
let global_data = global_data.lock();
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
use std::sync::{atomic::AtomicUsize, Arc};
|
use std::sync::{atomic::AtomicUsize, Arc};
|
||||||
|
|
||||||
use amqp_core::{
|
use haesli_core::{
|
||||||
amqp_todo,
|
|
||||||
connection::Channel,
|
connection::Channel,
|
||||||
|
haesli_todo,
|
||||||
methods::{Method, QueueBind, QueueDeclare, QueueDeclareOk},
|
methods::{Method, QueueBind, QueueDeclare, QueueDeclareOk},
|
||||||
queue::{QueueDeletion, QueueId, QueueInner, QueueName},
|
queue::{QueueDeletion, QueueId, QueueInner, QueueName},
|
||||||
GlobalData,
|
GlobalData,
|
||||||
|
|
@ -27,13 +27,13 @@ pub fn declare(channel: Channel, queue_declare: QueueDeclare) -> Result<Method>
|
||||||
let queue_name = QueueName::new(queue_name.into());
|
let queue_name = QueueName::new(queue_name.into());
|
||||||
|
|
||||||
if !arguments.is_empty() {
|
if !arguments.is_empty() {
|
||||||
amqp_todo!();
|
haesli_todo!();
|
||||||
}
|
}
|
||||||
|
|
||||||
// todo: durable is technically spec-compliant, the spec doesn't really require it, but it's a todo
|
// todo: durable is technically spec-compliant, the spec doesn't really require it, but it's a todo
|
||||||
// not checked here because it's the default for amqplib which is annoying
|
// not checked here because it's the default for amqplib which is annoying
|
||||||
if passive || no_wait {
|
if passive || no_wait {
|
||||||
amqp_todo!();
|
haesli_todo!();
|
||||||
}
|
}
|
||||||
|
|
||||||
let global_data = channel.global_data.clone();
|
let global_data = channel.global_data.clone();
|
||||||
|
|
@ -44,7 +44,7 @@ pub fn declare(channel: Channel, queue_declare: QueueDeclare) -> Result<Method>
|
||||||
let queue = Arc::new(QueueInner {
|
let queue = Arc::new(QueueInner {
|
||||||
id,
|
id,
|
||||||
name: queue_name.clone(),
|
name: queue_name.clone(),
|
||||||
messages: amqp_datastructure::MessageQueue::new(),
|
messages: haesli_datastructure::MessageQueue::new(),
|
||||||
durable,
|
durable,
|
||||||
exclusive: exclusive.then(|| channel.id),
|
exclusive: exclusive.then(|| channel.id),
|
||||||
deletion: if auto_delete {
|
deletion: if auto_delete {
|
||||||
|
|
@ -79,7 +79,7 @@ pub fn declare(channel: Channel, queue_declare: QueueDeclare) -> Result<Method>
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn bind(_channel_handle: Channel, _queue_bind: QueueBind) -> Result<Method> {
|
pub async fn bind(_channel_handle: Channel, _queue_bind: QueueBind) -> Result<Method> {
|
||||||
amqp_todo!();
|
haesli_todo!();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn bind_queue(global_data: GlobalData, _exchange: (), routing_key: Arc<str>) -> Result<()> {
|
fn bind_queue(global_data: GlobalData, _exchange: (), routing_key: Arc<str>) -> Result<()> {
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
use std::borrow::Borrow;
|
use std::borrow::Borrow;
|
||||||
|
|
||||||
use amqp_core::{
|
use haesli_core::{
|
||||||
connection::ConnectionEvent,
|
connection::ConnectionEvent,
|
||||||
consumer::Consumer,
|
consumer::Consumer,
|
||||||
message::Message,
|
message::Message,
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
[package]
|
[package]
|
||||||
name = "amqp_transport"
|
name = "haesli_transport"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
amqp_core = { path = "../amqp_core" }
|
haesli_core = { path = "../haesli_core" }
|
||||||
amqp_messaging = { path = "../amqp_messaging" }
|
haesli_messaging = { path = "../haesli_messaging" }
|
||||||
anyhow = "1.0.53"
|
anyhow = "1.0.53"
|
||||||
bytes = "1.1.0"
|
bytes = "1.1.0"
|
||||||
nom = "7.1.0"
|
nom = "7.1.0"
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
use amqp_core::methods::Method;
|
use criterion::{black_box, criterion_group, criterion_main, Criterion};
|
||||||
use amqp_transport::methods::{
|
use haesli_core::methods::Method;
|
||||||
|
use haesli_transport::methods::{
|
||||||
RandomMethod, {self},
|
RandomMethod, {self},
|
||||||
};
|
};
|
||||||
use criterion::{black_box, criterion_group, criterion_main, Criterion};
|
|
||||||
use rand::SeedableRng;
|
use rand::SeedableRng;
|
||||||
|
|
||||||
fn random_method_from_seed(seed: u128) -> Method {
|
fn random_method_from_seed(seed: u128) -> Method {
|
||||||
|
|
@ -2,7 +2,9 @@ use std::{
|
||||||
cmp::Ordering, collections::HashMap, net::SocketAddr, pin::Pin, sync::Arc, time::Duration,
|
cmp::Ordering, collections::HashMap, net::SocketAddr, pin::Pin, sync::Arc, time::Duration,
|
||||||
};
|
};
|
||||||
|
|
||||||
use amqp_core::{
|
use anyhow::{anyhow, Context};
|
||||||
|
use bytes::Bytes;
|
||||||
|
use haesli_core::{
|
||||||
connection::{
|
connection::{
|
||||||
Channel, ChannelInner, ChannelNum, ConEventReceiver, ConEventSender, Connection,
|
Channel, ChannelInner, ChannelNum, ConEventReceiver, ConEventSender, Connection,
|
||||||
ConnectionEvent, ConnectionId, ContentHeader,
|
ConnectionEvent, ConnectionId, ContentHeader,
|
||||||
|
|
@ -15,8 +17,6 @@ use amqp_core::{
|
||||||
},
|
},
|
||||||
GlobalData,
|
GlobalData,
|
||||||
};
|
};
|
||||||
use anyhow::{anyhow, Context};
|
|
||||||
use bytes::Bytes;
|
|
||||||
use smallvec::SmallVec;
|
use smallvec::SmallVec;
|
||||||
use tokio::{
|
use tokio::{
|
||||||
io::{AsyncReadExt, AsyncWriteExt},
|
io::{AsyncReadExt, AsyncWriteExt},
|
||||||
|
|
@ -399,11 +399,11 @@ impl TransportConnection {
|
||||||
.global_chan
|
.global_chan
|
||||||
.clone();
|
.clone();
|
||||||
|
|
||||||
// call into amqp_messaging to handle the method
|
// call into haesli_messaging to handle the method
|
||||||
// it returns the response method that we are supposed to send
|
// it returns the response method that we are supposed to send
|
||||||
// maybe this might become an `Option` in the future
|
// maybe this might become an `Option` in the future
|
||||||
let return_method =
|
let return_method =
|
||||||
amqp_messaging::methods::handle_method(channel_handle, method).await?;
|
haesli_messaging::methods::handle_method(channel_handle, method).await?;
|
||||||
self.send_method(frame.channel, &return_method).await?;
|
self.send_method(frame.channel, &return_method).await?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -499,7 +499,7 @@ impl TransportConnection {
|
||||||
|
|
||||||
let channel = self.channels.get(&channel).ok_or(ConException::Todo)?;
|
let channel = self.channels.get(&channel).ok_or(ConException::Todo)?;
|
||||||
|
|
||||||
amqp_messaging::methods::handle_basic_publish(channel.global_chan.clone(), message)?;
|
haesli_messaging::methods::handle_basic_publish(channel.global_chan.clone(), message)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
} else {
|
} else {
|
||||||
Err(ConException::Todo.into())
|
Err(ConException::Todo.into())
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
use std::io::Error;
|
use std::io::Error;
|
||||||
|
|
||||||
pub use amqp_core::error::{ConException, ProtocolError};
|
pub use haesli_core::error::{ConException, ProtocolError};
|
||||||
|
|
||||||
type StdResult<T, E> = std::result::Result<T, E>;
|
type StdResult<T, E> = std::result::Result<T, E>;
|
||||||
|
|
||||||
|
|
@ -20,7 +20,7 @@ impl From<std::io::Error> for TransError {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<amqp_core::error::ConException> for TransError {
|
impl From<haesli_core::error::ConException> for TransError {
|
||||||
fn from(err: ConException) -> Self {
|
fn from(err: ConException) -> Self {
|
||||||
Self::Protocol(ProtocolError::ConException(err))
|
Self::Protocol(ProtocolError::ConException(err))
|
||||||
}
|
}
|
||||||
|
|
@ -3,9 +3,9 @@ use std::{
|
||||||
num::NonZeroUsize,
|
num::NonZeroUsize,
|
||||||
};
|
};
|
||||||
|
|
||||||
use amqp_core::connection::{ChannelNum, ContentHeader};
|
|
||||||
use anyhow::Context;
|
use anyhow::Context;
|
||||||
use bytes::Bytes;
|
use bytes::Bytes;
|
||||||
|
use haesli_core::connection::{ChannelNum, ContentHeader};
|
||||||
use tokio::io::{AsyncReadExt, AsyncWriteExt};
|
use tokio::io::{AsyncReadExt, AsyncWriteExt};
|
||||||
use tracing::trace;
|
use tracing::trace;
|
||||||
|
|
||||||
|
|
@ -39,7 +39,7 @@ pub enum FrameType {
|
||||||
}
|
}
|
||||||
|
|
||||||
mod content_header_parse {
|
mod content_header_parse {
|
||||||
use amqp_core::{
|
use haesli_core::{
|
||||||
connection::ContentHeader,
|
connection::ContentHeader,
|
||||||
methods::{
|
methods::{
|
||||||
self,
|
self,
|
||||||
|
|
@ -140,7 +140,7 @@ pub fn parse_content_header(input: &[u8]) -> Result<ContentHeader> {
|
||||||
mod content_header_write {
|
mod content_header_write {
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
|
|
||||||
use amqp_core::{
|
use haesli_core::{
|
||||||
connection::ContentHeader,
|
connection::ContentHeader,
|
||||||
methods::{
|
methods::{
|
||||||
FieldValue::{FieldTable, ShortShortUInt, ShortString, Timestamp},
|
FieldValue::{FieldTable, ShortShortUInt, ShortString, Timestamp},
|
||||||
|
|
@ -12,8 +12,8 @@ mod tests;
|
||||||
|
|
||||||
use std::{future::Future, net::SocketAddr};
|
use std::{future::Future, net::SocketAddr};
|
||||||
|
|
||||||
use amqp_core::{connection::ConnectionEvent, queue::QueueEvent, GlobalData};
|
|
||||||
use anyhow::Context;
|
use anyhow::Context;
|
||||||
|
use haesli_core::{connection::ConnectionEvent, queue::QueueEvent, GlobalData};
|
||||||
use tokio::{net, net::TcpStream, select};
|
use tokio::{net, net::TcpStream, select};
|
||||||
use tracing::{info, info_span, Instrument};
|
use tracing::{info, info_span, Instrument};
|
||||||
|
|
||||||
|
|
@ -53,7 +53,7 @@ fn handle_con(global_data: GlobalData, connection: (TcpStream, SocketAddr)) {
|
||||||
|
|
||||||
let (method_send, method_recv) = tokio::sync::mpsc::channel(10);
|
let (method_send, method_recv) = tokio::sync::mpsc::channel(10);
|
||||||
|
|
||||||
let connection_handle = amqp_core::connection::ConnectionInner::new(
|
let connection_handle = haesli_core::connection::ConnectionInner::new(
|
||||||
id,
|
id,
|
||||||
peer_addr,
|
peer_addr,
|
||||||
global_data.clone(),
|
global_data.clone(),
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
// This file has been generated by `xtask/src/codegen`. Do not edit it manually.
|
// This file has been generated by `xtask/src/codegen`. Do not edit it manually.
|
||||||
|
|
||||||
pub mod parse {
|
pub mod parse {
|
||||||
use amqp_core::methods::*;
|
use haesli_core::methods::*;
|
||||||
use nom::{branch::alt, bytes::complete::tag};
|
use nom::{branch::alt, bytes::complete::tag};
|
||||||
use once_cell::sync::Lazy;
|
use once_cell::sync::Lazy;
|
||||||
use regex::Regex;
|
use regex::Regex;
|
||||||
|
|
@ -889,7 +889,7 @@ pub mod parse {
|
||||||
pub mod write {
|
pub mod write {
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
|
|
||||||
use amqp_core::methods::*;
|
use haesli_core::methods::*;
|
||||||
|
|
||||||
use crate::{error::TransError, methods::write_helper::*};
|
use crate::{error::TransError, methods::write_helper::*};
|
||||||
|
|
||||||
|
|
@ -1306,7 +1306,7 @@ pub mod write {
|
||||||
}
|
}
|
||||||
|
|
||||||
mod random {
|
mod random {
|
||||||
use amqp_core::methods::*;
|
use haesli_core::methods::*;
|
||||||
use rand::Rng;
|
use rand::Rng;
|
||||||
|
|
||||||
use crate::methods::RandomMethod;
|
use crate::methods::RandomMethod;
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
use amqp_core::{
|
use haesli_core::{
|
||||||
error::ConException,
|
error::ConException,
|
||||||
methods::{FieldValue, Method, Table},
|
methods::{FieldValue, Method, Table},
|
||||||
};
|
};
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
use amqp_core::{
|
use haesli_core::{
|
||||||
error::{ConException, ProtocolError},
|
error::{ConException, ProtocolError},
|
||||||
methods::{
|
methods::{
|
||||||
Bit, FieldValue, Long, Longlong, Longstr, Octet, Short, Shortstr, Table, TableFieldName,
|
Bit, FieldValue, Long, Longlong, Longstr, Octet, Short, Shortstr, Table, TableFieldName,
|
||||||
|
|
@ -55,8 +55,8 @@ pub fn other_fail<E, S: Into<String>>(msg: S) -> impl FnOnce(E) -> Err<TransErro
|
||||||
macro_rules! fail {
|
macro_rules! fail {
|
||||||
($cause:expr) => {
|
($cause:expr) => {
|
||||||
return Err(nom::Err::Failure(
|
return Err(nom::Err::Failure(
|
||||||
::amqp_core::error::ProtocolError::ConException(
|
::haesli_core::error::ProtocolError::ConException(
|
||||||
::amqp_core::error::ConException::SyntaxError(vec![String::from($cause)]),
|
::haesli_core::error::ConException::SyntaxError(vec![String::from($cause)]),
|
||||||
)
|
)
|
||||||
.into(),
|
.into(),
|
||||||
))
|
))
|
||||||
|
|
@ -1,7 +1,9 @@
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
|
|
||||||
use amqp_core::methods::{Bit, Long, Longlong, Longstr, Octet, Short, Shortstr, Table, Timestamp};
|
|
||||||
use anyhow::Context;
|
use anyhow::Context;
|
||||||
|
use haesli_core::methods::{
|
||||||
|
Bit, Long, Longlong, Longstr, Octet, Short, Shortstr, Table, Timestamp,
|
||||||
|
};
|
||||||
|
|
||||||
use crate::{error::TransError, methods::FieldValue};
|
use crate::{error::TransError, methods::FieldValue};
|
||||||
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
//!
|
//!
|
||||||
//! Currently only supports PLAIN (see [RFC 4616](https://datatracker.ietf.org/doc/html/rfc4616))
|
//! Currently only supports PLAIN (see [RFC 4616](https://datatracker.ietf.org/doc/html/rfc4616))
|
||||||
|
|
||||||
use amqp_core::error::ConException;
|
use haesli_core::error::ConException;
|
||||||
|
|
||||||
use crate::error::Result;
|
use crate::error::Result;
|
||||||
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
use amqp_core::{
|
use haesli_core::{
|
||||||
connection::ChannelNum,
|
connection::ChannelNum,
|
||||||
methods::{ConnectionStart, ConnectionStartOk, FieldValue, Method},
|
methods::{ConnectionStart, ConnectionStartOk, FieldValue, Method},
|
||||||
};
|
};
|
||||||
|
|
@ -25,14 +25,14 @@ async fn main() -> Result<()> {
|
||||||
|
|
||||||
setup_tracing(&args);
|
setup_tracing(&args);
|
||||||
|
|
||||||
let global_data = amqp_core::GlobalData::default();
|
let global_data = haesli_core::GlobalData::default();
|
||||||
|
|
||||||
if args.dashboard {
|
if args.dashboard {
|
||||||
let global_data = global_data.clone();
|
let global_data = global_data.clone();
|
||||||
tokio::spawn(async move { amqp_dashboard::start_dashboard(global_data).await });
|
tokio::spawn(async move { haesli_dashboard::start_dashboard(global_data).await });
|
||||||
}
|
}
|
||||||
|
|
||||||
let res = amqp_transport::do_thing_i_guess(global_data, terminate()).await;
|
let res = haesli_transport::do_thing_i_guess(global_data, terminate()).await;
|
||||||
|
|
||||||
info!("Bye!");
|
info!("Bye!");
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ pub fn main() -> anyhow::Result<()> {
|
||||||
"`yarn check-fmt` did not exist successfully"
|
"`yarn check-fmt` did not exist successfully"
|
||||||
);
|
);
|
||||||
|
|
||||||
let frontend = project_root().join("amqp_dashboard/frontend");
|
let frontend = project_root().join("haesli_dashboard/frontend");
|
||||||
yarn_install(&frontend)?;
|
yarn_install(&frontend)?;
|
||||||
println!("$ yarn check-fmt");
|
println!("$ yarn check-fmt");
|
||||||
let status = Command::new("yarn")
|
let status = Command::new("yarn")
|
||||||
|
|
|
||||||
|
|
@ -127,13 +127,13 @@ pub fn main() -> anyhow::Result<()> {
|
||||||
.context("src directory path")?
|
.context("src directory path")?
|
||||||
.parent()
|
.parent()
|
||||||
.context("xtask root path")?;
|
.context("xtask root path")?;
|
||||||
let amqp_spec = xtask_root.join("amqp0-9-1.xml");
|
let haesli_spec = xtask_root.join("amqp0-9-1.xml");
|
||||||
let project_root = xtask_root.parent().context("get project root parent")?;
|
let project_root = xtask_root.parent().context("get project root parent")?;
|
||||||
|
|
||||||
let transport_generated_path = project_root.join("amqp_transport/src/methods/generated.rs");
|
let transport_generated_path = project_root.join("haesli_transport/src/methods/generated.rs");
|
||||||
let core_generated_path = project_root.join("amqp_core/src/methods/generated.rs");
|
let core_generated_path = project_root.join("haesli_core/src/methods/generated.rs");
|
||||||
|
|
||||||
let content = fs::read_to_string(amqp_spec).context("read amqp spec file")?;
|
let content = fs::read_to_string(haesli_spec).context("read amqp spec file")?;
|
||||||
|
|
||||||
let amqp = Amqp::from_str(&content).context("parse amqp spec file")?;
|
let amqp = Amqp::from_str(&content).context("parse amqp spec file")?;
|
||||||
|
|
||||||
|
|
@ -202,7 +202,7 @@ impl Codegen {
|
||||||
self.output,
|
self.output,
|
||||||
"pub type {} = {};\n",
|
"pub type {} = {};\n",
|
||||||
domain.name.to_upper_camel_case(),
|
domain.name.to_upper_camel_case(),
|
||||||
self.amqp_type_to_rust_type(&domain.kind),
|
self.haesli_type_to_rust_type(&domain.kind),
|
||||||
)
|
)
|
||||||
.ok();
|
.ok();
|
||||||
}
|
}
|
||||||
|
|
@ -266,8 +266,8 @@ pub struct {class_name}{method_name}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn amqp_type_to_rust_type(&self, amqp_type: &str) -> &'static str {
|
fn haesli_type_to_rust_type(&self, haesli_type: &str) -> &'static str {
|
||||||
match amqp_type {
|
match haesli_type {
|
||||||
"octet" => "u8",
|
"octet" => "u8",
|
||||||
"short" => "u16",
|
"short" => "u16",
|
||||||
"long" => "u32",
|
"long" => "u32",
|
||||||
|
|
@ -277,7 +277,7 @@ pub struct {class_name}{method_name}"
|
||||||
"longstr" => "Vec<u8>",
|
"longstr" => "Vec<u8>",
|
||||||
"timestamp" => "u64",
|
"timestamp" => "u64",
|
||||||
"table" => "super::Table",
|
"table" => "super::Table",
|
||||||
_ => unreachable!("invalid type {}", amqp_type),
|
_ => unreachable!("invalid type {}", haesli_type),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ impl Codegen {
|
||||||
writeln!(
|
writeln!(
|
||||||
self.output,
|
self.output,
|
||||||
"pub mod parse {{
|
"pub mod parse {{
|
||||||
use amqp_core::methods::*;
|
use haesli_core::methods::*;
|
||||||
use crate::error::TransError;
|
use crate::error::TransError;
|
||||||
use crate::methods::parse_helper::*;
|
use crate::methods::parse_helper::*;
|
||||||
use nom::{{branch::alt, bytes::complete::tag}};
|
use nom::{{branch::alt, bytes::complete::tag}};
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ impl Codegen {
|
||||||
"
|
"
|
||||||
mod random {{
|
mod random {{
|
||||||
use rand::Rng;
|
use rand::Rng;
|
||||||
use amqp_core::methods::*;
|
use haesli_core::methods::*;
|
||||||
use crate::methods::RandomMethod;
|
use crate::methods::RandomMethod;
|
||||||
"
|
"
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ impl Codegen {
|
||||||
writeln!(
|
writeln!(
|
||||||
self.output,
|
self.output,
|
||||||
"pub mod write {{
|
"pub mod write {{
|
||||||
use amqp_core::methods::*;
|
use haesli_core::methods::*;
|
||||||
use crate::error::TransError;
|
use crate::error::TransError;
|
||||||
use crate::methods::write_helper::*;
|
use crate::methods::write_helper::*;
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ pub fn main() -> anyhow::Result<()> {
|
||||||
.status()?;
|
.status()?;
|
||||||
ensure!(status.success(), "`yarn fmt` did not exist successfully");
|
ensure!(status.success(), "`yarn fmt` did not exist successfully");
|
||||||
|
|
||||||
let frontend = project_root().join("amqp_dashboard/frontend");
|
let frontend = project_root().join("haesli_dashboard/frontend");
|
||||||
yarn_install(&frontend)?;
|
yarn_install(&frontend)?;
|
||||||
println!("$ yarn fmt");
|
println!("$ yarn fmt");
|
||||||
let status = Command::new("yarn")
|
let status = Command::new("yarn")
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ pub fn main() -> Result<()> {
|
||||||
.context("cargo build")?;
|
.context("cargo build")?;
|
||||||
ensure!(status.success(), "cargo build failed");
|
ensure!(status.success(), "cargo build failed");
|
||||||
|
|
||||||
let mut amqp_server = Command::new("target/debug/amqp")
|
let mut haesli_server = Command::new("target/debug/amqp")
|
||||||
.env("RUST_LOG", "trace")
|
.env("RUST_LOG", "trace")
|
||||||
.spawn()
|
.spawn()
|
||||||
.context("target/debug/amqp run")?;
|
.context("target/debug/amqp run")?;
|
||||||
|
|
@ -25,7 +25,7 @@ pub fn main() -> Result<()> {
|
||||||
|
|
||||||
let test_result = run_js(&test_js_root);
|
let test_result = run_js(&test_js_root);
|
||||||
|
|
||||||
amqp_server.kill().context("killing amqp server")?;
|
haesli_server.kill().context("killing amqp server")?;
|
||||||
|
|
||||||
test_result
|
test_result
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue