feat: create Task struct with fake data
This commit is contained in:
parent
3fe5c4477b
commit
b34dbde83e
45
Cargo.lock
generated
45
Cargo.lock
generated
@ -296,9 +296,13 @@ name = "clego-app"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"axum",
|
"axum",
|
||||||
|
"fake",
|
||||||
"grass",
|
"grass",
|
||||||
"lightningcss",
|
"lightningcss",
|
||||||
"maud",
|
"maud",
|
||||||
|
"rand",
|
||||||
|
"strum",
|
||||||
|
"strum_macros",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tower",
|
"tower",
|
||||||
"tower-http",
|
"tower-http",
|
||||||
@ -423,6 +427,12 @@ dependencies = [
|
|||||||
"matches",
|
"matches",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "deunicode"
|
||||||
|
version = "1.4.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "322ef0094744e63628e6f0eb2295517f79276a5b342a4c2ff3042566ca181d4e"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dtoa"
|
name = "dtoa"
|
||||||
version = "1.0.9"
|
version = "1.0.9"
|
||||||
@ -450,6 +460,16 @@ version = "1.0.1"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
|
checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "fake"
|
||||||
|
version = "2.9.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1c25829bde82205da46e1823b2259db6273379f626fc211f126f65654a2669be"
|
||||||
|
dependencies = [
|
||||||
|
"deunicode",
|
||||||
|
"rand",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fnv"
|
name = "fnv"
|
||||||
version = "1.0.7"
|
version = "1.0.7"
|
||||||
@ -584,6 +604,12 @@ version = "0.14.3"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
|
checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "heck"
|
||||||
|
version = "0.4.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hermit-abi"
|
name = "hermit-abi"
|
||||||
version = "0.3.9"
|
version = "0.3.9"
|
||||||
@ -1445,6 +1471,25 @@ version = "0.11.1"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
|
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "strum"
|
||||||
|
version = "0.26.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "strum_macros"
|
||||||
|
version = "0.26.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c6cf59daf282c0a494ba14fd21610a0325f9f90ec9d1231dea26bcb1d696c946"
|
||||||
|
dependencies = [
|
||||||
|
"heck",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"rustversion",
|
||||||
|
"syn 2.0.60",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "1.0.109"
|
version = "1.0.109"
|
||||||
|
@ -8,7 +8,11 @@ build = "build.rs"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
axum = "0.7.5"
|
axum = "0.7.5"
|
||||||
|
fake = "2.9.2"
|
||||||
maud = { version = "0.26.0", features = ["axum"] }
|
maud = { version = "0.26.0", features = ["axum"] }
|
||||||
|
rand = "0.8.5"
|
||||||
|
strum = "0.26.2"
|
||||||
|
strum_macros = "0.26.2"
|
||||||
tokio = { version = "1.37.0", features = ["full"] }
|
tokio = { version = "1.37.0", features = ["full"] }
|
||||||
tower = "0.4.13"
|
tower = "0.4.13"
|
||||||
tower-http = { version = "0.5.2", features = ["fs"] }
|
tower-http = { version = "0.5.2", features = ["fs"] }
|
||||||
|
@ -5,7 +5,7 @@ use tracing::info;
|
|||||||
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
|
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
|
||||||
|
|
||||||
mod base;
|
mod base;
|
||||||
// mod tasks;
|
mod tasks;
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() {
|
async fn main() {
|
||||||
|
@ -1,61 +1,153 @@
|
|||||||
#[derive(Clone)]
|
use fake::{Fake, Faker};
|
||||||
|
use rand::{distributions::{Distribution, Standard}, Rng};
|
||||||
|
use std::sync::{Mutex, OnceLock};
|
||||||
|
use strum_macros::{self, EnumIter, EnumString};
|
||||||
|
|
||||||
|
#[allow(unused_imports)] // trait into scope
|
||||||
|
use strum::IntoEnumIterator;
|
||||||
|
|
||||||
|
#[derive(Clone, Debug)]
|
||||||
pub struct Task {
|
pub struct Task {
|
||||||
pub id: i32,
|
pub id: i32,
|
||||||
pub label: TaskLabel,
|
pub label: TaskLabel,
|
||||||
pub title: String,
|
pub title: String,
|
||||||
pub status: TaskStatus,
|
pub status: TaskStatus,
|
||||||
|
pub priority: TaskPriority,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone, Debug, EnumString, EnumIter)]
|
||||||
|
#[strum(serialize_all = "snake_case")]
|
||||||
|
pub enum TaskLabel {
|
||||||
|
Bug,
|
||||||
|
Feature,
|
||||||
|
Documentation,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, EnumString, EnumIter)]
|
||||||
|
#[strum(serialize_all = "snake_case")]
|
||||||
|
pub enum TaskStatus {
|
||||||
|
Backlog,
|
||||||
|
Todo,
|
||||||
|
InProgress,
|
||||||
|
Done,
|
||||||
|
Canceled,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, EnumString, EnumIter)]
|
||||||
|
#[strum(serialize_all = "snake_case")]
|
||||||
|
pub enum TaskPriority {
|
||||||
|
Low,
|
||||||
|
Medium,
|
||||||
|
High,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Distribution<TaskLabel> for Standard {
|
||||||
|
fn sample<R: Rng+ ?Sized>(&self, rng: &mut R) -> TaskLabel {
|
||||||
|
match rng.gen_range(0..3) {
|
||||||
|
0 => TaskLabel::Bug,
|
||||||
|
1 => TaskLabel::Feature,
|
||||||
|
_ => TaskLabel::Documentation,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Distribution<TaskStatus> for Standard {
|
||||||
|
fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> TaskStatus {
|
||||||
|
match rng.gen_range(0..5) {
|
||||||
|
0 => TaskStatus::Backlog,
|
||||||
|
1 => TaskStatus::Todo,
|
||||||
|
2 => TaskStatus::InProgress,
|
||||||
|
3 => TaskStatus::Done,
|
||||||
|
_ => TaskStatus::Canceled,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Distribution<TaskPriority> for Standard {
|
||||||
|
fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> TaskPriority {
|
||||||
|
match rng.gen_range(0..3) {
|
||||||
|
0 => TaskPriority::Low,
|
||||||
|
1 => TaskPriority::Medium,
|
||||||
|
_ => TaskPriority::High,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Distribution<Task> for Standard {
|
||||||
|
fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> Task {
|
||||||
|
Task {
|
||||||
|
id: Faker.fake(),
|
||||||
|
label: rng.gen(),
|
||||||
|
title: Faker.fake(),
|
||||||
|
status: rng.gen(),
|
||||||
|
priority: rng.gen(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static TASKS: OnceLock<Mutex<Vec<Task>>> = OnceLock::new();
|
||||||
|
|
||||||
|
pub fn all() -> Vec<Task> {
|
||||||
|
TASKS
|
||||||
|
.get_or_init(|| Mutex::new((0..100).map(|_| rand::random::<Task>()).collect()))
|
||||||
|
.lock()
|
||||||
|
.unwrap()
|
||||||
|
.clone()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn by_id(id: i32) -> Option<Task> {
|
||||||
|
TASKS
|
||||||
|
.get_or_init(|| Mutex::new((0..100).map(|_| rand::random::<Task>()).collect()))
|
||||||
|
.lock()
|
||||||
|
.unwrap()
|
||||||
|
.iter()
|
||||||
|
.find(|task| task.id == id)
|
||||||
|
.cloned()
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
use fake::{Fake, Faker};
|
||||||
|
use rand::Rng;
|
||||||
|
use std::sync::Mutex;
|
||||||
|
use strum_macros::{self, EnumString};
|
||||||
|
use tokio::sync::Mutex;
|
||||||
|
|
||||||
|
#[allow(unused_imports)] // bring trait into scope
|
||||||
|
use strum::EnumProperty;
|
||||||
|
|
||||||
|
#[derive(Clone, Debug)]
|
||||||
|
pub struct Task {
|
||||||
|
pub id: i32,
|
||||||
|
pub label: TaskLabel,
|
||||||
|
pub title: String,
|
||||||
|
pub status: TaskStatus,
|
||||||
|
pub priority: TaskPriority,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, EnumString)]
|
||||||
|
#[strum(serialize_all = "snake_case")]
|
||||||
enum TaskLabel {
|
enum TaskLabel {
|
||||||
Bug,
|
Bug,
|
||||||
Feature,
|
Feature,
|
||||||
Documentation,
|
Documentation,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone, Debug, EnumString)]
|
||||||
|
#[strum(serialize_all = "snake_case")]
|
||||||
enum TaskStatus {
|
enum TaskStatus {
|
||||||
Backlog {},
|
Backlog,
|
||||||
|
Todo,
|
||||||
|
InProgress,
|
||||||
|
Done,
|
||||||
|
Canceled,
|
||||||
|
}
|
||||||
|
#[derive(Clone, Debug, EnumString, strum_macros::EnumProperty)]
|
||||||
|
#[strum(serialize_all = "snake_case")]
|
||||||
|
enum TaskPriority {
|
||||||
|
Low,
|
||||||
|
Medium,
|
||||||
|
High,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TaskStatus {
|
*/
|
||||||
fn new(status: &str) -> Option<Self> {
|
|
||||||
match status {
|
|
||||||
"pending" => Some(TaskStatus::Backlog {
|
|
||||||
icon: "🕒",
|
|
||||||
title: "Backlog",
|
|
||||||
}),
|
|
||||||
"in_progress" => Some(TaskStatus::InProgress {
|
|
||||||
icon: "⚙️",
|
|
||||||
title: "In Progress",
|
|
||||||
}),
|
|
||||||
"completed" => Some(TaskStatus::Completed {
|
|
||||||
icon: "✔️",
|
|
||||||
title: "Completed",
|
|
||||||
}),
|
|
||||||
"failed" => Some(TaskStatus::Failed {
|
|
||||||
icon: "❌",
|
|
||||||
title: "Failed",
|
|
||||||
}),
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn icon(&self) -> &'static str {
|
|
||||||
match self {
|
|
||||||
TaskStatus::Pending { icon, .. } => icon,
|
|
||||||
TaskStatus::InProgress { icon, .. } => icon,
|
|
||||||
TaskStatus::Completed { icon, .. } => icon,
|
|
||||||
TaskStatus::Failed { icon, .. } => icon,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn title(&self) -> &'static str {
|
|
||||||
match self {
|
|
||||||
TaskStatus::Pending { title, .. } => title,
|
|
||||||
TaskStatus::InProgress { title, .. } => title,
|
|
||||||
TaskStatus::Completed { title, .. } => title,
|
|
||||||
TaskStatus::Failed { title, .. } => title,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
1
src/tasks/tasks_controller.rs
Normal file
1
src/tasks/tasks_controller.rs
Normal file
@ -0,0 +1 @@
|
|||||||
|
|
Reference in New Issue
Block a user