smarty_rust_sdk/us_enrichment_api/
geo.rs

1use serde::Deserialize;
2use serde::Serialize;
3use std::fmt::Debug;
4use std::ops::Deref;
5use std::ops::DerefMut;
6
7use super::response::EnrichmentResponse;
8
9#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
10#[serde(default)]
11pub struct GeoReferenceResponse {
12    pub smarty_key: String,
13    pub data_set_name: String,
14    pub data_set_version: String,
15    pub attributes: GeoReferenceAttributes,
16}
17
18impl EnrichmentResponse for GeoReferenceResponse {
19    fn lookup_type() -> &'static str {
20        "geo-reference"
21    }
22}
23
24#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
25#[serde(default)]
26pub struct GeoReference2010Response(pub GeoReferenceResponse);
27
28impl Deref for GeoReference2010Response {
29    type Target = GeoReferenceResponse;
30    fn deref(&self) -> &Self::Target {
31        &self.0
32    }
33}
34
35impl DerefMut for GeoReference2010Response {
36    fn deref_mut(&mut self) -> &mut Self::Target {
37        &mut self.0
38    }
39}
40
41impl EnrichmentResponse for GeoReference2010Response {
42    fn lookup_type() -> &'static str {
43        "geo-reference/2010"
44    }
45}
46
47#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
48#[serde(default)]
49pub struct GeoReference2020Response(pub GeoReferenceResponse);
50
51impl Deref for GeoReference2020Response {
52    type Target = GeoReferenceResponse;
53    fn deref(&self) -> &Self::Target {
54        &self.0
55    }
56}
57
58impl DerefMut for GeoReference2020Response {
59    fn deref_mut(&mut self) -> &mut Self::Target {
60        &mut self.0
61    }
62}
63
64impl EnrichmentResponse for GeoReference2020Response {
65    fn lookup_type() -> &'static str {
66        "geo-reference/2020"
67    }
68}
69
70#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
71#[serde(default)]
72pub struct GeoReferenceAttributes {
73    pub census_block: CensusBlock,
74    pub census_county_division: CensusCountyDivision,
75    pub census_tract: CensusTract,
76    pub core_based_stat_area: CoreBasedStatArea,
77    pub place: Place,
78}
79
80#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
81#[serde(default)]
82pub struct CensusBlock {
83    pub accuracy: String,
84    pub geoid: String,
85}
86
87#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
88#[serde(default)]
89pub struct CensusCountyDivision {
90    pub accuracy: String,
91    pub code: String,
92    pub name: String,
93}
94
95#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
96#[serde(default)]
97pub struct CensusTract {
98    pub code: String,
99}
100
101#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
102#[serde(default)]
103pub struct CoreBasedStatArea {
104    pub code: String,
105    pub name: String,
106}
107
108#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
109#[serde(default)]
110pub struct Place {
111    pub accuracy: String,
112    pub code: String,
113    pub name: String,
114    #[serde(rename = "type")]
115    pub place_type: String,
116}