Skip to main content

mapky_app_specs/models/
mod.rs

1pub 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/// A unified enum wrapping all MapkyApp objects.
16#[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    /// Parse a blob into a MapkyAppObject based on the path segment.
28    /// path_segment should be e.g. "reviews", "collections", etc.
29    /// Note: comments at "posts/" use `pubky_app_specs::PubkyAppPost` directly
30    /// and are not represented in this enum.
31    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}