diff --git a/.go-arch-lint.yml b/.go-arch-lint.yml index 9ed916517d..a008190c07 100644 --- a/.go-arch-lint.yml +++ b/.go-arch-lint.yml @@ -13,7 +13,6 @@ components: ftl-cmd: { in: frontend/cli/ftl/** } go-runtime: { in: go-runtime/** } jvm-runtime: { in: jvm-runtime/** } - rust-runtime: { in: rust-runtime/** } runner: { in: backend/runner/** } ftl-runner-cmd: { in: cmd/ftl-runner/** } frontend: { in: frontend/console/** } diff --git a/CODEOWNERS b/CODEOWNERS index 37d1380649..dee090daab 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -7,7 +7,6 @@ # Below are team-specific overrides. These should supercede the default ftl-reviewers team. frontend/ @TBD54566975/ftl-frontend-team pnpm-* @TBD54566975/ftl-frontend-team -rust-runtime/ @gak go-runtime/ @TBD54566975/ftl-go-team jvm-runtime/ @TBD54566975/ftl-jvm-team deployment/ @TBD54566975/ftl-infra-team diff --git a/backend/controller/scaling/localscaling/local_scaling.go b/backend/controller/scaling/localscaling/local_scaling.go index 3ace46aa70..ec0c3cf577 100644 --- a/backend/controller/scaling/localscaling/local_scaling.go +++ b/backend/controller/scaling/localscaling/local_scaling.go @@ -195,7 +195,7 @@ func (l *localScaling) startRunner(ctx context.Context, deploymentKey string, in simpleName := fmt.Sprintf("runner%d", keySuffix) if err := kong.ApplyDefaults(&config, kong.Vars{ "deploymentdir": filepath.Join(l.cacheDir, "ftl-runner", simpleName, "deployments"), - "language": "go,kotlin,rust,java", + "language": "go,kotlin,java", }); err != nil { return fmt.Errorf("failed to apply defaults: %w", err) } diff --git a/backend/runner/runner.go b/backend/runner/runner.go index 42c84d622c..1abcaad571 100644 --- a/backend/runner/runner.go +++ b/backend/runner/runner.go @@ -51,7 +51,7 @@ type Config struct { TemplateDir string `help:"Template directory to copy into each deployment, if any." type:"existingdir"` DeploymentDir string `help:"Directory to store deployments in." default:"${deploymentdir}"` DeploymentKeepHistory int `help:"Number of deployments to keep history for." default:"3"` - Language []string `short:"l" help:"Languages the runner supports." env:"FTL_LANGUAGE" default:"go,kotlin,rust,java"` + Language []string `short:"l" help:"Languages the runner supports." env:"FTL_LANGUAGE" default:"go,kotlin,java"` HeartbeatPeriod time.Duration `help:"Minimum period between heartbeats." default:"3s"` HeartbeatJitter time.Duration `help:"Jitter to add to heartbeat period." default:"2s"` Deployment string `help:"The deployment this runner is for." env:"FTL_DEPLOYMENT"` diff --git a/examples/rust/moo/Cargo.lock b/examples/rust/moo/Cargo.lock deleted file mode 100644 index c7ec6c9a5a..0000000000 --- a/examples/rust/moo/Cargo.lock +++ /dev/null @@ -1,1507 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "addr2line" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "aho-corasick" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" -dependencies = [ - "memchr", -] - -[[package]] -name = "anstream" -version = "0.6.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "is_terminal_polyfill", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" - -[[package]] -name = "anstyle-parse" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-query" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" -dependencies = [ - "windows-sys 0.52.0", -] - -[[package]] -name = "anstyle-wincon" -version = "3.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" -dependencies = [ - "anstyle", - "windows-sys 0.52.0", -] - -[[package]] -name = "anyhow" -version = "1.0.86" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" - -[[package]] -name = "async-stream" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" -dependencies = [ - "async-stream-impl", - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "async-stream-impl" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "async-trait" -version = "0.1.80" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "autocfg" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" - -[[package]] -name = "axum" -version = "0.6.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" -dependencies = [ - "async-trait", - "axum-core", - "bitflags 1.3.2", - "bytes", - "futures-util", - "http", - "http-body", - "hyper", - "itoa", - "matchit", - "memchr", - "mime", - "percent-encoding", - "pin-project-lite", - "rustversion", - "serde", - "sync_wrapper", - "tower", - "tower-layer", - "tower-service", -] - -[[package]] -name = "axum-core" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" -dependencies = [ - "async-trait", - "bytes", - "futures-util", - "http", - "http-body", - "mime", - "rustversion", - "tower-layer", - "tower-service", -] - -[[package]] -name = "backtrace" -version = "0.3.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" -dependencies = [ - "addr2line", - "cc", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", -] - -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" - -[[package]] -name = "bytes" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" - -[[package]] -name = "cc" -version = "1.0.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c891175c3fb232128f48de6590095e59198bbeb8620c310be349bfc3afd12c7b" - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "chrono" -version = "0.4.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" -dependencies = [ - "num-traits", -] - -[[package]] -name = "clap" -version = "4.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5db83dced34638ad474f39f250d7fea9598bdd239eaced1bdf45d597da0f433f" -dependencies = [ - "clap_builder", - "clap_derive", -] - -[[package]] -name = "clap_builder" -version = "4.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7e204572485eb3fbf28f871612191521df159bc3e15a9f5064c66dba3a8c05f" -dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim", -] - -[[package]] -name = "clap_derive" -version = "4.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c780290ccf4fb26629baa7a1081e68ced113f1d3ec302fa5948f1c381ebf06c6" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "clap_lex" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b82cf0babdbd58558212896d1a4272303a57bdb245c2bf1147185fb45640e70" - -[[package]] -name = "colorchoice" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" - -[[package]] -name = "either" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" - -[[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - -[[package]] -name = "errno" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "fastrand" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" - -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "ftl" -version = "0.1.0" -dependencies = [ - "clap", - "ftl_derive", - "ftl_protos", - "glob", - "heck 0.5.0", - "prettyplease", - "proc-macro2", - "prost", - "quote", - "serde", - "serde_json", - "syn", - "tokio", - "tonic", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "ftl_derive" -version = "0.1.0" -dependencies = [ - "proc-macro2", - "quote", -] - -[[package]] -name = "ftl_protos" -version = "0.1.0" -dependencies = [ - "pbjson", - "pbjson-build", - "pbjson-types", - "prost", - "prost-build", - "prost-types", - "serde", - "tonic", - "tonic-build", -] - -[[package]] -name = "futures-channel" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" -dependencies = [ - "futures-core", -] - -[[package]] -name = "futures-core" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" - -[[package]] -name = "futures-sink" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" - -[[package]] -name = "futures-task" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" - -[[package]] -name = "futures-util" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" -dependencies = [ - "futures-core", - "futures-task", - "pin-project-lite", - "pin-utils", -] - -[[package]] -name = "getrandom" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - -[[package]] -name = "gimli" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" - -[[package]] -name = "glob" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" - -[[package]] -name = "h2" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap 2.2.6", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "hashbrown" -version = "0.14.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - -[[package]] -name = "hermit-abi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" - -[[package]] -name = "http" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "hyper" -version = "0.14.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f361cde2f109281a220d4307746cdfd5ee3f410da58a70377762396775634b33" -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-timeout" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" -dependencies = [ - "hyper", - "pin-project-lite", - "tokio", - "tokio-io-timeout", -] - -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", -] - -[[package]] -name = "indexmap" -version = "2.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" -dependencies = [ - "equivalent", - "hashbrown 0.14.5", -] - -[[package]] -name = "is_terminal_polyfill" -version = "1.70.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" - -[[package]] -name = "itertools" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" - -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" - -[[package]] -name = "libc" -version = "0.2.155" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" - -[[package]] -name = "linux-raw-sys" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" - -[[package]] -name = "log" -version = "0.4.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" - -[[package]] -name = "matchers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" -dependencies = [ - "regex-automata 0.1.10", -] - -[[package]] -name = "matchit" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" - -[[package]] -name = "memchr" -version = "2.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "miniz_oxide" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" -dependencies = [ - "adler", -] - -[[package]] -name = "mio" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" -dependencies = [ - "libc", - "wasi", - "windows-sys 0.48.0", -] - -[[package]] -name = "moo" -version = "0.1.0" -dependencies = [ - "ftl", - "serde", - "tokio", - "tracing", -] - -[[package]] -name = "multimap" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" - -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", -] - -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "object" -version = "0.36.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "576dfe1fc8f9df304abb159d767a29d0476f7750fbf8aa7ad07816004a207434" -dependencies = [ - "memchr", -] - -[[package]] -name = "once_cell" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" - -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - -[[package]] -name = "pbjson" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1030c719b0ec2a2d25a5df729d6cff1acf3cc230bf766f4f97833591f7577b90" -dependencies = [ - "base64", - "serde", -] - -[[package]] -name = "pbjson-build" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2580e33f2292d34be285c5bc3dba5259542b083cfad6037b6d70345f24dcb735" -dependencies = [ - "heck 0.4.1", - "itertools 0.11.0", - "prost", - "prost-types", -] - -[[package]] -name = "pbjson-types" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18f596653ba4ac51bdecbb4ef6773bc7f56042dc13927910de1684ad3d32aa12" -dependencies = [ - "bytes", - "chrono", - "pbjson", - "pbjson-build", - "prost", - "prost-build", - "serde", -] - -[[package]] -name = "percent-encoding" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" - -[[package]] -name = "petgraph" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" -dependencies = [ - "fixedbitset", - "indexmap 2.2.6", -] - -[[package]] -name = "pin-project" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "prettyplease" -version = "0.2.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" -dependencies = [ - "proc-macro2", - "syn", -] - -[[package]] -name = "proc-macro2" -version = "1.0.86" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "prost" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" -dependencies = [ - "bytes", - "prost-derive", -] - -[[package]] -name = "prost-build" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4" -dependencies = [ - "bytes", - "heck 0.5.0", - "itertools 0.12.1", - "log", - "multimap", - "once_cell", - "petgraph", - "prettyplease", - "prost", - "prost-types", - "regex", - "syn", - "tempfile", -] - -[[package]] -name = "prost-derive" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" -dependencies = [ - "anyhow", - "itertools 0.12.1", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "prost-types" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0" -dependencies = [ - "prost", -] - -[[package]] -name = "quote" -version = "1.0.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha", - "rand_core", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom", -] - -[[package]] -name = "regex" -version = "1.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata 0.4.7", - "regex-syntax 0.8.4", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", -] - -[[package]] -name = "regex-automata" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax 0.8.4", -] - -[[package]] -name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "regex-syntax" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" - -[[package]] -name = "rustc-demangle" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" - -[[package]] -name = "rustix" -version = "0.38.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" -dependencies = [ - "bitflags 2.5.0", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.52.0", -] - -[[package]] -name = "rustversion" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" - -[[package]] -name = "ryu" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" - -[[package]] -name = "serde" -version = "1.0.203" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.203" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.117" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "sharded-slab" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "slab" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] - -[[package]] -name = "smallvec" -version = "1.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" - -[[package]] -name = "socket2" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "strsim" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" - -[[package]] -name = "syn" -version = "2.0.68" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "901fa70d88b9d6c98022e23b4136f9f3e54e4662c3bc1bd1d84a42a9a0f0c1e9" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "sync_wrapper" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" - -[[package]] -name = "tempfile" -version = "3.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" -dependencies = [ - "cfg-if", - "fastrand", - "rustix", - "windows-sys 0.52.0", -] - -[[package]] -name = "thread_local" -version = "1.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" -dependencies = [ - "cfg-if", - "once_cell", -] - -[[package]] -name = "tokio" -version = "1.38.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" -dependencies = [ - "backtrace", - "bytes", - "libc", - "mio", - "num_cpus", - "pin-project-lite", - "socket2", - "tokio-macros", - "windows-sys 0.48.0", -] - -[[package]] -name = "tokio-io-timeout" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" -dependencies = [ - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tokio-macros" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tokio-stream" -version = "0.1.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tokio-util" -version = "0.7.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tonic" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76c4eb7a4e9ef9d4763600161f12f5070b92a578e1b634db88a6887844c91a13" -dependencies = [ - "async-stream", - "async-trait", - "axum", - "base64", - "bytes", - "h2", - "http", - "http-body", - "hyper", - "hyper-timeout", - "percent-encoding", - "pin-project", - "prost", - "tokio", - "tokio-stream", - "tower", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tonic-build" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4ef6dd70a610078cb4e338a0f79d06bc759ff1b22d2120c2ff02ae264ba9c2" -dependencies = [ - "prettyplease", - "proc-macro2", - "prost-build", - "quote", - "syn", -] - -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "futures-core", - "futures-util", - "indexmap 1.9.3", - "pin-project", - "pin-project-lite", - "rand", - "slab", - "tokio", - "tokio-util", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-layer" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" - -[[package]] -name = "tower-service" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" - -[[package]] -name = "tracing" -version = "0.1.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" -dependencies = [ - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tracing-core" -version = "0.1.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-log" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" -dependencies = [ - "log", - "once_cell", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" -dependencies = [ - "matchers", - "nu-ansi-term", - "once_cell", - "regex", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", -] - -[[package]] -name = "try-lock" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - -[[package]] -name = "unicode-ident" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" - -[[package]] -name = "utf8parse" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "want" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" -dependencies = [ - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.5", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - -[[package]] -name = "windows-targets" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" -dependencies = [ - "windows_aarch64_gnullvm 0.52.5", - "windows_aarch64_msvc 0.52.5", - "windows_i686_gnu 0.52.5", - "windows_i686_gnullvm", - "windows_i686_msvc 0.52.5", - "windows_x86_64_gnu 0.52.5", - "windows_x86_64_gnullvm 0.52.5", - "windows_x86_64_msvc 0.52.5", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" diff --git a/examples/rust/moo/Cargo.toml b/examples/rust/moo/Cargo.toml deleted file mode 100644 index 6b39b8d536..0000000000 --- a/examples/rust/moo/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "moo" -version = "0.1.0" -edition = "2021" - -[dependencies] -ftl = { path = "../../../rust-runtime/ftl" } -serde = { version = "1.0.203", features = ["derive"] } -tracing = "0.1.40" -tokio = "1.38.0" \ No newline at end of file diff --git a/examples/rust/moo/_ftl/Cargo.toml b/examples/rust/moo/_ftl/Cargo.toml deleted file mode 100644 index 4c2d3c9788..0000000000 --- a/examples/rust/moo/_ftl/Cargo.toml +++ /dev/null @@ -1,14 +0,0 @@ -[package] -name = "main" -version = "0.1.0" -edition = "2021" - -[dependencies] -ftl = { path = "../../../../rust-runtime/ftl" } -moo = { path = ".." } -tokio = "1.38.0" -serde = { version = "1.0.203", features = ["derive"] } -serde_json = "1.0.117" - -[build-dependencies] -ftl = { path = "../../../../rust-runtime/ftl" } diff --git a/examples/rust/moo/_ftl/build.rs b/examples/rust/moo/_ftl/build.rs deleted file mode 100644 index 208f34d53a..0000000000 --- a/examples/rust/moo/_ftl/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - ftl::builder::build("moo") -} \ No newline at end of file diff --git a/examples/rust/moo/_ftl/src/main.rs b/examples/rust/moo/_ftl/src/main.rs deleted file mode 100644 index cdf0d4e131..0000000000 --- a/examples/rust/moo/_ftl/src/main.rs +++ /dev/null @@ -1,5 +0,0 @@ -include!(concat!(env!("OUT_DIR"), "/call_immediate.rs")); - -fn main() { - ftl::builder::main(call_immediate) -} diff --git a/examples/rust/moo/ftl.toml b/examples/rust/moo/ftl.toml deleted file mode 100644 index 02dea6d392..0000000000 --- a/examples/rust/moo/ftl.toml +++ /dev/null @@ -1,2 +0,0 @@ -module = "moo" -language = "rust" diff --git a/examples/rust/moo/src/lib.rs b/examples/rust/moo/src/lib.rs deleted file mode 100644 index e879f851c1..0000000000 --- a/examples/rust/moo/src/lib.rs +++ /dev/null @@ -1,118 +0,0 @@ -use ftl::Context; -use serde::{Deserialize, Serialize}; -use tracing::info; -use std::collections::HashMap; -use std::fmt::Debug; - -mod builtin { - use super::*; - - #[derive(Debug, Serialize, Deserialize)] - pub struct HttpRequest - where Body: Debug - { - pub method: String, - pub path: String, - pub path_parameters: HashMap, - pub query: HashMap>, - pub headers: HashMap>, - pub body: Body, - } - - #[derive(Debug, Serialize, Deserialize)] - pub struct HttpResponse - where - Body: Debug, - Error: Debug - { - pub status: i32, - pub headers: HashMap>, - pub body: Option, - pub error: Option, - } - - #[derive(Debug, Serialize, Deserialize)] - pub struct Empty {} -} - -mod echo { - use super::*; - - #[derive(Debug, Serialize, Deserialize)] - pub struct EchoRequest { - pub name: String, - } - - #[derive(Debug, Serialize, Deserialize)] - pub struct EchoResponse { - pub message: String, - } - - pub struct EchoVerb; - - impl ftl::VerbFn for EchoVerb { - type Request = EchoRequest; - type Response = EchoResponse; - - fn module() -> &'static str { - "echo" - } - fn name() -> &'static str { - "echo" - } - } -} - -#[derive(Debug, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct MooVerbRequest { - pub your_name: String, - pub age: u32, -} - -#[derive(Debug, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct MooVerbResponse { - pub message: String, - pub your_score: u32, -} - -#[ftl::verb] -pub async fn test_verb(mut ctx: Context, request: MooVerbRequest) -> MooVerbResponse { - info!("test_verb was called"); - info!("request: {:?}", &request); - - let echo_response = ctx.call(echo::EchoVerb, echo::EchoRequest { - name: request.your_name, - }).await; - - MooVerbResponse { - message: format!("Hello. Ping response was: {}!", echo_response.message), - your_score: request.age * 42, - } -} - -#[derive(Debug, Serialize, Deserialize)] -pub struct IngressRequest { - pub user_name: String, -} - -#[derive(Debug, Serialize, Deserialize)] -pub struct IngressResponse { - pub message: String, -} - -#[ftl::ingress] -pub async fn http_echo(_: Context, request: builtin::HttpRequest) -> builtin::HttpResponse { - info!("http_echo was called"); - info!("request: {:?}", &request); - - builtin::HttpResponse { - status: 200, - headers: HashMap::new(), - body: Some(IngressResponse { - message: format!("Hello, {}!", request.body.user_name), - }), - error: None, - } -} \ No newline at end of file diff --git a/internal/buildengine/languageplugin/plugin.go b/internal/buildengine/languageplugin/plugin.go index 0d00e5de9b..5f96354b0b 100644 --- a/internal/buildengine/languageplugin/plugin.go +++ b/internal/buildengine/languageplugin/plugin.go @@ -133,16 +133,11 @@ type LanguagePlugin interface { // PluginFromConfig creates a new language plugin from the given config. func New(ctx context.Context, bindAllocator *bind.BindAllocator, language, name string) (p LanguagePlugin, err error) { - switch language { - case "rust": - return newRustPlugin(ctx), nil - default: - port, err := bindAllocator.Next() - if err != nil { - return nil, fmt.Errorf("failed to allocate port for external plugin: %w", err) - } - return newExternalPlugin(ctx, port, language, name) + port, err := bindAllocator.Next() + if err != nil { + return nil, fmt.Errorf("failed to allocate port for external plugin: %w", err) } + return newExternalPlugin(ctx, port, language, name) } //sumtype:decl diff --git a/internal/buildengine/languageplugin/rust_plugin.go b/internal/buildengine/languageplugin/rust_plugin.go deleted file mode 100644 index b822b8bed1..0000000000 --- a/internal/buildengine/languageplugin/rust_plugin.go +++ /dev/null @@ -1,105 +0,0 @@ -package languageplugin - -import ( - "context" - "fmt" - "os" - "path/filepath" - - "github.com/alecthomas/kong" - "github.com/alecthomas/types/optional" - "google.golang.org/protobuf/proto" - - languagepb "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/language" - "github.com/TBD54566975/ftl/internal/builderrors" - "github.com/TBD54566975/ftl/internal/errors" - "github.com/TBD54566975/ftl/internal/exec" - "github.com/TBD54566975/ftl/internal/log" - "github.com/TBD54566975/ftl/internal/moduleconfig" - "github.com/TBD54566975/ftl/internal/projectconfig" - "github.com/TBD54566975/ftl/internal/schema" - "github.com/TBD54566975/ftl/internal/watch" -) - -type rustPlugin struct { - *internalPlugin -} - -var _ = LanguagePlugin(&rustPlugin{}) - -func newRustPlugin(ctx context.Context) *rustPlugin { - internal := newInternalPlugin(ctx, "rust", buildRust) - return &rustPlugin{ - internalPlugin: internal, - } -} - -func (p *rustPlugin) ModuleConfigDefaults(ctx context.Context, dir string) (moduleconfig.CustomDefaults, error) { - return moduleconfig.CustomDefaults{ - Build: optional.Some("cargo build"), - DeployDir: "_ftl/target/debug", - Watch: []string{"**/*.rs", "Cargo.toml", "Cargo.lock"}, - }, nil -} - -func (p *rustPlugin) GetCreateModuleFlags(ctx context.Context) ([]*kong.Flag, error) { - return []*kong.Flag{}, nil -} - -func (p *rustPlugin) CreateModule(ctx context.Context, projConfig projectconfig.Config, c moduleconfig.ModuleConfig, flags map[string]string) error { - return fmt.Errorf("not implemented") -} - -func (p *rustPlugin) GetDependencies(ctx context.Context, config moduleconfig.ModuleConfig) ([]string, error) { - return nil, fmt.Errorf("not implemented") -} - -func buildRust(ctx context.Context, projectRoot, stubsRoot string, bctx BuildContext, buildEnv []string, devMode bool, transaction watch.ModifyFilesTransaction) (BuildResult, error) { - config := bctx.Config.Abs() - logger := log.FromContext(ctx) - logger.Debugf("Using build command '%s'", config.Build) - err := exec.Command(ctx, log.Debug, config.Dir+"/_ftl", "bash", "-c", config.Build).RunBuffered(ctx) - if err != nil { - return BuildResult{}, fmt.Errorf("failed to build module %q: %w", config.Module, err) - } - buildErrs, err := loadProtoErrors(config) - if err != nil { - return BuildResult{}, fmt.Errorf("failed to load build errors: %w", err) - } - result := BuildResult{ - Errors: buildErrs, - } - if builderrors.ContainsTerminalError(buildErrs) { - // skip reading schema - return result, nil - } - - moduleSchema, err := schema.ModuleFromProtoFile(filepath.Join(config.DeployDir, "schema.pb")) - if err != nil { - return BuildResult{}, fmt.Errorf("failed to read schema for module: %w", err) - } - - result.Schema = moduleSchema - result.Deploy = []string{"main"} - - return result, nil -} - -func loadProtoErrors(config moduleconfig.AbsModuleConfig) ([]builderrors.Error, error) { - errorsPath := filepath.Join(config.DeployDir, "errors.pb") - if _, err := os.Stat(errorsPath); errors.Is(err, os.ErrNotExist) { - return nil, nil - } - - content, err := os.ReadFile(errorsPath) - if err != nil { - return nil, fmt.Errorf("could not load build errors file: %w", err) - } - - errorspb := &languagepb.ErrorList{} - err = proto.Unmarshal(content, errorspb) - if err != nil { - return nil, fmt.Errorf("could not unmarshal build errors %w", err) - } - return languagepb.ErrorsFromProto(errorspb), nil -} diff --git a/rust-runtime/Cargo.lock b/rust-runtime/Cargo.lock deleted file mode 100644 index e3a7e1cf7f..0000000000 --- a/rust-runtime/Cargo.lock +++ /dev/null @@ -1,1492 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "addr2line" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler2" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" - -[[package]] -name = "aho-corasick" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" -dependencies = [ - "memchr", -] - -[[package]] -name = "anstream" -version = "0.6.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23a1e53f0f5d86382dafe1cf314783b2044280f406e7e1506368220ad11b1338" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "is_terminal_polyfill", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8365de52b16c035ff4fcafe0092ba9390540e3e352870ac09933bebcaa2c8c56" - -[[package]] -name = "anstyle-parse" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-query" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" -dependencies = [ - "windows-sys 0.59.0", -] - -[[package]] -name = "anstyle-wincon" -version = "3.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" -dependencies = [ - "anstyle", - "windows-sys 0.59.0", -] - -[[package]] -name = "anyhow" -version = "1.0.91" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c042108f3ed77fd83760a5fd79b53be043192bb3b9dba91d8c574c0ada7850c8" - -[[package]] -name = "async-stream" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" -dependencies = [ - "async-stream-impl", - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "async-stream-impl" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "async-trait" -version = "0.1.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "atomic-waker" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" - -[[package]] -name = "autocfg" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" - -[[package]] -name = "axum" -version = "0.7.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "504e3947307ac8326a5437504c517c4b56716c9d98fac0028c2acc7ca47d70ae" -dependencies = [ - "async-trait", - "axum-core", - "bytes", - "futures-util", - "http", - "http-body", - "http-body-util", - "itoa", - "matchit", - "memchr", - "mime", - "percent-encoding", - "pin-project-lite", - "rustversion", - "serde", - "sync_wrapper 1.0.1", - "tower 0.5.1", - "tower-layer", - "tower-service", -] - -[[package]] -name = "axum-core" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" -dependencies = [ - "async-trait", - "bytes", - "futures-util", - "http", - "http-body", - "http-body-util", - "mime", - "pin-project-lite", - "rustversion", - "sync_wrapper 1.0.1", - "tower-layer", - "tower-service", -] - -[[package]] -name = "backtrace" -version = "0.3.74" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", - "windows-targets", -] - -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - -[[package]] -name = "base64" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" - -[[package]] -name = "bitflags" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "bytes" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "chrono" -version = "0.4.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" -dependencies = [ - "num-traits", -] - -[[package]] -name = "clap" -version = "4.5.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97f376d85a664d5837dbae44bf546e6477a679ff6610010f17276f686d867e8" -dependencies = [ - "clap_builder", - "clap_derive", -] - -[[package]] -name = "clap_builder" -version = "4.5.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19bc80abd44e4bed93ca373a0704ccbd1b710dc5749406201bb018272808dc54" -dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim", -] - -[[package]] -name = "clap_derive" -version = "4.5.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "clap_lex" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" - -[[package]] -name = "colorchoice" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" - -[[package]] -name = "either" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" - -[[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - -[[package]] -name = "errno" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "fastrand" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" - -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "ftl" -version = "0.1.0" -dependencies = [ - "clap", - "ftl_derive", - "ftl_protos", - "glob", - "heck", - "prettyplease", - "proc-macro2", - "prost", - "quote", - "serde", - "serde_json", - "syn", - "tokio", - "tonic", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "ftl_derive" -version = "0.1.0" -dependencies = [ - "proc-macro2", - "quote", -] - -[[package]] -name = "ftl_protos" -version = "0.1.0" -dependencies = [ - "pbjson", - "pbjson-build", - "pbjson-types", - "prost", - "prost-build", - "prost-types", - "serde", - "tonic", - "tonic-build", -] - -[[package]] -name = "futures-channel" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" -dependencies = [ - "futures-core", -] - -[[package]] -name = "futures-core" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" - -[[package]] -name = "futures-sink" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" - -[[package]] -name = "futures-task" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" - -[[package]] -name = "futures-util" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" -dependencies = [ - "futures-core", - "futures-task", - "pin-project-lite", - "pin-utils", -] - -[[package]] -name = "getrandom" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - -[[package]] -name = "gimli" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" - -[[package]] -name = "glob" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" - -[[package]] -name = "h2" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" -dependencies = [ - "atomic-waker", - "bytes", - "fnv", - "futures-core", - "futures-sink", - "http", - "indexmap 2.6.0", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "hashbrown" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - -[[package]] -name = "hermit-abi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" - -[[package]] -name = "http" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" -dependencies = [ - "bytes", - "http", -] - -[[package]] -name = "http-body-util" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" -dependencies = [ - "bytes", - "futures-util", - "http", - "http-body", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "hyper" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbbff0a806a4728c99295b254c8838933b5b082d75e3cb70c8dab21fdfbcfa9a" -dependencies = [ - "bytes", - "futures-channel", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "smallvec", - "tokio", - "want", -] - -[[package]] -name = "hyper-timeout" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3203a961e5c83b6f5498933e78b6b263e208c197b63e9c6c53cc82ffd3f63793" -dependencies = [ - "hyper", - "hyper-util", - "pin-project-lite", - "tokio", - "tower-service", -] - -[[package]] -name = "hyper-util" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41296eb09f183ac68eec06e03cdbea2e759633d4067b2f6552fc2e009bcad08b" -dependencies = [ - "bytes", - "futures-channel", - "futures-util", - "http", - "http-body", - "hyper", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", -] - -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", -] - -[[package]] -name = "indexmap" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" -dependencies = [ - "equivalent", - "hashbrown 0.15.0", -] - -[[package]] -name = "is_terminal_polyfill" -version = "1.70.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" - -[[package]] -name = "itertools" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" - -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" - -[[package]] -name = "libc" -version = "0.2.161" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" - -[[package]] -name = "linux-raw-sys" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" - -[[package]] -name = "log" -version = "0.4.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" - -[[package]] -name = "matchers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" -dependencies = [ - "regex-automata 0.1.10", -] - -[[package]] -name = "matchit" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" - -[[package]] -name = "memchr" -version = "2.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "miniz_oxide" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" -dependencies = [ - "adler2", -] - -[[package]] -name = "mio" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" -dependencies = [ - "hermit-abi", - "libc", - "wasi", - "windows-sys 0.52.0", -] - -[[package]] -name = "multimap" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" - -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", -] - -[[package]] -name = "object" -version = "0.36.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" -dependencies = [ - "memchr", -] - -[[package]] -name = "once_cell" -version = "1.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" - -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - -[[package]] -name = "pbjson" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7e6349fa080353f4a597daffd05cb81572a9c031a6d4fff7e504947496fcc68" -dependencies = [ - "base64 0.21.7", - "serde", -] - -[[package]] -name = "pbjson-build" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6eea3058763d6e656105d1403cb04e0a41b7bbac6362d413e7c33be0c32279c9" -dependencies = [ - "heck", - "itertools", - "prost", - "prost-types", -] - -[[package]] -name = "pbjson-types" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e54e5e7bfb1652f95bc361d76f3c780d8e526b134b85417e774166ee941f0887" -dependencies = [ - "bytes", - "chrono", - "pbjson", - "pbjson-build", - "prost", - "prost-build", - "serde", -] - -[[package]] -name = "percent-encoding" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" - -[[package]] -name = "petgraph" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" -dependencies = [ - "fixedbitset", - "indexmap 2.6.0", -] - -[[package]] -name = "pin-project" -version = "1.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "ppv-lite86" -version = "0.2.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" -dependencies = [ - "zerocopy", -] - -[[package]] -name = "prettyplease" -version = "0.2.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" -dependencies = [ - "proc-macro2", - "syn", -] - -[[package]] -name = "proc-macro2" -version = "1.0.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "prost" -version = "0.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b0487d90e047de87f984913713b85c601c05609aad5b0df4b4573fbf69aa13f" -dependencies = [ - "bytes", - "prost-derive", -] - -[[package]] -name = "prost-build" -version = "0.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c1318b19085f08681016926435853bbf7858f9c082d0999b80550ff5d9abe15" -dependencies = [ - "bytes", - "heck", - "itertools", - "log", - "multimap", - "once_cell", - "petgraph", - "prettyplease", - "prost", - "prost-types", - "regex", - "syn", - "tempfile", -] - -[[package]] -name = "prost-derive" -version = "0.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9552f850d5f0964a4e4d0bf306459ac29323ddfbae05e35a7c0d35cb0803cc5" -dependencies = [ - "anyhow", - "itertools", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "prost-types" -version = "0.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4759aa0d3a6232fb8dbdb97b61de2c20047c68aca932c7ed76da9d788508d670" -dependencies = [ - "prost", -] - -[[package]] -name = "quote" -version = "1.0.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha", - "rand_core", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom", -] - -[[package]] -name = "regex" -version = "1.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata 0.4.8", - "regex-syntax 0.8.5", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", -] - -[[package]] -name = "regex-automata" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax 0.8.5", -] - -[[package]] -name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "regex-syntax" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" - -[[package]] -name = "rustc-demangle" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" - -[[package]] -name = "rustix" -version = "0.38.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa260229e6538e52293eeb577aabd09945a09d6d9cc0fc550ed7529056c2e32a" -dependencies = [ - "bitflags", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.52.0", -] - -[[package]] -name = "rustversion" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" - -[[package]] -name = "ryu" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" - -[[package]] -name = "serde" -version = "1.0.213" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ea7893ff5e2466df8d720bb615088341b295f849602c6956047f8f80f0e9bc1" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.213" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e85ad2009c50b58e87caa8cd6dac16bdf511bbfb7af6c33df902396aa480fa5" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.132" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03" -dependencies = [ - "itoa", - "memchr", - "ryu", - "serde", -] - -[[package]] -name = "sharded-slab" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "slab" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] - -[[package]] -name = "smallvec" -version = "1.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" - -[[package]] -name = "socket2" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "strsim" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" - -[[package]] -name = "syn" -version = "2.0.85" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5023162dfcd14ef8f32034d8bcd4cc5ddc61ef7a247c024a33e24e1f24d21b56" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "sync_wrapper" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" - -[[package]] -name = "sync_wrapper" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" - -[[package]] -name = "tempfile" -version = "3.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" -dependencies = [ - "cfg-if", - "fastrand", - "once_cell", - "rustix", - "windows-sys 0.59.0", -] - -[[package]] -name = "thread_local" -version = "1.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" -dependencies = [ - "cfg-if", - "once_cell", -] - -[[package]] -name = "tokio" -version = "1.41.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "145f3413504347a2be84393cc8a7d2fb4d863b375909ea59f2158261aa258bbb" -dependencies = [ - "backtrace", - "bytes", - "libc", - "mio", - "pin-project-lite", - "socket2", - "tokio-macros", - "windows-sys 0.52.0", -] - -[[package]] -name = "tokio-macros" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tokio-stream" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tokio-util" -version = "0.7.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tonic" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52" -dependencies = [ - "async-stream", - "async-trait", - "axum", - "base64 0.22.1", - "bytes", - "h2", - "http", - "http-body", - "http-body-util", - "hyper", - "hyper-timeout", - "hyper-util", - "percent-encoding", - "pin-project", - "prost", - "socket2", - "tokio", - "tokio-stream", - "tower 0.4.13", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tonic-build" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9557ce109ea773b399c9b9e5dca39294110b74f1f342cb347a80d1fce8c26a11" -dependencies = [ - "prettyplease", - "proc-macro2", - "prost-build", - "prost-types", - "quote", - "syn", -] - -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "futures-core", - "futures-util", - "indexmap 1.9.3", - "pin-project", - "pin-project-lite", - "rand", - "slab", - "tokio", - "tokio-util", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2873938d487c3cfb9aed7546dc9f2711d867c9f90c46b889989a2cb84eba6b4f" -dependencies = [ - "futures-core", - "futures-util", - "pin-project-lite", - "sync_wrapper 0.1.2", - "tower-layer", - "tower-service", -] - -[[package]] -name = "tower-layer" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" - -[[package]] -name = "tower-service" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" - -[[package]] -name = "tracing" -version = "0.1.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" -dependencies = [ - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tracing-core" -version = "0.1.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-log" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" -dependencies = [ - "log", - "once_cell", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" -dependencies = [ - "matchers", - "nu-ansi-term", - "once_cell", - "regex", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", -] - -[[package]] -name = "try-lock" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - -[[package]] -name = "unicode-ident" -version = "1.0.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" - -[[package]] -name = "utf8parse" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "want" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" -dependencies = [ - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets", -] - -[[package]] -name = "windows-sys" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" -dependencies = [ - "windows-targets", -] - -[[package]] -name = "windows-targets" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_gnullvm", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" - -[[package]] -name = "zerocopy" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" -dependencies = [ - "byteorder", - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] diff --git a/rust-runtime/Cargo.toml b/rust-runtime/Cargo.toml deleted file mode 100644 index aa4d8f4939..0000000000 --- a/rust-runtime/Cargo.toml +++ /dev/null @@ -1,35 +0,0 @@ -[workspace] -resolver = "2" - -members = [ - "ftl", - "ftl_derive", - "ftl_protos", -] - -[workspace.dependencies] -ftl = { path = "ftl" } -ftl_derive = { path = "ftl_derive" } -ftl_protos = { path = "ftl_protos" } - -clap = { version = "4.5.7", features = ["derive", "env"] } -glob = "0.3.1" -heck = "0.5.0" -prettyplease = "0.2.20" -pbjson = "0.7.0" -pbjson-build = "0.7.0" -pbjson-types = "0.7.0" -proc-macro2 = "1.0.86" -prost = "0.13.0" -prost-build = "0.13.0" -prost-types = "0.13.0" -quote = "1.0.36" -serde = { version = "1.0.203", features = ["derive"] } -serde_json = "1.0.117" -syn = { version = "2.0.66", features = ["full", "extra-traits"] } -tokio = { version = "1.38.0", features = ["macros", "rt-multi-thread"] } -tonic = "0.12.0" -tonic-build = "0.12.0" -tracing = "0.1.40" -tracing-subscriber = { version = "0.3.18", features = ["env-filter"] } - diff --git a/rust-runtime/README.md b/rust-runtime/README.md deleted file mode 100644 index f5bd394f87..0000000000 --- a/rust-runtime/README.md +++ /dev/null @@ -1,16 +0,0 @@ -This Rust runtime implementation needs a fair amount of work to be stable. - -Features: -- Verb service and client. -- Can answer verb call requests. -- Can call out to verbs in other runtimes and process responses. -- FTL can build and restart the runtime automatically. -- Generates schema protos for verbs and args/return types recursively. - -Limitations: -- Very limited functionality: Verbs only. No generics. Only a few types. -- No error handling (unwraps everywhere). -- No scaffolding generation. -- No external module code generation. -- Only struct types referenced by verb arguments and returns in the same module will correctly work. -- Hardcoded paths to crate dependencies in Cargo.toml diff --git a/rust-runtime/ftl/Cargo.toml b/rust-runtime/ftl/Cargo.toml deleted file mode 100644 index f2ad77f1c0..0000000000 --- a/rust-runtime/ftl/Cargo.toml +++ /dev/null @@ -1,30 +0,0 @@ -[package] -name = "ftl" -version = "0.1.0" -edition = "2021" -default-run = "ftl" - -[[bin]] -name = "ftl" -path = "src/bin/ftl.rs" - -[lib] - -[dependencies] -ftl_derive = { workspace = true } -ftl_protos = { workspace = true } - -clap = { workspace = true } -glob = { workspace = true } -heck = { workspace = true } -prettyplease = { workspace = true } -proc-macro2 = { workspace = true } -prost = { workspace = true } -quote = { workspace = true } -serde = { workspace = true } -serde_json = { workspace = true } -syn = { workspace = true } -tracing = { workspace = true } -tracing-subscriber = { workspace = true } -tokio = { workspace = true } -tonic = { workspace = true } diff --git a/rust-runtime/ftl/src/bin/ftl.rs b/rust-runtime/ftl/src/bin/ftl.rs deleted file mode 100644 index 78737150d9..0000000000 --- a/rust-runtime/ftl/src/bin/ftl.rs +++ /dev/null @@ -1,57 +0,0 @@ -use std::fs::File; -use std::io::Write; -use std::path::PathBuf; - -use clap::{Parser, Subcommand}; -use prost::Message; -use tracing::{error, info}; - -use ftl::parser; - -#[derive(Parser)] -#[command(version, about, long_about = None)] -struct Cli { - #[command(subcommand)] - command: Option, -} - -#[derive(Subcommand)] -enum Commands { - BuildSchema { input: PathBuf, output: PathBuf }, - DumpModuleSchema { file: PathBuf }, -} - -#[tokio::main] -async fn main() { - let cli = Cli::parse(); - tracing_subscriber::fmt::init(); - - match cli.command { - Some(Commands::BuildSchema { input, output }) => { - info!("Building schema from {:?}", input); - let name = input.file_stem().unwrap().to_str().unwrap(); - let content = std::fs::read_to_string(&input).unwrap(); - - let mut parser = parser::Parser::new(); - let module = parser::ModuleIdent::new(name); - parser.add_module(&module, &content); - let parsed = parser.parse(); - - let proto = parsed.generate_module_proto(&module); - let mut buf = Vec::new(); - proto.encode(&mut buf).unwrap(); - - let mut file = File::create(output).unwrap(); - file.write_all(&buf).unwrap(); - } - Some(Commands::DumpModuleSchema { file }) => { - info!("Dumping {:?}", file); - let reader = std::fs::File::open(&file).expect("unable to open file"); - let module = ftl::schema::binary_to_module(reader); - serde_json::to_writer_pretty(std::io::stdout(), &module).unwrap(); - } - None => { - error!("No command given"); - } - } -} diff --git a/rust-runtime/ftl/src/builder.rs b/rust-runtime/ftl/src/builder.rs deleted file mode 100644 index c6c125548a..0000000000 --- a/rust-runtime/ftl/src/builder.rs +++ /dev/null @@ -1,80 +0,0 @@ -use std::env; -use std::path::Path; - -use clap::Parser; -use prost::Message; -use tonic::transport::Uri; -use tracing::info; -use tracing_subscriber::{EnvFilter, fmt}; - -use crate::{parser, runtime, verb_server}; -use crate::verb_server::CallImmediateFn; - -#[derive(clap::Parser, Debug)] -#[command(version, about, long_about = None)] -struct Cli { - #[clap(short = 'e', env = "FTL_ENDPOINT", required = true)] - ftl_endpoint_url: String, - #[clap(short = 'b', env = "FTL_BIND", required = true)] - bind: String, - #[clap(short = 'c', env = "FTL_CONFIG", required = true)] - config: Vec, -} - -/// The entrypoint for the generated module. -pub fn main(call_immediate: CallImmediateFn) { - let filter = - EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info,ftl=debug")); - fmt::Subscriber::builder().with_env_filter(filter).init(); - info!("Starting module..."); - - let cli = Cli::parse(); - info!("CLI: {:?}", cli); - - let bind_uri = cli.bind.parse::().unwrap(); - let bind_addr = bind_uri.authority().unwrap().to_string(); - - let config = runtime::Config { - verb_server_config: verb_server::Config { - bind: bind_addr, - call_immediate, - }, - runner_url: cli.ftl_endpoint_url, - }; - info!("Starting server with config: {:?}", config); - - // Create a tokio mt runtime - let rt = tokio::runtime::Builder::new_multi_thread() - .enable_all() - .build() - .unwrap(); - - rt.block_on(runtime::run(config)) -} - -pub fn build(module_name: &str) { - let module_dir = Path::new(".."); - let out_dir = env::var("OUT_DIR").unwrap(); - - let src = module_dir.join("src").join("lib.rs"); - let call_immediate_path = Path::new(&out_dir).join("call_immediate.rs"); - let schema_path = module_dir - .join("_ftl") - .join("target") - .join("debug") - .join("schema.pb"); - - let mut parser = parser::Parser::new(); - let module = parser::ModuleIdent::new(module_name); - let code = std::fs::read_to_string(&src).unwrap(); - parser.add_module(&module, &code); - let parsed = parser.parse(); - assert!(parsed.modules_count() > 0, "No modules found in {:?}", src); - assert!(parsed.verb_count() > 0, "No modules found in {:?}", src); - parsed.generate_call_immediate_file(&call_immediate_path); - - let module = parsed.generate_module_proto(&module); - let mut encoded = Vec::new(); - module.encode(&mut encoded).unwrap(); - std::fs::write(schema_path, &encoded).unwrap(); -} diff --git a/rust-runtime/ftl/src/generator.rs b/rust-runtime/ftl/src/generator.rs deleted file mode 100644 index eabfb7f5da..0000000000 --- a/rust-runtime/ftl/src/generator.rs +++ /dev/null @@ -1,63 +0,0 @@ -use std::path::Path; - -use quote::quote; - -use crate::parser::{Parsed, VerbToken}; - -impl Parsed { - pub fn generate_call_immediate_file(&self, out_path: &Path) { - let mut call_immediate_case_tokens = vec![]; - for verb_token in &self.verbs { - call_immediate_case_tokens.push(Self::to_call_immediate_case_token(verb_token)); - } - - let token_stream = quote::quote! { - // Output should be boxed trait of Deserializable - pub fn call_immediate(ctx: ::ftl::Context, module: String, verb: String, request_body: String) - -> ::std::pin::Pin + Send>> { - let fut = async move { - match (module.as_str(), verb.as_str()) { - #(#call_immediate_case_tokens)* - unknown => panic!("Unknown verb: {:?}", unknown), - } - }; - - Box::pin(fut) - } - }; - - eprintln!("Generated: {}", token_stream); - let formatted_code = prettyplease::unparse(&syn::parse2(token_stream).unwrap()); - - eprintln!("Generating to: {}", out_path.display()); - eprintln!("Generated: {}", formatted_code); - std::fs::write(out_path, formatted_code).unwrap(); - } - - pub fn to_call_immediate_case_token(verb_token: &VerbToken) -> proc_macro2::TokenStream { - let module_name = verb_token.module.0.clone(); - let verb_name = verb_token.func.sig.ident.clone(); - let module_name_str = module_name.to_string(); - let verb_name_str = verb_name.to_string(); - let request_type = &verb_token.request_ident; - let response_type = &verb_token.response_ident; - - // request type only supports existing in the same module or unit - dbg!(&verb_token.request_ident); - // if verb_token.request_ident == syn::Ident::new("()", proc_macro2::Span::call_site()) { - // quote! { - // (#module_name_str, #verb_name_str) => { - // #module_name::#verb_name(ctx, ()).await.unwrap(); - // } - // } - // } else { - quote! { - (#module_name_str, #verb_name_str) => { - let request = ::serde_json::from_str::<#module_name::#request_type>(&request_body).unwrap(); - let response: #module_name::#response_type = #module_name::#verb_name(ctx, request).await; - serde_json::to_string(&response).unwrap() - } - } - // } - } -} diff --git a/rust-runtime/ftl/src/lib.rs b/rust-runtime/ftl/src/lib.rs deleted file mode 100644 index 50a6f11704..0000000000 --- a/rust-runtime/ftl/src/lib.rs +++ /dev/null @@ -1,65 +0,0 @@ -use serde::{de::DeserializeOwned, Serialize}; - -pub use ftl_derive::verb; -use ftl_protos::ftl::call_response::Response; -use ftl_protos::ftl::CallRequest; -use ftl_protos::ftl::verb_service_client::VerbServiceClient; -use ftl_protos::schema::Ref; - -pub mod builder; -pub mod generator; -pub mod parser; -pub mod runtime; -pub mod schema; -pub mod verb_server; - -pub trait VerbFn { - type Request: Serialize; - type Response: DeserializeOwned; - - fn module() -> &'static str; - fn name() -> &'static str; -} - -#[derive(Clone, Debug)] -pub struct Context { - verb_client: VerbServiceClient, -} - -impl Context { - pub fn new(verb_client: VerbServiceClient) -> Self { - Self { verb_client } - } - - pub async fn call(&mut self, _v: V, request: V::Request) -> V::Response - where - V: VerbFn, - { - let name = V::name().to_string(); - let module = V::module().to_string(); - - let response = self - .verb_client - .call(tonic::Request::new(CallRequest { - metadata: None, - verb: Some(Ref { - pos: None, - name, - module, - type_parameters: vec![], - }), - body: serde_json::to_vec(&request).unwrap(), - })) - .await - .unwrap() - .into_inner(); - - let response = response.response.unwrap(); - match response { - Response::Body(vec) => serde_json::from_slice(&vec).unwrap(), - Response::Error(err) => { - panic!("Error: {:?}", err) - } - } - } -} diff --git a/rust-runtime/ftl/src/parser.rs b/rust-runtime/ftl/src/parser.rs deleted file mode 100644 index 9d2a42317f..0000000000 --- a/rust-runtime/ftl/src/parser.rs +++ /dev/null @@ -1,412 +0,0 @@ -use std::collections::{HashMap, HashSet, VecDeque}; -use std::path::{Path, PathBuf}; - -use heck::ToLowerCamelCase; -use proc_macro2::{Ident, Span}; - -use ftl_protos::schema; - -#[derive(Debug)] -pub struct Module { - pub name: ModuleIdent, - pub ast: syn::File, -} - -#[derive(Default)] -pub struct Parser { - modules: Vec, -} - -impl Parser { - pub fn new() -> Self { - Default::default() - } - - pub fn add_module(&mut self, module_ident: &ModuleIdent, code: &str) { - let ast = syn::parse_file(code).unwrap(); - self.modules.push(Module { - name: module_ident.clone(), - ast, - }); - } - - pub fn add_glob(&mut self, path: &Path) { - let sources = find_sources(path); - for source in sources { - let contents = std::fs::read_to_string(&source).unwrap(); - let file_name = source.file_stem().unwrap().to_str().unwrap(); - let mod_ident = ModuleIdent::new(file_name); - - self.add_module(&mod_ident, &contents); - } - } - - pub fn parse(self) -> Parsed { - // Get all verbs. - let verbs: Vec<_> = self - .modules - .iter() - .flat_map(|module| extract_ast_verbs(&module.name, &module.ast)) - .collect(); - - println!("Found {} verbs", verbs.len()); - - // For each verb, queue request and response types. - let mut type_queue = VecDeque::new(); - for verb in &verbs { - type_queue.push_back(verb.request_ident.clone()); - type_queue.push_back(verb.response_ident.clone()); - } - - // Iterate queue until empty. - let mut types = HashMap::new(); // Ident to AST node - while let Some(ident) = type_queue.pop_front() { - let (item, add_to_queue) = self.find_type_ast(&ident); - if let Some(item) = item { - println!("Found type: {:?}", ident); - dbg!(&item); - types.insert(ident.clone(), item); - } - for ident in add_to_queue { - type_queue.push_back(ident); - } - println!("Types: {:?}", types); - println!("Queue: {:?}", type_queue); - } - - Parsed { verbs, types } - } - - fn find_type_ast(&self, ident: &Ident) -> (Option, Vec) { - let known_types = [ - "String", "bool", "u8", "u16", "u32", "u64", "i8", "i16", "i32", "i64", - ]; - - if known_types.contains(&ident.to_string().as_str()) { - return (None, vec![]); - } - - for module in &self.modules { - for item in &module.ast.items { - let syn::Item::Struct(item_struct) = item else { - continue; - }; - - if item_struct.ident != *ident { - continue; - } - - // Get the ident of the Type for each field. - let fields = item_struct - .fields - .iter() - .map(|field| ident_from_type(&field.ty)) - .collect(); - - return (Some(item.clone()), fields); - } - } - - panic!("Type not found: {:?}", ident); - } -} - -fn ident_from_path(path: &syn::Path) -> Ident { - dbg!(&path); - path.get_ident().unwrap().clone() -} - -fn generics_from_path(path: &syn::Path) -> Vec { - path.segments - .iter() - .map(|segment| segment.ident.clone()) - .collect() -} - -pub fn ident_from_type(ty: &syn::Type) -> Ident { - match ty { - syn::Type::Path(path) => ident_from_path(&path.path), - _ => panic!("Expected type path, got {:?}", ty), - } -} - -pub struct Parsed { - pub verbs: Vec, - pub types: HashMap, -} - -impl Parsed { - pub fn modules_count(&self) -> usize { - self.verbs - .iter() - .map(|verb| &verb.module) - .collect::>() - .len() - } - - pub fn verb_count(&self) -> usize { - self.verbs.len() - } -} - -/// Find all .rs sources in src. -fn find_sources(path: &Path) -> Vec { - glob::glob(path.to_str().unwrap()) - .unwrap() - .map(|entry| entry.unwrap()) - .map(|entry| entry.as_path().to_path_buf()) - .collect() -} - -#[derive(Debug, Clone, Hash, Eq, PartialEq)] -pub struct ModuleIdent(pub Ident); - -impl ModuleIdent { - pub fn new(name: &str) -> Self { - Self(Ident::new(name, Span::call_site())) - } -} - -#[derive(Debug, Clone)] -pub struct VerbToken { - pub module: ModuleIdent, - pub func: syn::ItemFn, - pub ident: Ident, - pub request_ident: Ident, - pub response_ident: Ident, -} - -impl VerbToken { - pub fn try_parse_any_item(module: &ModuleIdent, item: &syn::Item) -> Option { - let func = match item { - syn::Item::Fn(func) => func, - // Quietly ignore non-functions. - _ => return None, - }; - - let ftl_verb_path = syn::parse_str("ftl::verb").unwrap(); - if !has_meta_path(&func.attrs, &ftl_verb_path) { - // No #[ftl::verb] annotation, ignore. - return None; - } - - ensure_arg_is_path(func, 0); - ensure_arg_type_ident(func, 0, "Context"); - ensure_arg_is_path(func, 1); - let request_type = get_arg_type(func, 1); - let response_type = get_return_type_or_unit(func); - let request_type_ident = ident_from_type(&request_type); - let response_type_ident = ident_from_type(&response_type); - - Some(VerbToken { - module: module.clone(), - func: func.clone(), - ident: func.sig.ident.clone(), - request_ident: request_type_ident, - response_ident: response_type_ident, - }) - } - - pub fn to_verb_proto(&self) -> schema::Verb { - let request = Some(schema::Type { - value: Some(schema::r#type::Value::Ref(schema::Ref { - pos: None, - name: self.request_ident.to_string(), - module: self.module.0.to_string(), - type_parameters: vec![], - })), - }); - let response = Some(schema::Type { - value: Some(schema::r#type::Value::Ref(schema::Ref { - pos: None, - name: self.response_ident.to_string(), - module: self.module.0.to_string(), - type_parameters: vec![], - })), - }); - - schema::Verb { - runtime: None, - pos: None, - comments: vec![], - export: false, - name: self.func.sig.ident.to_string().to_lower_camel_case(), - request, - response, - metadata: vec![], - } - } -} - -/// Extract functions that are annotated with #[ftl::verb] and extract the AST node. -pub fn extract_ast_verbs(module: &ModuleIdent, ast: &syn::File) -> Vec { - let mut verbs = vec![]; - for item in &ast.items { - let Some(verb_token) = VerbToken::try_parse_any_item(module, item) else { - continue; - }; - - verbs.push(verb_token); - } - verbs -} - -fn ensure_arg_is_path(func: &syn::ItemFn, index: usize) { - if func.sig.inputs.len() <= index { - panic!("Function must have at least {} arguments", index + 1); - } - let arg = &func.sig.inputs[index]; - - let syn::FnArg::Typed(pat) = arg else { - panic!("Argument {} must not be a self argument", index); - }; - - let syn::Type::Path(_) = &*pat.ty else { - panic!( - "Argument {} must be of type Path instead of {:?}", - index, pat.ty - ); - }; -} - -fn ensure_arg_type_ident(func: &syn::ItemFn, index: usize, expected_ident: &str) { - if func.sig.inputs.len() <= index { - panic!("Function must have at least {} arguments", index + 1); - } - let arg = &func.sig.inputs[index]; - - let syn::FnArg::Typed(pat) = arg else { - panic!("Argument {} must not be a self argument", index); - }; - - let syn::Type::Path(path) = &*pat.ty else { - panic!( - "Argument {} must be of type Path instead of {:?}", - index, pat.ty - ); - }; - - let ident = path.path.get_ident().unwrap(); - if ident != expected_ident { - panic!( - "Argument {} must be of type {} instead of {}", - index, expected_ident, ident - ); - } -} - -fn get_arg_type(func: &syn::ItemFn, index: usize) -> syn::Type { - if func.sig.inputs.len() <= index { - panic!("Function must have at least {} arguments", index + 1); - } - let arg = &func.sig.inputs[index]; - - let syn::FnArg::Typed(pat) = arg else { - panic!("Argument {} must not be a self argument", index); - }; - - *pat.ty.clone() -} - -fn get_return_type_or_unit(func: &syn::ItemFn) -> syn::Type { - let syn::ReturnType::Type(_, ty) = &func.sig.output else { - return syn::Type::Tuple(syn::TypeTuple { - paren_token: syn::token::Paren::default(), - elems: Default::default(), - }); - }; - - *ty.clone() -} - -// Look for #[path_str] e.g. #[ftl::verb], and extract the function signature. -fn has_meta_path(attrs: &[syn::Attribute], expected_path: &syn::Path) -> bool { - attrs.iter().any(|attr| attr.meta.path() == expected_path) -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn test_basic_types() { - let mut parser = Parser::new(); - parser.add_module( - &ModuleIdent::new("test"), - r#" - pub struct User { - pub name: String, - pub age: u32, - } - - pub struct Request { - pub name: String, - pub user: User, - } - - pub struct Response { - pub message: String, - pub user: User, - } - - #[ftl::verb] - pub fn test_verb(ctx: Context, request: Request) -> Response { - println!("Hello, world!"); - } - "#, - ); - let parsed = parser.parse(); - - assert_eq!(parsed.modules_count(), 1); - assert_eq!(parsed.verb_count(), 1); - assert_eq!(parsed.types.len(), 3); - - let user = parsed.generate_module_proto(&ModuleIdent::new("test")); - dbg!(user); - } - - #[test] - fn generic_types() { - let mut parser = Parser::new(); - parser.add_module( - &ModuleIdent::new("test"), - r#" - pub struct User { - pub name: String, - pub age: T, - pub score: Y, - } - - pub struct Request { - pub name: String, - pub user: User, - } - - pub struct Response { - pub message: String, - pub user: User, - } - - #[ftl::verb] - pub fn test_verb(ctx: Context, request: Request) -> Response { - let response = Response { - message: "Hello, world!".to_string(), - user: User { - name: "Alice".to_string(), - age: 42, - score: 100f32, - }, - }; - } - "#, - ); - let parsed = parser.parse(); - - assert_eq!(parsed.modules_count(), 1); - assert_eq!(parsed.verb_count(), 1); - assert_eq!(parsed.types.len(), 3); - - let user = parsed.generate_module_proto(&ModuleIdent::new("test")); - dbg!(user); - } -} diff --git a/rust-runtime/ftl/src/runtime.rs b/rust-runtime/ftl/src/runtime.rs deleted file mode 100644 index 40fecb0242..0000000000 --- a/rust-runtime/ftl/src/runtime.rs +++ /dev/null @@ -1,23 +0,0 @@ -use tracing::info; - -use ftl_protos::ftl::verb_service_client::VerbServiceClient; - -use crate::verb_server; - -#[derive(Debug)] -pub struct Config { - pub verb_server_config: verb_server::Config, - pub runner_url: String, -} - -pub async fn run(config: Config) { - info!("Starting"); - - info!("Connecting to verb service at {}", config.runner_url); - let verb_client = VerbServiceClient::connect(config.runner_url.clone()) - .await - .unwrap(); - info!("Connected"); - - verb_server::serve(config.verb_server_config, verb_client).await; -} diff --git a/rust-runtime/ftl/src/schema.rs b/rust-runtime/ftl/src/schema.rs deleted file mode 100644 index d9b494c2e5..0000000000 --- a/rust-runtime/ftl/src/schema.rs +++ /dev/null @@ -1,212 +0,0 @@ -//! A crate for parsing/generating code to and from schema binary. -use heck::ToLowerCamelCase; -use prost::Message; - -use ftl_protos::schema; - -use crate::parser::{ident_from_type, ModuleIdent, Parsed, VerbToken}; - -pub fn binary_to_module(mut reader: impl std::io::Read) -> schema::Module { - let mut buf = Vec::new(); - reader.read_to_end(&mut buf).unwrap(); - schema::Module::decode(&buf[..]).unwrap() -} - -impl Parsed { - pub fn generate_module_proto(&self, module: &ModuleIdent) -> schema::Module { - let mut decls = vec![]; - - for verb_token in &self.verbs { - decls.push(self.get_decl_for_verb(verb_token)); - } - for ident in self.types.keys() { - decls.push(self.get_decl_for_data(ident)); - } - - dbg!(&decls); - - schema::Module { - runtime: None, - pos: None, - comments: vec![], - builtin: false, - name: module.0.to_string(), - decls, - } - } - - fn get_decl_for_verb(&self, verb_token: &VerbToken) -> schema::Decl { - let verb = verb_token.to_verb_proto(); - schema::Decl { - value: Some(schema::decl::Value::Verb(verb)), - } - } - - fn get_decl_for_data(&self, ident: &syn::Ident) -> schema::Decl { - let item = self.types.get(ident).unwrap(); - match item { - syn::Item::Struct(item_struct) => { - let mut fields = vec![]; - - for field in &item_struct.fields { - // let ident = field.ty; - let type_ident = ident_from_type(&field.ty); - fields.push(schema::Field { - pos: None, - comments: vec![], - name: field - .ident - .as_ref() - .unwrap() - .to_string() - .to_lower_camel_case(), - r#type: Some(self.get_type_recursive(&type_ident)), - metadata: vec![], - }); - } - - let data = schema::Data { - pos: None, - comments: vec![], - export: true, - name: ident.to_string(), - type_parameters: vec![], - fields, - metadata: vec![], - }; - - schema::Decl { - value: Some(schema::decl::Value::Data(data)), - } - } - _ => todo!(), - } - } - - fn get_type_recursive(&self, ident: &syn::Ident) -> schema::Type { - let maybe_value = match ident.to_string().as_str() { - "String" => Some(schema::r#type::Value::String(schema::String { pos: None })), - "u32" => Some(schema::r#type::Value::Int(schema::Int { pos: None })), - _ => None, - }; - if let Some(value) = maybe_value { - return schema::Type { value: Some(value) }; - } - - println!("maybe not an internal type: {:?}", ident); - - let item = self - .types - .get(ident) - .expect(format!("type not found: {:?}", ident).as_str()); - let value = match item { - syn::Item::Struct(_item_struct) => schema::r#type::Value::Ref(schema::Ref { - pos: None, - name: ident.to_string(), - module: "".to_string(), - type_parameters: vec![], - }), - unknown => todo!("unhandled type {:?}", unknown), - // Item::Const(_) => {} - // Item::Enum(_) => {} - // Item::ExternCrate(_) => {} - // Item::Fn(_) => {} - // Item::ForeignMod(_) => {} - // Item::Impl(_) => {} - // Item::Macro(_) => {} - // Item::Mod(_) => {} - // Item::Static(_) => {} - // Item::Trait(_) => {} - // Item::TraitAlias(_) => {} - // Item::Type(_) => {} - // Item::Union(_) => {} - // Item::Use(_) => {} - // Item::Verbatim(_) => {} - }; - - schema::Type { value: Some(value) } - } -} - -#[cfg(test)] -mod tests { - use crate::parser::Parser; - - use super::*; - - #[test] - fn it_works() { - let config = schema::Config { - pos: None, - comments: vec![], - name: "sup".to_string(), - r#type: None, - }; - - let mut encoded = Vec::new(); - Message::encode(&config, &mut encoded).unwrap(); - - let decoded = schema::Config::decode(&encoded[..]).unwrap(); - assert_eq!(config, decoded); - - dbg!(encoded); - dbg!(decoded); - } - - #[test] - fn ast_to_proto() { - // - let code = r#" - use ftl::Context; - - struct Request { - pub name: String, - pub age: u32, - } - - struct Response { - pub message: String, - } - - #[ftl::verb] - pub async fn test_verb(ctx: Context, request: Request) -> Result> { - // let response = ctx.call(module::other_verb, request).await?; - - Ok(Response { - message: format!("Hello {}!", request.name), - }) - } - "#; - - let mut parser = Parser::new(); - let moo = ModuleIdent::new("moo"); - parser.add_module(&moo, code); - let parsed = parser.parse(); - let m = parsed.generate_module_proto(&moo); - - assert_eq!( - m, - schema::Module { - runtime: None, - pos: None, - comments: vec![], - builtin: false, - name: "moo".to_string(), - decls: vec![schema::Decl { - value: Some(schema::decl::Value::Verb(schema::Verb { - runtime: None, - pos: None, - comments: vec![], - export: false, - name: "test_verb".to_string(), - request: None, - response: None, - metadata: vec![], - })), - },], - } - ); - - dbg!(m); - } -} diff --git a/rust-runtime/ftl/src/verb_server.rs b/rust-runtime/ftl/src/verb_server.rs deleted file mode 100644 index 812873ecb5..0000000000 --- a/rust-runtime/ftl/src/verb_server.rs +++ /dev/null @@ -1,118 +0,0 @@ -use std::future::Future; -use std::pin::Pin; - -use heck::ToSnakeCase; -use prost::Message; -use tonic::{Request, Response, Status, Streaming}; -use tonic::codegen::tokio_stream::Stream; -use tonic::transport::{Channel, Server}; - -use ftl_protos as protos; -use ftl_protos::ftl::verb_service_client::VerbServiceClient; -use ftl_protos::ftl::verb_service_server::VerbService; - -use crate::Context; - -pub type CallImmediateReturn = Pin + Send>>; - -pub type CallImmediateFn = fn(Context, String, String, String) -> CallImmediateReturn; - -#[derive(Debug)] -pub struct Config { - pub bind: String, - pub call_immediate: CallImmediateFn, -} - -impl Config { - pub fn bind_url(&self) -> String { - format!("http://{}", self.bind) - } -} - -pub async fn serve(config: Config, verb_client: VerbServiceClient) { - let addr = config.bind.parse().unwrap(); - let service = FtlService { - config, - context: Context::new(verb_client), - }; - - Server::builder() - .add_service(protos::ftl::verb_service_server::VerbServiceServer::new( - service, - )) - .serve(addr) - .await - .unwrap(); -} - -#[derive(Debug)] -pub struct FtlService { - config: Config, - context: Context, -} - -type ModuleContextResponseStream = - Pin> + Send>>; - -type AcquireLeaseStream = - Pin> + Send>>; - -#[tonic::async_trait] -impl VerbService for FtlService { - async fn ping( - &self, - _request: Request, - ) -> Result, Status> { - Ok(Response::new(protos::ftl::PingResponse { not_ready: None })) - } - - type GetModuleContextStream = ModuleContextResponseStream; - - async fn get_module_context( - &self, - _request: Request, - ) -> Result, Status> { - todo!() - } - - type AcquireLeaseStream = AcquireLeaseStream; - - async fn acquire_lease( - &self, - _request: Request>, - ) -> Result, Status> { - todo!() - } - - async fn publish_event( - &self, - _request: Request, - ) -> Result, Status> { - todo!() - } - - async fn call( - &self, - request: Request, - ) -> Result, Status> { - let request = request.into_inner(); - let verb_ref = request.verb.unwrap(); - let module = verb_ref.module; - let name = verb_ref.name.to_snake_case(); - let request_body: Vec = request.body; - let request_body = String::from_utf8(request_body).unwrap(); - println!( - "module: {}, name: {}, request_body: {}", - module, name, request_body - ); - - let context = self.context.clone(); - let response = (self.config.call_immediate)(context, module, name, request_body).await; - - Ok(Response::new(protos::ftl::CallResponse { - response: Some(protos::ftl::call_response::Response::Body( - response.encode_to_vec(), - )), - })) - } -} diff --git a/rust-runtime/ftl_derive/Cargo.toml b/rust-runtime/ftl_derive/Cargo.toml deleted file mode 100644 index 56124f1d25..0000000000 --- a/rust-runtime/ftl_derive/Cargo.toml +++ /dev/null @@ -1,11 +0,0 @@ -[package] -name = "ftl_derive" -version = "0.1.0" -edition = "2021" - -[lib] -proc-macro = true - -[dependencies] -proc-macro2 = { workspace = true } -quote = { workspace = true } diff --git a/rust-runtime/ftl_derive/src/lib.rs b/rust-runtime/ftl_derive/src/lib.rs deleted file mode 100644 index 2b119e03a0..0000000000 --- a/rust-runtime/ftl_derive/src/lib.rs +++ /dev/null @@ -1,13 +0,0 @@ -use proc_macro::TokenStream; - -/// ftl::verb is a "tag" only proc macro that does not generate any code, just keeps the original. -#[proc_macro_attribute] -pub fn verb(_: TokenStream, token_stream: TokenStream) -> TokenStream { - token_stream -} - -/// ftl::ingress -#[proc_macro_attribute] -pub fn ingress(_: TokenStream, token_stream: TokenStream) -> TokenStream { - token_stream -} diff --git a/rust-runtime/ftl_protos/Cargo.toml b/rust-runtime/ftl_protos/Cargo.toml deleted file mode 100644 index 5416cb7438..0000000000 --- a/rust-runtime/ftl_protos/Cargo.toml +++ /dev/null @@ -1,18 +0,0 @@ -[package] -name = "ftl_protos" -version = "0.1.0" -edition = "2021" - -[dependencies] -pbjson = { workspace = true } -pbjson-types = { workspace = true } -prost = { workspace = true } -serde = { workspace = true } -tonic = { workspace = true } -prost-types = { workspace = true } - -[build-dependencies] -pbjson-build = { workspace = true } -prost-build = { workspace = true } -prost = { workspace = true } -tonic-build = { workspace = true } diff --git a/rust-runtime/ftl_protos/build.rs b/rust-runtime/ftl_protos/build.rs deleted file mode 100644 index 9b59d04ec8..0000000000 --- a/rust-runtime/ftl_protos/build.rs +++ /dev/null @@ -1,31 +0,0 @@ -use std::env; -use std::path::PathBuf; - -fn main() -> Result<(), Box> { - let root = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("../../backend/protos"); - let proto_files = vec![ - root.join("xyz/block/ftl/v1/schema/schema.proto"), - root.join("xyz/block/ftl/v1/ftl.proto"), - ]; - - // Tell cargo to recompile if any of these proto files are changed - for proto_file in &proto_files { - println!("cargo:rerun-if-changed={}", proto_file.display()); - } - - let descriptor_path = PathBuf::from(env::var("OUT_DIR").unwrap()).join("proto_descriptor.bin"); - - tonic_build::configure() - .file_descriptor_set_path(&descriptor_path) - // Override prost-types with pbjson-types - .compile_well_known_types(true) - .extern_path(".google.protobuf", "::pbjson_types") - .compile(&proto_files, &[&root])?; - - let descriptor_set = std::fs::read(descriptor_path)?; - pbjson_build::Builder::new() - .register_descriptors(&descriptor_set)? - .build(&[".xyz.block.ftl.v1.schema"])?; - - Ok(()) -} diff --git a/rust-runtime/ftl_protos/src/lib.rs b/rust-runtime/ftl_protos/src/lib.rs deleted file mode 100644 index 489bf56aa2..0000000000 --- a/rust-runtime/ftl_protos/src/lib.rs +++ /dev/null @@ -1,21 +0,0 @@ -pub mod schema { - // Generated by [`prost-build`] - include!(concat!(env!("OUT_DIR"), "/xyz.block.ftl.v1.schema.rs")); - - // Generated by [`pbjson-build`] - include!(concat!( - env!("OUT_DIR"), - "/xyz.block.ftl.v1.schema.serde.rs" - )); -} - -pub mod ftl { - use crate::schema; - - // Generated by [`prost-build`] - include!(concat!(env!("OUT_DIR"), "/xyz.block.ftl.v1.rs")); - // tonic::include_proto!("xyz.block.ftl.v1"); - - // Generated by [`pbjson-build`] - // include!(concat!(env!("OUT_DIR"), "/xyz.block.ftl.v1.serde.rs")); -}