Подскажите, пожалуйста, как исправить код и есть ли разные решения с точки зрения скорости работы для случаев:
- такой вектор только читают
- вектор читают и изменяют.
use axum::extract::State;
use axum::http::StatusCode;
use axum::routing::{get, post};
use axum::{Json, Router};
use serde::{Deserialize, Serialize};
use std::sync::{Arc, Mutex};
#[derive(Debug, Clone)]
struct AppState {
d: Arc<Mutex<Vec<String>>>,
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let state = AppState {
d: Arc::new(Mutex::new(vec![])),
};
let app = Router::new()
.route("/info", post(create_user))
.route("/list_users", get(list_users))
.with_state(state);
let listener = tokio::net::TcpListener::bind("127.0.0.1:3000")
.await
.unwrap();
axum::serve(listener, app).await.unwrap();
Ok(())
}
#[derive(Deserialize)]
pub struct FromBrowser {
username: String,
}
#[derive(Serialize)]
pub struct User {
username: String,
}
async fn create_user(
State(state): State<AppState>,
Json(payload): Json<FromBrowser>,
) -> (StatusCode, Json<User>) {
// ...
let user = User {
username: payload.username,
};
{
let mut d = state.d.lock().expect("mutex was poisoned");
d.push(user.username.to_owned());
}
println!("state = {:?}", state);
(StatusCode::CREATED, Json(user))
}
async fn list_users(State(state): State<AppState>) -> (StatusCode, Json<Vec<String>>) {
let users = state.d.lock().expect("mutex was poisoned").clone();
(StatusCode::OK, Json(users))
}
(3..4).contains(&b)
3==b
#[derive(Debug, PartialEq, Eq)]
enum DivisionError {
// Example: 42 / 0
DivideByZero,
// Only case for `i64`: `i64::MIN / -1` because the result is `i64::MAX + 1`
IntegerOverflow,
// Example: 5 / 2 = 2.5
NotDivisible,
}
// TODO: Calculate `a` divided by `b` if `a` is evenly divisible by `b`.
// Otherwise, return a suitable error.
fn divide(a: i64, b: i64) -> Result<i64, DivisionError> {
todo!();
}
// TODO: Add the correct return type and complete the function body.
// Desired output: `Ok([1, 11, 1426, 3])`
fn result_with_list() {
let numbers = [27, 297, 38502, 81];
let division_results = numbers.into_iter().map(|n| divide(n, 27));
}
// TODO: Add the correct return type and complete the function body.
// Desired output: `[Ok(1), Ok(11), Ok(1426), Ok(3)]`
fn list_of_results() {
let numbers = [27, 297, 38502, 81];
let division_results = numbers.into_iter().map(|n| divide(n, 27));
}
fn result_with_list() -> Result<Vec<i64>, DivisionError> {
let numbers: [i64; 4] = [27, 297, 38502, 81];
let division_results: Result<Vec<i64>, DivisionError> = numbers
.into_iter()
.map(|n| divide(n, 27))
.collect();
division_results
}
Где находиться идеальный компромисс (текущая версия, текущая версия - 1, текущая версия - 5 и так далее)?
let mut t01 = Duration::MIN;
let mut t02 = Duration::MAX;
if duration> t01 {
t01 = duration; // здесь
}
if duration< t02 {
t02 = duration; // и здесь
}
Комп 6 ядер 12 потоков ничем не нагружен. Если не накосячил с кодом, а так
захватывается периодически ресурс потоков компа, то как такое решить
и получать расхождение в пределах 20%?
fn main() {
let a = "x";
println!("1. {:?}", a); // "x"
let b = format!("{}y", a);
println!("2. {:?}", b); // "xy"
}
fn main() {
let mut s = "x".to_string();
println!("1. {}", s); // "x"
s += "y";
println!("2. {}", s); // "xy"
}