mirror of
https://github.com/danbulant/Portfolio
synced 2026-07-06 11:30:44 +00:00
feat: Semester enum
This commit is contained in:
parent
88febd5e20
commit
4b6098999c
1 changed files with 32 additions and 9 deletions
|
|
@ -1,22 +1,45 @@
|
||||||
use serde::{Serialize, Deserialize};
|
use serde::{Serialize, Deserialize};
|
||||||
use validator::{Validate, ValidationError};
|
use validator::{Validate};
|
||||||
|
|
||||||
use crate::error::ServiceError;
|
use crate::error::ServiceError;
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
|
||||||
fn validate_semester(semester: &str) -> Result<(), ValidationError> {
|
pub enum Semester {
|
||||||
match semester {
|
#[serde(rename = "1/8")]
|
||||||
"1/8" | "2/8" | "1/9" | "2/9" => Ok(()),
|
FirstEighth,
|
||||||
_ => Err(ValidationError::new("Invalid semester"))
|
#[serde(rename = "2/8")]
|
||||||
}
|
SecondEighth,
|
||||||
|
#[serde(rename = "1/9")]
|
||||||
|
FirstNinth,
|
||||||
|
#[serde(rename = "2/9")]
|
||||||
|
SecondNinth,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Semester {
|
||||||
|
pub fn from_str(semester: &str) -> Result<Self, ServiceError> {
|
||||||
|
match semester {
|
||||||
|
"1/8" => Ok(Semester::FirstEighth),
|
||||||
|
"2/8" => Ok(Semester::SecondEighth),
|
||||||
|
"1/9" => Ok(Semester::FirstNinth),
|
||||||
|
"2/9" => Ok(Semester::SecondNinth),
|
||||||
|
_ => Err(ServiceError::FormatError)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn as_str(&self) -> &'static str {
|
||||||
|
match self {
|
||||||
|
Semester::FirstEighth => "1/8",
|
||||||
|
Semester::SecondEighth => "2/8",
|
||||||
|
Semester::FirstNinth => "1/9",
|
||||||
|
Semester::SecondNinth => "2/9",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize, Validate, PartialEq, Eq)]
|
#[derive(Debug, Clone, Serialize, Deserialize, Validate, PartialEq, Eq)]
|
||||||
pub struct Grade {
|
pub struct Grade {
|
||||||
#[validate(length(min = 1, max = 255))]
|
#[validate(length(min = 1, max = 255))]
|
||||||
subject: String,
|
subject: String,
|
||||||
#[validate(length(min = 1, max = 255), custom = "validate_semester")]
|
semester: Semester,
|
||||||
semester: String,
|
|
||||||
#[validate(range(min = 1, max = 5))]
|
#[validate(range(min = 1, max = 5))]
|
||||||
value: i32,
|
value: i32,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue