From d84108bf6c8f4bde64eb8723e7d64443e2aa198a Mon Sep 17 00:00:00 2001 From: Remo Senekowitsch Date: Thu, 6 Jun 2024 19:53:58 +0200 Subject: [PATCH] wip tarpc --- Cargo.lock | 215 ++++++++++++++++++++++++++++++++++++++------- Cargo.toml | 1 + models/Cargo.toml | 1 + models/src/lib.rs | 2 + models/src/rpc.rs | 4 + server/Cargo.toml | 2 + server/src/main.rs | 24 +++++ 7 files changed, 215 insertions(+), 34 deletions(-) create mode 100644 models/src/rpc.rs diff --git a/Cargo.lock b/Cargo.lock index bfd6e29..47d9954 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -133,7 +133,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.66", ] [[package]] @@ -144,7 +144,7 @@ checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.66", ] [[package]] @@ -158,7 +158,7 @@ dependencies = [ "manyhow", "proc-macro2", "quote", - "syn", + "syn 2.0.66", ] [[package]] @@ -174,7 +174,7 @@ dependencies = [ "proc-macro2", "quote", "quote-use", - "syn", + "syn 2.0.66", ] [[package]] @@ -271,7 +271,7 @@ dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn", + "syn 2.0.66", ] [[package]] @@ -363,6 +363,7 @@ dependencies = [ "serde", "strum", "strum_macros", + "tarpc", "uuid", ] @@ -374,6 +375,7 @@ dependencies = [ "axum-extra", "buenzlimarks_models", "clap", + "futures", "hmac", "jwt", "mime_guess", @@ -383,6 +385,7 @@ dependencies = [ "serde", "serde_json", "sha2", + "tarpc", "tempfile", "tokio", "tower-http", @@ -493,7 +496,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn", + "syn 2.0.66", ] [[package]] @@ -591,6 +594,21 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "crossbeam-channel" +version = "0.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + [[package]] name = "crunchy" version = "0.2.2" @@ -614,7 +632,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown", + "hashbrown 0.14.5", "lock_api", "once_cell", "parking_lot_core", @@ -628,7 +646,7 @@ checksum = "62d671cc41a825ebabc75757b62d3d168c577f9149b2d49ece1dad1f72119d25" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.66", ] [[package]] @@ -757,7 +775,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.66", ] [[package]] @@ -888,6 +906,12 @@ dependencies = [ "crunchy", ] +[[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" @@ -1017,6 +1041,12 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + [[package]] name = "hyper" version = "1.3.1" @@ -1107,6 +1137,16 @@ dependencies = [ "unicode-normalization", ] +[[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" @@ -1114,7 +1154,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.14.5", ] [[package]] @@ -1231,7 +1271,7 @@ dependencies = [ "futures", "getrandom", "html-escape", - "indexmap", + "indexmap 2.2.6", "itertools", "js-sys", "leptos_reactive", @@ -1257,13 +1297,13 @@ checksum = "ec5ce56051f2eff2c4736b7a2056177e67be19597b767ff72fbab20917a7422d" dependencies = [ "anyhow", "camino", - "indexmap", + "indexmap 2.2.6", "parking_lot", "proc-macro2", "quote", "rstml", "serde", - "syn", + "syn 2.0.66", "walkdir", ] @@ -1285,7 +1325,7 @@ dependencies = [ "quote", "rstml", "server_fn_macro", - "syn", + "syn 2.0.66", "tracing", "uuid", ] @@ -1299,7 +1339,7 @@ dependencies = [ "base64 0.22.1", "cfg-if", "futures", - "indexmap", + "indexmap 2.2.6", "js-sys", "oco_ref", "paste", @@ -1406,7 +1446,7 @@ dependencies = [ "manyhow-macros", "proc-macro2", "quote", - "syn", + "syn 2.0.66", ] [[package]] @@ -1567,6 +1607,49 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +[[package]] +name = "opentelemetry" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69d6c3d7288a106c0a363e4b0e8d308058d56902adefb16f4936f417ffef086e" +dependencies = [ + "opentelemetry_api", + "opentelemetry_sdk", +] + +[[package]] +name = "opentelemetry_api" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c24f96e21e7acc813c7a8394ee94978929db2bcc46cf6b5014fc612bf7760c22" +dependencies = [ + "futures-channel", + "futures-util", + "indexmap 1.9.3", + "js-sys", + "once_cell", + "pin-project-lite", + "thiserror", +] + +[[package]] +name = "opentelemetry_sdk" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ca41c4933371b61c2a2f214bf16931499af4ec90543604ec828f7a625c09113" +dependencies = [ + "async-trait", + "crossbeam-channel", + "futures-channel", + "futures-executor", + "futures-util", + "once_cell", + "opentelemetry_api", + "percent-encoding", + "rand", + "thiserror", +] + [[package]] name = "overload" version = "0.1.1" @@ -1637,7 +1720,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.66", ] [[package]] @@ -1665,7 +1748,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" dependencies = [ "proc-macro2", - "syn", + "syn 2.0.66", ] [[package]] @@ -1719,7 +1802,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.66", "version_check", "yansi", ] @@ -1753,7 +1836,7 @@ dependencies = [ "proc-macro-utils", "proc-macro2", "quote", - "syn", + "syn 2.0.66", ] [[package]] @@ -1904,7 +1987,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn", + "syn 2.0.66", "syn_derive", "thiserror", ] @@ -1930,7 +2013,7 @@ dependencies = [ "proc-macro2", "quote", "rust-embed-utils", - "syn", + "syn 2.0.66", "walkdir", ] @@ -2080,7 +2163,7 @@ checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.66", ] [[package]] @@ -2195,7 +2278,7 @@ dependencies = [ "convert_case", "proc-macro2", "quote", - "syn", + "syn 2.0.66", "xxhash-rust", ] @@ -2206,7 +2289,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00783df297ec85ea605779f2fef9cbec98981dffe2e01e1a9845c102ee1f1ae6" dependencies = [ "server_fn_macro", - "syn", + "syn 2.0.66", ] [[package]] @@ -2290,6 +2373,12 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + [[package]] name = "strsim" version = "0.11.1" @@ -2315,7 +2404,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn", + "syn 2.0.66", ] [[package]] @@ -2324,6 +2413,17 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "syn" version = "2.0.66" @@ -2344,7 +2444,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 2.0.66", ] [[package]] @@ -2359,6 +2459,39 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +[[package]] +name = "tarpc" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93a1870169fb9490fb3b37df7f50782986475c33cb90955f9f9b9ae659124200" +dependencies = [ + "anyhow", + "fnv", + "futures", + "humantime", + "opentelemetry", + "pin-project", + "rand", + "static_assertions", + "tarpc-plugins", + "thiserror", + "tokio", + "tokio-util", + "tracing", + "tracing-opentelemetry", +] + +[[package]] +name = "tarpc-plugins" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad8302bea2fb8a2b01b025d23414b0b4ed32a783b95e5d818c3320a8bc4baada" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "tempfile" version = "3.10.1" @@ -2388,7 +2521,7 @@ checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.66", ] [[package]] @@ -2443,7 +2576,7 @@ checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.66", ] [[package]] @@ -2467,6 +2600,7 @@ dependencies = [ "futures-core", "futures-sink", "pin-project-lite", + "slab", "tokio", ] @@ -2497,7 +2631,7 @@ version = "0.22.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f21c7aaf97f1bd9ca9d4f9e73b0a6c74bd5afef56f2bc931943a6e1c37e04e38" dependencies = [ - "indexmap", + "indexmap 2.2.6", "serde", "serde_spanned", "toml_datetime", @@ -2579,7 +2713,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.66", ] [[package]] @@ -2603,6 +2737,19 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-opentelemetry" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21ebb87a95ea13271332df069020513ab70bdb5637ca42d6e492dc3bbbad48de" +dependencies = [ + "once_cell", + "opentelemetry", + "tracing", + "tracing-core", + "tracing-subscriber", +] + [[package]] name = "tracing-subscriber" version = "0.3.18" @@ -2644,7 +2791,7 @@ checksum = "1f718dfaf347dcb5b983bfc87608144b0bad87970aebcbea5ce44d2a30c08e63" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.66", ] [[package]] @@ -2793,7 +2940,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn", + "syn 2.0.66", "wasm-bindgen-shared", ] @@ -2827,7 +2974,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.66", "wasm-bindgen-backend", "wasm-bindgen-shared", ] diff --git a/Cargo.toml b/Cargo.toml index 245eb48..5b62fa9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,3 +14,4 @@ repository = "https://github.com/senekor/buenzlimarks" models = { path = "./models", package = "buenzlimarks_models" } serde = { version = "1.0", features = ["derive"] } serde_json = "1" +tarpc = "0.34" diff --git a/models/Cargo.toml b/models/Cargo.toml index c5e84d2..235ac7c 100644 --- a/models/Cargo.toml +++ b/models/Cargo.toml @@ -10,4 +10,5 @@ repository.workspace = true serde = { workspace = true } strum = { version = "0.26", features = ["strum_macros"] } strum_macros = "0.26" +tarpc = { workspace = true } uuid = { version = "1.1.2", features = ["v4", "js"] } diff --git a/models/src/lib.rs b/models/src/lib.rs index a985c75..348f873 100644 --- a/models/src/lib.rs +++ b/models/src/lib.rs @@ -13,3 +13,5 @@ pub use page::*; pub use settings::*; pub use user::*; pub use widget::*; + +pub mod rpc; diff --git a/models/src/rpc.rs b/models/src/rpc.rs new file mode 100644 index 0000000..2ea2ca0 --- /dev/null +++ b/models/src/rpc.rs @@ -0,0 +1,4 @@ +#[tarpc::service] +pub trait Rpc { + async fn hello(name: String) -> String; +} diff --git a/server/Cargo.toml b/server/Cargo.toml index 637db63..c5476c8 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -23,6 +23,7 @@ path = "cmd/db_reset.rs" axum = { version = "0.7", features = ["macros"] } axum-extra = { version = "0.9.3", features = ["typed-header"] } clap = { version = "4.3.4", features = ["derive", "env"] } +futures = "0.3.30" hmac = { version = "0.12.1", features = ["std"] } jwt = "0.16.0" mime_guess = "2.0.4" @@ -33,6 +34,7 @@ rust-embed = { version = "8.4.0", features = ["axum"] } serde = { workspace = true } serde_json = { workspace = true } sha2 = "0.10.2" +tarpc = { workspace = true } tokio = { version = "1.26", features = ["full"] } tower-http = { version = "0.5.0", features = [ "fs", diff --git a/server/src/main.rs b/server/src/main.rs index d3c8d35..2b8633b 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -3,10 +3,22 @@ use buenzlimarks_server::{ config::Config, docs::docs_handler, frontend::frontend_handler, router::api_router, }; use clap::Parser; +use futures::StreamExt as _; +use models::rpc::{self, Rpc as _}; +use tarpc::server::Channel as _; use tokio::net::TcpListener; use tower_http::{compression::CompressionLayer, trace::TraceLayer}; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; +#[derive(Clone)] +struct RpcServer; + +impl rpc::Rpc for RpcServer { + async fn hello(self, _context: ::tarpc::context::Context, name: String) -> String { + format!("Hello {name}") + } +} + #[tokio::main] async fn main() { let config = Config::parse(); @@ -16,6 +28,18 @@ async fn main() { .with(tracing_subscriber::fmt::layer()) .init(); + let (client_transport, server_transport) = tarpc::transport::channel::unbounded(); + + let server = tarpc::server::BaseChannel::with_defaults(server_transport); + tokio::spawn( + server + .execute(RpcServer.serve()) + // Handle all requests concurrently. + .for_each(|response| async move { + tokio::spawn(response); + }), + ); + let router = Router::new() .nest( "/api",