mapky_app_specs/models/
mod.rs1pub mod collection;
2pub mod geo_capture;
3pub mod incident;
4pub mod review;
5pub mod route;
6pub mod sequence;
7
8use crate::traits::Validatable;
9
10use super::{
11 MapkyAppCollection, MapkyAppGeoCapture, MapkyAppIncident, MapkyAppReview, MapkyAppRoute,
12 MapkyAppSequence,
13};
14
15#[derive(Debug, Clone)]
17pub enum MapkyAppObject {
18 Review(review::MapkyAppReview),
19 Collection(collection::MapkyAppCollection),
20 Incident(incident::MapkyAppIncident),
21 GeoCapture(geo_capture::MapkyAppGeoCapture),
22 Route(route::MapkyAppRoute),
23 Sequence(sequence::MapkyAppSequence),
24}
25
26impl MapkyAppObject {
27 pub fn from_path(path_segment: &str, blob: &[u8], id: &str) -> Result<Self, String> {
32 match path_segment {
33 "reviews" => {
34 let obj = <MapkyAppReview as Validatable>::try_from(blob, id)?;
35 Ok(MapkyAppObject::Review(obj))
36 }
37 "collections" => {
38 let obj = <MapkyAppCollection as Validatable>::try_from(blob, id)?;
39 Ok(MapkyAppObject::Collection(obj))
40 }
41 "incidents" => {
42 let obj = <MapkyAppIncident as Validatable>::try_from(blob, id)?;
43 Ok(MapkyAppObject::Incident(obj))
44 }
45 "geo_captures" => {
46 let obj = <MapkyAppGeoCapture as Validatable>::try_from(blob, id)?;
47 Ok(MapkyAppObject::GeoCapture(obj))
48 }
49 "routes" => {
50 let obj = <MapkyAppRoute as Validatable>::try_from(blob, id)?;
51 Ok(MapkyAppObject::Route(obj))
52 }
53 "sequences" => {
54 let obj = <MapkyAppSequence as Validatable>::try_from(blob, id)?;
55 Ok(MapkyAppObject::Sequence(obj))
56 }
57 _ => Err(format!("Unrecognized mapky.app resource: {}", path_segment)),
58 }
59 }
60}