challenge: -1
This commit is contained in:
parent
5dde7a99f2
commit
ab9040c5d9
4
.gitignore
vendored
4
.gitignore
vendored
@ -18,4 +18,6 @@ Cargo.lock
|
||||
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
||||
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
||||
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
||||
#.idea/
|
||||
#.idea//target
|
||||
.shuttle*
|
||||
Secrets*.toml
|
||||
|
13
Cargo.toml
Normal file
13
Cargo.toml
Normal file
@ -0,0 +1,13 @@
|
||||
[package]
|
||||
name = "itsscb-shuttlings-cch24"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
axum = "0.7.4"
|
||||
shuttle-axum = "0.49.0"
|
||||
shuttle-runtime = "0.49.0"
|
||||
tokio = "1.28.2"
|
||||
|
||||
[dev-dependencies]
|
||||
axum-test = "16.4.0"
|
96
flake.lock
generated
Normal file
96
flake.lock
generated
Normal file
@ -0,0 +1,96 @@
|
||||
{
|
||||
"nodes": {
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1731533236,
|
||||
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1733064805,
|
||||
"narHash": "sha256-7NbtSLfZO0q7MXPl5hzA0sbVJt6pWxxtGWbaVUDDmjs=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "31d66ae40417bb13765b0ad75dd200400e98de84",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixpkgs-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1728538411,
|
||||
"narHash": "sha256-f0SBJz1eZ2yOuKUr5CA9BHULGXVSn6miBuUWdTyhUhU=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "b69de56fac8c2b6f8fd27f2eca01dcda8e0a4221",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixpkgs-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"rust-overlay": "rust-overlay"
|
||||
}
|
||||
},
|
||||
"rust-overlay": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1733106880,
|
||||
"narHash": "sha256-aJmAIjZfWfPSWSExwrYBLRgXVvgF5LP1vaeUGOOIQ98=",
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"rev": "e66c0d43abf5bdefb664c3583ca8994983c332ae",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
51
flake.nix
Normal file
51
flake.nix
Normal file
@ -0,0 +1,51 @@
|
||||
{
|
||||
description = "Example Rust development environment for Zero to Nix";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
||||
rust-overlay.url = "github:oxalica/rust-overlay";
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, rust-overlay, flake-utils, ... }:
|
||||
flake-utils.lib.eachDefaultSystem (system:
|
||||
let
|
||||
overlays = [ (import rust-overlay) ];
|
||||
pkgs = import nixpkgs {
|
||||
inherit system overlays;
|
||||
};
|
||||
rustToolchain = pkgs.rust-bin.nightly.latest.default.override {
|
||||
extensions = [ "rust-src" "rust-analyzer" "clippy" "rustfmt" ];
|
||||
targets = [ "x86_64-unknown-linux-gnu" ];
|
||||
};
|
||||
in
|
||||
{
|
||||
devShells.default = pkgs.mkShell {
|
||||
buildInputs = with pkgs; [
|
||||
rustToolchain
|
||||
clippy
|
||||
|
||||
|
||||
cargo-shuttle
|
||||
cargo-edit
|
||||
cargo-binstall
|
||||
bacon
|
||||
|
||||
openssl
|
||||
pkg-config
|
||||
];
|
||||
|
||||
shellHook = ''
|
||||
export PATH=${rustToolchain}/bin:$PATH
|
||||
export RUSTC_VERSION=$(rustc --version)
|
||||
export RUST_SRC_PATH="${rustToolchain}/lib/rustlib/src/rust/library"
|
||||
export OPENSSL_DIR="${pkgs.openssl.dev}"
|
||||
export OPENSSL_LIB_DIR="${pkgs.openssl.out}/lib"
|
||||
export OPENSSL_INCLUDE_DIR="${pkgs.openssl.dev}/include"
|
||||
'';
|
||||
|
||||
packages = pkgs.lib.optionals pkgs.stdenv.isDarwin (with pkgs; [ libiconv ]);
|
||||
};
|
||||
}
|
||||
);
|
||||
}
|
52
src/lib.rs
Normal file
52
src/lib.rs
Normal file
@ -0,0 +1,52 @@
|
||||
mod routes;
|
||||
|
||||
pub use routes::hello_world;
|
||||
use routes::{hello_bird, minus_one};
|
||||
|
||||
pub fn router() -> axum::Router {
|
||||
use axum::routing::get;
|
||||
use axum::Router;
|
||||
|
||||
Router::new()
|
||||
.route("/hello_world", get(hello_world))
|
||||
.route("/-1/seek", get(minus_one))
|
||||
.route("/", get(hello_bird))
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use super::*;
|
||||
use axum::http::StatusCode;
|
||||
use axum_test::TestServer;
|
||||
|
||||
fn test_server() -> TestServer {
|
||||
TestServer::new(router()).unwrap()
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_hello_world() {
|
||||
let server = test_server();
|
||||
|
||||
let response = server.get("/hello_world").await;
|
||||
response.assert_status_ok();
|
||||
response.assert_text("Hello, world!");
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_hello_bird() {
|
||||
let server = test_server();
|
||||
|
||||
let response = server.get("/").await;
|
||||
response.assert_status_ok();
|
||||
response.assert_text("Hello, bird!");
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_minus_one() {
|
||||
let server = test_server();
|
||||
|
||||
let response = server.get("/-1/seek").await;
|
||||
response.assert_header("location", "https://www.youtube.com/watch?v=9Gc4QTqslN4");
|
||||
response.assert_status(StatusCode::FOUND);
|
||||
}
|
||||
}
|
10
src/main.rs
Normal file
10
src/main.rs
Normal file
@ -0,0 +1,10 @@
|
||||
use axum::{routing::get, Router};
|
||||
use itsscb_shuttlings_cch24::hello_world;
|
||||
|
||||
#[shuttle_runtime::main]
|
||||
#[allow(clippy::unused_async)]
|
||||
async fn main() -> shuttle_axum::ShuttleAxum {
|
||||
let router = Router::new().route("/", get(hello_world));
|
||||
|
||||
Ok(router.into())
|
||||
}
|
4
src/routes/hello_bird.rs
Normal file
4
src/routes/hello_bird.rs
Normal file
@ -0,0 +1,4 @@
|
||||
#![allow(dead_code, clippy::unused_async)]
|
||||
pub async fn hello_bird() -> &'static str {
|
||||
"Hello, bird!"
|
||||
}
|
4
src/routes/hello_world.rs
Normal file
4
src/routes/hello_world.rs
Normal file
@ -0,0 +1,4 @@
|
||||
#![allow(dead_code, clippy::unused_async)]
|
||||
pub async fn hello_world() -> &'static str {
|
||||
"Hello, world!"
|
||||
}
|
15
src/routes/minus_one.rs
Normal file
15
src/routes/minus_one.rs
Normal file
@ -0,0 +1,15 @@
|
||||
#![allow(dead_code, clippy::unused_async)]
|
||||
|
||||
use axum::{
|
||||
http::{header, StatusCode},
|
||||
response::{AppendHeaders, IntoResponse},
|
||||
};
|
||||
pub async fn minus_one() -> impl IntoResponse {
|
||||
(
|
||||
StatusCode::FOUND,
|
||||
AppendHeaders([(
|
||||
header::LOCATION,
|
||||
"https://www.youtube.com/watch?v=9Gc4QTqslN4",
|
||||
)]),
|
||||
)
|
||||
}
|
7
src/routes/mod.rs
Normal file
7
src/routes/mod.rs
Normal file
@ -0,0 +1,7 @@
|
||||
mod hello_bird;
|
||||
mod hello_world;
|
||||
mod minus_one;
|
||||
|
||||
pub use hello_bird::hello_bird;
|
||||
pub use hello_world::hello_world;
|
||||
pub use minus_one::minus_one;
|
Loading…
x
Reference in New Issue
Block a user