install rust and template

This commit is contained in:
HaQadosch 2023-11-19 18:12:00 +00:00
parent 166fef2383
commit d321b7e2de
5 changed files with 158 additions and 13 deletions

View File

@ -22,20 +22,20 @@ Checking if the install went ok
#+description: running version and upgrade to confirm install is ok
#+name: confirm install
#+begin_src shell
rustup --version
rustup upgrade
rustup --version
rustup upgrade
#+end_src
#+RESULTS: confirm install
| rustup 1.26.0 (5af9b9484 2023-04-05)
| info: This is the version for the rustup toolchain manager, not the rustc compiler.
| info: The currently active `rustc` version is `rustc 1.74.0 (79e9716c9 2023-11-13)`
| info: syncing channel updates for 'stable-x86_64-unknown-linux-gnu'
| info: checking for self-update
|
| stable-x86_64-unknown-linux-gnu unchanged - rustc 1.74.0 (79e9716c9 2023-11-13)
|
| info: cleaning up downloads & tmp directories
: rustup 1.26.0 (5af9b9484 2023-04-05)
: info: This is the version for the rustup toolchain manager, not the rustc compiler.
: info: The currently active `rustc` version is `rustc 1.74.0 (79e9716c9 2023-11-13)`
: info: syncing channel updates for 'stable-x86_64-unknown-linux-gnu'
: info: checking for self-update
:
: stable-x86_64-unknown-linux-gnu unchanged - rustc 1.74.0 (79e9716c9 2023-11-13)
:
: info: cleaning up downloads & tmp directories
Ensure cargo, the package manager is also installed
@ -45,6 +45,103 @@ Ensure cargo, the package manager is also installed
#+end_src
#+RESULTS: confirm cargo installed
| cargo 1.74.0 (ecb9851af 2023-10-18)
* Rust mode for emacs
: cargo 1.74.0 (ecb9851af 2023-10-18)
** Rust mode for emacs
Woohoo https://github.com/rust-lang/rust-mode
* Install Spin
This has been done already in a previous tut.
#+name: check install spin
#+begin_src shell
spin -V
#+end_src
#+RESULTS: check install spin
: spin 2.0.1 (1d72f1c 2023-11-10)
* Install Templates for Rust
This has also been done in a previous tut.
#+name: check install templates
#+begin_src shell
spin template list
#+end_src
#+RESULTS: check install templates
: +------------------------------------------------------------------------+
: | Name Description |
: +========================================================================+
: | http-c HTTP request handler using C and the Zig toolchain |
: | http-empty HTTP application with no components |
: | http-go HTTP request handler using (Tiny)Go |
: | http-grain HTTP request handler using Grain |
: | http-js HTTP request handler using Javascript |
: | http-php HTTP request handler using PHP |
: | http-rust HTTP request handler using Rust |
: | http-swift HTTP request handler using SwiftWasm |
: | http-ts HTTP request handler using Typescript |
: | http-zig HTTP request handler using Zig |
: | redirect Redirects a HTTP route |
: | redis-go Redis message handler using (Tiny)Go |
: | redis-rust Redis message handler using Rust |
: | static-fileserver Serves static files from an asset directory |
: +------------------------------------------------------------------------+
* Installing Wasm
We need additional tools to support Wasm.
#+description: adding extra tools
#+name: add wasm
#+begin_src shell
rustup target add wasm32-wasi
#+end_src
#+RESULTS: add wasm
: info: downloading component 'rust-std' for 'wasm32-wasi'
: info: installing component 'rust-std' for 'wasm32-wasi'
: 17.7 MiB / 17.7 MiB (100 %) 13.8 MiB/s in 1s ETA: 0s
* Create the first application
We use ~spin new~ and select the rust template ~http-rust~
#+name: spin new http-rust
#+begin_src shell
spin new -t http-rust qstart
#+end_src
#+RESULTS: spin new http-rust
: Description []: a quick hello world
: Description: a quick hello world
: HTTP path [/...]:
: HTTP path: /...
#+description: check the folder structure for Rust app
#+name: tree qstart
#+begin_src shell
tree qstart/
#+end_src
#+RESULTS: tree qstart
: qstart/
: ├── Cargo.toml
: ├── spin.toml
: └── src
: └── lib.rs
:
: 2 directories, 3 files
The manifest file is =spin.toml=
#+begin_src toml
spin_manifest_version = 2
[application]
name = "qstart"
version = "0.1.0"
authors = ["HaQadosch <redacted>"]
description = "a quick hello world"
[[trigger.http]]
route = "/..."
component = "qstart"
[component.qstart]
source = "target/wasm32-wasi/release/qstart.wasm"
allowed_outbound_hosts = []
[component.qstart.build]
command = "cargo build --target wasm32-wasi --release"
watch = ["src/**/*.rs", "Cargo.toml"]
#+end_src

2
qstart/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
target/
.spin/

16
qstart/Cargo.toml Normal file
View File

@ -0,0 +1,16 @@
[package]
name = "qstart"
authors = ["HaQadosch <gittea.h0w2x@passmail.net>"]
description = "a quick hello world"
version = "0.1.0"
edition = "2021"
[lib]
crate-type = [ "cdylib" ]
[dependencies]
anyhow = "1"
http = "0.2"
spin-sdk = { git = "https://github.com/fermyon/spin", tag = "v2.0.1" }
[workspace]

18
qstart/spin.toml Normal file
View File

@ -0,0 +1,18 @@
spin_manifest_version = 2
[application]
name = "qstart"
version = "0.1.0"
authors = ["HaQadosch <gittea.h0w2x@passmail.net>"]
description = "a quick hello world"
[[trigger.http]]
route = "/..."
component = "qstart"
[component.qstart]
source = "target/wasm32-wasi/release/qstart.wasm"
allowed_outbound_hosts = []
[component.qstart.build]
command = "cargo build --target wasm32-wasi --release"
watch = ["src/**/*.rs", "Cargo.toml"]

12
qstart/src/lib.rs Normal file
View File

@ -0,0 +1,12 @@
use spin_sdk::http::{IntoResponse, Request};
use spin_sdk::http_component;
/// A simple Spin HTTP component.
#[http_component]
fn handle_qstart(req: Request) -> anyhow::Result<impl IntoResponse> {
println!("Handling request to {:?}", req.header("spin-full-url"));
Ok(http::Response::builder()
.status(200)
.header("content-type", "text/plain")
.body("Hello, Fermyon")?)
}