1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
use serde::{Deserialize, Serialize};

#[derive(Debug, Copy, Eq, PartialEq, Hash, Clone, Serialize, Deserialize)]
pub enum PlaceDataField {
    // Basic Data
    AddressComponents,
    BusinessStatus,
    FormattedAddress,
    Viewport,
    Location,
    Icon,
    IconMaskBaseUri,
    IconBackgroundColor,
    Name,
    PermanentlyClosed,
    Photo,
    PlaceId,
    PlusCode,
    Type,
    Url,
    UtcOffset,
    Vicinity,
    WheelchairAccessibleEntrance,

    // Contact Data
    FormattedPhoneNumber,
    InternationalPhoneNumber,
    OpeningHours,
    CurrentOpeningHours,
    SecondaryOpeningHours,
    Website,

    // Atmosphere Data
    CurbsidePickup,
    Delivery,
    DineIn,
    EditorialSummary,
    PriceLevel,
    Rating,
    Reservable,
    Reviews,
    ServesBeer,
    ServesBreakfast,
    ServesBrunch,
    ServesDinner,
    ServesLunch,
    ServesVegetarianFood,
    ServesWine,
    Takeout,
    UserRatingsTotal,
}

impl PlaceDataField {
    pub fn as_str(&self) -> &'static str {
        match self {
            PlaceDataField::AddressComponents => "address_components",
            PlaceDataField::BusinessStatus => "business_status",
            PlaceDataField::FormattedAddress => "formatted_address",
            PlaceDataField::Viewport => "geometry/viewport",
            PlaceDataField::Location => "geometry/location",
            PlaceDataField::Icon => "icon",
            PlaceDataField::IconMaskBaseUri => "icon_mask_base_uri",
            PlaceDataField::IconBackgroundColor => "icon_background_color",
            PlaceDataField::Name => "name",
            PlaceDataField::PermanentlyClosed => "permanently_closed",
            PlaceDataField::Photo => "photos",
            PlaceDataField::PlaceId => "place_id",
            PlaceDataField::PlusCode => "plus_code",
            PlaceDataField::Type => "type",
            PlaceDataField::Url => "url",
            PlaceDataField::UtcOffset => "utc_offset",
            PlaceDataField::Vicinity => "vicinity",
            PlaceDataField::WheelchairAccessibleEntrance => "wheelchair_accessible_entrance",
            PlaceDataField::FormattedPhoneNumber => "formatted_phone_number",
            PlaceDataField::InternationalPhoneNumber => "international_phone_number",
            PlaceDataField::OpeningHours => "opening_hours",
            PlaceDataField::CurrentOpeningHours => "current_opening_hours",
            PlaceDataField::SecondaryOpeningHours => "secondary_opening_hours",
            PlaceDataField::Website => "website",
            PlaceDataField::CurbsidePickup => "curbside_pickup",
            PlaceDataField::Delivery => "delivery",
            PlaceDataField::DineIn => "dine_in",
            PlaceDataField::EditorialSummary => "editorial_summary",
            PlaceDataField::PriceLevel => "price_level",
            PlaceDataField::Rating => "rating",
            PlaceDataField::Reservable => "reservable",
            PlaceDataField::Reviews => "reviews",
            PlaceDataField::ServesBeer => "serves_beer",
            PlaceDataField::ServesBreakfast => "serves_breakfast",
            PlaceDataField::ServesBrunch => "serves_brunch",
            PlaceDataField::ServesDinner => "serves_dinner",
            PlaceDataField::ServesLunch => "serves_lunch",
            PlaceDataField::ServesVegetarianFood => "serves_vegetarian_food",
            PlaceDataField::ServesWine => "serves_wine",
            PlaceDataField::Takeout => "takeout",
            PlaceDataField::UserRatingsTotal => "user_ratings_total",
        }
    }
}