api: add all ingredients resolver
This commit is contained in:
parent
988ef52d05
commit
39808b8bda
|
@ -6,6 +6,9 @@ version = 3
|
||||||
name = "api"
|
name = "api"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"db",
|
||||||
|
"serde",
|
||||||
|
"serde_json",
|
||||||
"tiny_http",
|
"tiny_http",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -123,6 +126,12 @@ dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ryu"
|
||||||
|
version = "1.0.9"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "1.0.137"
|
version = "1.0.137"
|
||||||
|
@ -143,6 +152,17 @@ dependencies = [
|
||||||
"syn",
|
"syn",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_json"
|
||||||
|
version = "1.0.81"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9b7ce2b32a1aed03c558dc61a5cd328f15aff2dbc17daad8fb8af04d2100e15c"
|
||||||
|
dependencies = [
|
||||||
|
"itoa",
|
||||||
|
"ryu",
|
||||||
|
"serde",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "1.0.92"
|
version = "1.0.92"
|
||||||
|
|
|
@ -6,4 +6,7 @@ edition = "2021"
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
db = { version = "0.1.0", path = "../db" }
|
||||||
|
serde = { version = "1.0.137", features = ["derive"] }
|
||||||
|
serde_json = "1.0.81"
|
||||||
tiny_http = "0.11.0"
|
tiny_http = "0.11.0"
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
use super::types;
|
||||||
|
use crate::repo::ingredient::IngredientRepo;
|
||||||
|
|
||||||
|
pub fn execute(repo: impl IngredientRepo) -> Vec<types::Ingredient> {
|
||||||
|
repo.get_ingredients()
|
||||||
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
pub mod fetch_list;
|
||||||
|
pub mod types;
|
|
@ -0,0 +1,12 @@
|
||||||
|
#[derive(Debug, Serialize)]
|
||||||
|
pub struct Ingredient {
|
||||||
|
key: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<&db::data::Ingredient> for Ingredient {
|
||||||
|
fn from(db: &db::data::Ingredient) -> Self {
|
||||||
|
Self {
|
||||||
|
key: db.key.to_string(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
pub mod ingredient;
|
|
@ -1,28 +1,12 @@
|
||||||
use std::sync::Arc;
|
#![deny(clippy::all)]
|
||||||
use std::thread;
|
|
||||||
|
#[macro_use]
|
||||||
|
extern crate serde;
|
||||||
|
|
||||||
|
mod domain;
|
||||||
|
mod repo;
|
||||||
|
mod server;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
start_server();
|
server::start();
|
||||||
}
|
|
||||||
|
|
||||||
fn start_server() {
|
|
||||||
let server = Arc::new(tiny_http::Server::http("0.0.0.0:33333").unwrap());
|
|
||||||
println!("Server listening on port 33333");
|
|
||||||
|
|
||||||
let mut handles = Vec::with_capacity(4);
|
|
||||||
|
|
||||||
for _ in 0..4 {
|
|
||||||
let server = server.clone();
|
|
||||||
|
|
||||||
handles.push(thread::spawn(move || {
|
|
||||||
for rq in server.incoming_requests() {
|
|
||||||
let response = tiny_http::Response::from_string("hello world".to_string());
|
|
||||||
let _ = rq.respond(response);
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
for h in handles {
|
|
||||||
h.join().unwrap();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
use crate::domain::ingredient::types;
|
||||||
|
|
||||||
|
pub trait IngredientRepo {
|
||||||
|
fn get_ingredients(&self) -> Vec<types::Ingredient>;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct StaticIngredientRepo {}
|
||||||
|
|
||||||
|
impl IngredientRepo for StaticIngredientRepo {
|
||||||
|
fn get_ingredients(&self) -> Vec<types::Ingredient> {
|
||||||
|
db::INGREDIENTS.iter().map(From::from).collect::<Vec<_>>()
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
pub mod ingredient;
|
|
@ -0,0 +1,31 @@
|
||||||
|
use std::sync::Arc;
|
||||||
|
use std::thread;
|
||||||
|
|
||||||
|
use crate::domain;
|
||||||
|
use crate::repo::ingredient::StaticIngredientRepo;
|
||||||
|
|
||||||
|
pub fn start() {
|
||||||
|
let server = Arc::new(tiny_http::Server::http("0.0.0.0:33333").unwrap());
|
||||||
|
println!("Server listening on port 33333");
|
||||||
|
|
||||||
|
let mut handles = Vec::with_capacity(4);
|
||||||
|
|
||||||
|
for _ in 0..4 {
|
||||||
|
let server = server.clone();
|
||||||
|
|
||||||
|
handles.push(thread::spawn(move || {
|
||||||
|
for rq in server.incoming_requests() {
|
||||||
|
let repo = StaticIngredientRepo {};
|
||||||
|
let ingredients = domain::ingredient::fetch_list::execute(repo);
|
||||||
|
let data = serde_json::to_string(&ingredients).unwrap();
|
||||||
|
|
||||||
|
let response = tiny_http::Response::from_string(data);
|
||||||
|
let _ = rq.respond(response);
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
for h in handles {
|
||||||
|
h.join().unwrap();
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,3 +1,3 @@
|
||||||
mod data;
|
pub mod data;
|
||||||
|
|
||||||
pub use data::{INGREDIENTS, RECIPES};
|
pub use data::{INGREDIENTS, RECIPES};
|
||||||
|
|
Loading…
Reference in New Issue