httpq/src/main.rs

79 lines
2.1 KiB
Rust

use axum::{error_handling::HandleErrorLayer, routing::get, Router};
use clap::{Arg};
use std::{net::SocketAddr, time::Duration, error::Error, collections::VecDeque, sync::Arc};
use tower::ServiceBuilder;
use http::status::StatusCode;
use dashmap::DashMap;
#[derive(Debug)]
struct DumbQueue<'a> {
queue_map : DashMap<&'a str, usize>,
queues : Vec<VecDeque<&'a str>>,
current_queue : usize,
}
impl <'a> DumbQueue<'a> {
fn new() -> Self {
return DumbQueue {
queue_map: DashMap::new(),
queues: vec!(),
current_queue: 0,
}
}
fn push_back(&mut self, key: &'a str, val: &'a str) {
let val_key = key;
let value = val;
let queue_map = &self.queue_map;
let queue_index = queue_map.get(val_key);
match queue_index {
Some(i) => {
let index : usize = *i;
self.queues[index].push_back(value)
}
None => {
let new_queue = VecDeque::new();
self.queues.push(new_queue);
queue_map.insert(val_key, self.current_queue as usize);
self.queues[self.current_queue].push_back(value);
self.current_queue += 1;
}
}
}
fn pop_front(&mut self, key: &'a str) -> Option<&str> {
let val_key = key;
let queue_map = &self.queue_map;
let queue_index = queue_map.get(val_key);
match queue_index {
Some(i) => {
let index : usize = *i;
return Some(self.queues[index].pop_front().unwrap())
}
None => None
}
}
}
fn main() {
let mut queue = DumbQueue::new();
println!("Push value...");
let _ = queue.push_back(&"/what", "the fuck?");
let _ = queue.push_back(&"/foo", "bar...");
println!("Queue manager thing: {:?}", queue);
println!("Pop value...");
let popped = queue.pop_front("/what");
println!("{:?}", popped);
let _ = queue.push_back(&"/foo", "baz...");
println!("{:?}", queue);
}