From 0db160a3f5271351d81f1a5566a4d53b602d8d06 Mon Sep 17 00:00:00 2001 From: Tobias Maier Date: Fri, 22 Sep 2023 22:15:16 +0000 Subject: [PATCH] api test --- Cargo.lock | 250 ++++++++++++++++++++++++++++++++++++++++++++++++---- Cargo.toml | 6 +- src/api.rs | 14 +++ src/app.rs | 66 ++++++++++++-- src/main.rs | 30 +------ 5 files changed, 314 insertions(+), 52 deletions(-) create mode 100644 src/api.rs diff --git a/Cargo.lock b/Cargo.lock index 1b64cd2..1e9cf11 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -631,6 +631,22 @@ dependencies = [ "version_check", ] +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" + [[package]] name = "cpufeatures" version = "0.2.9" @@ -792,6 +808,33 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +[[package]] +name = "errno" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd" +dependencies = [ + "errno-dragonfly", + "libc", + "windows-sys", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "fastrand" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764" + [[package]] name = "flate2" version = "1.0.27" @@ -808,6 +851,21 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + [[package]] name = "form_urlencoded" version = "1.2.0" @@ -1096,6 +1154,19 @@ dependencies = [ "want", ] +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper", + "native-tls", + "tokio", + "tokio-native-tls", +] + [[package]] name = "ident_case" version = "1.0.1" @@ -1153,6 +1224,24 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1be380c410bf0595e94992a648ea89db4dd3f3354ba54af206fd2a68cf5ac8e" +[[package]] +name = "iot_frontend" +version = "0.1.0" +dependencies = [ + "actix-files", + "actix-web", + "cfg-if", + "console_error_panic_hook", + "http", + "leptos", + "leptos_actix", + "leptos_meta", + "leptos_router", + "reqwest", + "serde", + "wasm-bindgen", +] + [[package]] name = "ipnet" version = "2.8.0" @@ -1436,22 +1525,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "leptos_start" -version = "0.1.0" -dependencies = [ - "actix-files", - "actix-web", - "cfg-if", - "console_error_panic_hook", - "http", - "leptos", - "leptos_actix", - "leptos_meta", - "leptos_router", - "wasm-bindgen", -] - [[package]] name = "libc" version = "0.2.148" @@ -1474,6 +1547,12 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" +[[package]] +name = "linux-raw-sys" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a9bad9f94746442c783ca431b22403b519cd7fbeed0533fdd6328b2f2212128" + [[package]] name = "local-channel" version = "0.1.4" @@ -1565,6 +1644,24 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "native-tls" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + [[package]] name = "nom" version = "7.1.3" @@ -1620,6 +1717,50 @@ version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +[[package]] +name = "openssl" +version = "0.10.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bac25ee399abb46215765b1cb35bc0212377e58a061560d8b29b024fd0430e7c" +dependencies = [ + "bitflags 2.4.0", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.37", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db4d56a4c0478783083cfafcc42493dd4a981d41669da64b4572a2a089b51b1d" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + [[package]] name = "ordered-multimap" version = "0.4.3" @@ -1983,10 +2124,12 @@ dependencies = [ "http", "http-body", "hyper", + "hyper-tls", "ipnet", "js-sys", "log", "mime", + "native-tls", "once_cell", "percent-encoding", "pin-project-lite", @@ -1994,6 +2137,7 @@ dependencies = [ "serde_json", "serde_urlencoded", "tokio", + "tokio-native-tls", "tower-service", "url", "wasm-bindgen", @@ -2086,6 +2230,19 @@ dependencies = [ "semver", ] +[[package]] +name = "rustix" +version = "0.38.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "747c788e9ce8e92b12cd485c49ddf90723550b654b32508f979b71a7b1ecda4f" +dependencies = [ + "bitflags 2.4.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys", +] + [[package]] name = "ryu" version = "1.0.15" @@ -2101,6 +2258,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "schannel" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" +dependencies = [ + "windows-sys", +] + [[package]] name = "scopeguard" version = "1.2.0" @@ -2113,6 +2279,29 @@ version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" +[[package]] +name = "security-framework" +version = "2.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "self_cell" version = "1.0.1" @@ -2377,6 +2566,19 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" +[[package]] +name = "tempfile" +version = "3.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef" +dependencies = [ + "cfg-if", + "fastrand", + "redox_syscall", + "rustix", + "windows-sys", +] + [[package]] name = "thiserror" version = "1.0.48" @@ -2469,6 +2671,16 @@ dependencies = [ "syn 2.0.37", ] +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + [[package]] name = "tokio-util" version = "0.7.9" @@ -2628,6 +2840,12 @@ dependencies = [ "getrandom", ] +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + [[package]] name = "version_check" version = "0.9.4" diff --git a/Cargo.toml b/Cargo.toml index 0c9d20b..b930cfd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "leptos_start" +name = "iot_frontend" version = "0.1.0" edition = "2021" @@ -17,6 +17,8 @@ leptos_meta = { version = "0.4", features = ["nightly"] } leptos_actix = { version = "0.4", optional = true } leptos_router = { version = "0.4", features = ["nightly"] } wasm-bindgen = "=0.2.87" +reqwest = { version = "0.11.20", features = ["json"] } +serde = "1.0.188" [features] csr = ["leptos/csr", "leptos_meta/csr", "leptos_router/csr"] @@ -40,7 +42,7 @@ panic = "abort" [package.metadata.leptos] # The name used by wasm-bindgen/cargo-leptos for the JS/WASM bundle. Defaults to the crate name -output-name = "leptos_start" +output-name = "iot_frontend" # The site root folder is where cargo-leptos generate all output. WARNING: all content of this folder will be erased on a rebuild. Use it in your server setup. site-root = "target/site" # The site-root relative folder where all compiled output (JS, WASM and CSS) is written diff --git a/src/api.rs b/src/api.rs new file mode 100644 index 0000000..bccc657 --- /dev/null +++ b/src/api.rs @@ -0,0 +1,14 @@ +use reqwest; +use serde::Deserialize; + +#[derive(Debug, Deserialize)] +pub struct Device { + pub id: String, + pub display_name: Option +} + +pub async fn load_devices() -> Result, ()> { + let url = "http://192.168.2.141/device/"; // Replace with actual URL + let response: Vec = reqwest::get(url).await.unwrap().json().await.unwrap(); + Ok(response) +} \ No newline at end of file diff --git a/src/app.rs b/src/app.rs index e58e216..44f6f52 100644 --- a/src/app.rs +++ b/src/app.rs @@ -2,6 +2,7 @@ use leptos::*; use leptos_meta::*; use leptos_router::*; + #[component] pub fn App(cx: Scope) -> impl IntoView { // Provides context that manages stylesheets, titles, meta tags, etc. @@ -10,10 +11,10 @@ pub fn App(cx: Scope) -> impl IntoView { view! { cx, // injects a stylesheet into the document // id=leptos means cargo-leptos will hot-reload this stylesheet - + // sets the document title - + <Title text="IoT things"/> // content for this welcome page <Router> @@ -31,12 +32,19 @@ pub fn App(cx: Scope) -> impl IntoView { #[component] fn HomePage(cx: Scope) -> impl IntoView { // Creates a reactive value to update the button - let (count, set_count) = create_signal(cx, 0); - let on_click = move |_| set_count.update(|count| *count += 1); + // let (count, set_count) = create_signal(cx, 0); + // let on_click = move |_| set_count.update(|count| *count += 1); view! { cx, - <h1>"Welcome to Leptos!"</h1> - <button on:click=on_click>"Click Me: " {count}</button> + <div class="is-center"> <h1>"Welcome to Leptos!"</h1> </div> + <div class="container"> + <div class="row"> + <div class="col-3 card"><LeftBox /> </div> + <div class="col-6"><DeviceBox /> </div> + <div class="col-3 card"><RightBox /> </div> + </div> + </div> + } } @@ -60,4 +68,48 @@ fn NotFound(cx: Scope) -> impl IntoView { view! { cx, <h1>"Not Found"</h1> } -} \ No newline at end of file +} + +#[component] +fn DeviceBox(cx: Scope) -> impl IntoView { + view! { cx, + <table class="striped .col-6"> + <tr><th>Company</th><th>Contact</th><th>Country</th></tr> + </table> + } +} + +#[component] +fn LeftBox(cx: Scope) -> impl IntoView { + view! { cx, + <p> Here be Dragons </p> + } +} + +#[component] +fn RightBox(cx: Scope) -> impl IntoView { + view! { cx, + <p> Here be Informational stuff </p> + } +} + +/// Navbar +#[component] +fn Navbar(cx: Scope) -> impl IntoView { + view! { cx, + <nav class="nav" style="margin-bottom: 50px;"> + <div class="nav-left"> + <a class="brand" href="#">Watermeter</a> + <div class="tabs"> + <a class="active" href="/">Status</a> + <a href="/settings">Settings</a> + <a href="/export">Data export</a> + </div> + </div> + <div class="nav-right"> + <a class="button outline">Button</a> + </div> + </nav> + } +} + diff --git a/src/main.rs b/src/main.rs index 6026e32..c26d187 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,11 +1,13 @@ +mod api; + #[cfg(feature = "ssr")] #[actix_web::main] async fn main() -> std::io::Result<()> { use actix_files::Files; use actix_web::*; + use iot_frontend::app::*; use leptos::*; use leptos_actix::{generate_route_list, LeptosRoutes}; - use leptos_start::app::*; let conf = get_configuration(None).await.unwrap(); let addr = conf.leptos_options.site_addr; @@ -48,29 +50,3 @@ async fn favicon( "{site_root}/favicon.ico" ))?) } - -#[cfg(not(any(feature = "ssr", feature = "csr")))] -pub fn main() { - // no client-side main function - // unless we want this to work with e.g., Trunk for pure client-side testing - // see lib.rs for hydration function instead - // see optional feature `csr` instead -} - -#[cfg(all(not(feature = "ssr"), feature = "csr"))] -pub fn main() { - // a client-side main function is required for using `trunk serve` - // prefer using `cargo leptos serve` instead - // to run: `trunk serve --open --features csr` - use leptos::*; - use leptos_start::app::*; - use wasm_bindgen::prelude::wasm_bindgen; - - console_error_panic_hook::set_once(); - - leptos::mount_to_body(move |cx| { - // note: for testing it may be preferrable to replace this with a - // more specific component, although leptos_router should still work - view! {cx, <App/> } - }); -} \ No newline at end of file