feat: Semester enum

This commit is contained in:
Sebastian Pravda 2023-01-27 23:42:09 +01:00
parent 88febd5e20
commit 4b6098999c
No known key found for this signature in database
GPG key ID: F3BC84F08EFA3F57

View file

@ -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,
} }