assignmentlib/jsonb/
quest_details.rsuse serde::{Deserialize, Serialize};
use uuid::Uuid;
use crate::jsonb::geo_point::GeoPoint;
use crate::jsonb::mark_requirements::MarkRequirements;
use crate::jsonb::team::Team;
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct QuestDetails {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<Uuid>,
#[serde(skip_serializing_if = "Option::is_none")]
pub geo_points: Option<Vec<GeoPoint>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub teams: Option<Vec<Team>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mark_requirements: Option<MarkRequirements>,
#[serde(skip_serializing_if = "Option::is_none")]
pub show_leaderboard: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub leader_boards: Option<Vec<Uuid>>, }
impl QuestDetails {
pub fn normalize(&self) -> QuestDetails {
QuestDetails {
id: Option::from(if self.id.is_none() {
Uuid::new_v4()
} else {
self.id.unwrap()
}),
teams: self.teams.clone(),
mark_requirements: self.mark_requirements.clone(),
leader_boards: self.leader_boards.clone(),
show_leaderboard: self.show_leaderboard.clone(),
geo_points: self.geo_points.clone(),
}
}
}