Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ clippy:
international_autocomplete_api:
RUST_LOG=trace cargo run --example international_autocomplete_api

international_postal_code_api:
RUST_LOG=trace cargo run --example international_postal_code_api

international_street_api:
RUST_LOG=trace cargo run --example international_street_api

Expand All @@ -50,6 +53,6 @@ us_zipcode_api:
us_enrichment_api:
RUST_LOG=trace cargo run --example us_enrichment_api

examples: international_autocomplete_api international_street_api logger us_autocomplete_pro_api us_extract_api us_reverse_geo_api us_street_api us_zipcode_api
examples: international_autocomplete_api international_postal_code_api international_street_api logger us_autocomplete_pro_api us_extract_api us_reverse_geo_api us_street_api us_zipcode_api

.PHONY: clean test dependencies package examples clippy international_autocomplete_api international_street_api logger us_autocomplete_pro_api us_extract_api us_reverse_geo_api us_street_api us_zipcode_api us_enrichment_api
.PHONY: clean test dependencies package examples clippy international_autocomplete_api international_postal_code_api international_street_api logger us_autocomplete_pro_api us_extract_api us_reverse_geo_api us_street_api us_zipcode_api us_enrichment_api
3 changes: 3 additions & 0 deletions smarty-rust-sdk/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,9 @@ name = "international_street_api"
[[example]]
name = "international_autocomplete_api"

[[example]]
name = "international_postal_code_api"

[[example]]
name = "logger"

Expand Down
38 changes: 38 additions & 0 deletions smarty-rust-sdk/examples/international_postal_code_api.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
extern crate serde_json;
extern crate smarty_rust_sdk;
extern crate tokio;

use smarty_rust_sdk::international_postal_code_api::client::InternationalPostalCodeClient;
use smarty_rust_sdk::international_postal_code_api::lookup::Lookup;
use smarty_rust_sdk::sdk::authentication::SecretKeyCredential;
use smarty_rust_sdk::sdk::options::OptionsBuilder;
use std::error::Error;

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
let lookup = &mut Lookup {
input_id: "ID-8675309".to_string(),
locality: "Sao Paulo".to_string(),
administrative_area: "SP".to_string(),
country: "Brazil".to_string(),
postal_code: "02516".to_string(),
..Default::default()
};

let authentication = SecretKeyCredential::new(
std::env::var("SMARTY_AUTH_ID").expect("Missing SMARTY_AUTH_ID env variable"),
std::env::var("SMARTY_AUTH_TOKEN").expect("Missing SMARTY_AUTH_TOKEN env variable"),
);

let options = OptionsBuilder::new(Some(authentication))
.with_logging()
.build();

let client = InternationalPostalCodeClient::new(options)?;

client.send(lookup).await?;

println!("{}", serde_json::to_string_pretty(&lookup.results)?);

Ok(())
}
18 changes: 18 additions & 0 deletions smarty-rust-sdk/src/international_postal_code_api/candidate.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
use serde::{Deserialize, Serialize};

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct Candidate {
pub input_id: String,
pub administrative_area: String,
pub sub_administrative_area: String,
pub super_administrative_area: String,
pub country_iso_3: String,
pub locality: String,
pub dependent_locality: String,
pub dependent_locality_name: String,
pub double_dependent_locality: String,
#[serde(rename = "postal_code")]
pub postal_code: String,
pub postal_code_extra: String,
}
17 changes: 17 additions & 0 deletions smarty-rust-sdk/src/international_postal_code_api/client.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
use crate::international_postal_code_api::candidate::Candidate;
use crate::international_postal_code_api::lookup::Lookup;
use crate::sdk::client::Client;
use crate::sdk::error::SmartyError;
use crate::sdk::options::Options;
use crate::sdk::send_request;
use reqwest::Method;
use smarty_rust_proc_macro::smarty_api;

#[smarty_api(
api_path = "lookup",
default_url = "https://international-postal-code.api.smarty.com/",
lookup_style(lookup),
lookup_type = "Lookup",
result_type = "Vec<Candidate>"
)]
pub struct InternationalPostalCodeClient;
28 changes: 28 additions & 0 deletions smarty-rust-sdk/src/international_postal_code_api/lookup.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
use crate::international_postal_code_api::candidate::Candidate;
use crate::sdk::has_param;

#[derive(Clone, Debug, PartialEq, Default)]
pub struct Lookup {
pub input_id: String,
pub country: String,
pub locality: String,
pub administrative_area: String,
pub postal_code: String,

pub results: Vec<Candidate>,
}

impl Lookup {
pub(crate) fn into_param_array(self) -> Vec<(String, String)> {
vec![
has_param("input_id".to_string(), self.input_id),
has_param("country".to_string(), self.country),
has_param("locality".to_string(), self.locality),
has_param("administrative_area".to_string(), self.administrative_area),
has_param("postal_code".to_string(), self.postal_code),
]
.into_iter()
.filter_map(std::convert::identity)
.collect()
}
}
79 changes: 79 additions & 0 deletions smarty-rust-sdk/src/international_postal_code_api/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
pub mod candidate;
pub mod client;
pub mod lookup;

#[cfg(test)]
mod tests {
use crate::international_postal_code_api::candidate::Candidate;
use crate::international_postal_code_api::client::InternationalPostalCodeClient;
use crate::international_postal_code_api::lookup::Lookup;
use crate::sdk::options::OptionsBuilder;
use serde_json::from_str;

#[test]
fn client_test() {
let client = InternationalPostalCodeClient::new(OptionsBuilder::new(None).build()).unwrap();

assert_eq!(
client.client.url.to_string(),
"https://international-postal-code.api.smarty.com/lookup".to_string()
);
}

#[test]
fn lookup_test() {
let lookup = Lookup {
input_id: "ID-8675309".to_string(),
locality: "Sao Paulo".to_string(),
administrative_area: "SP".to_string(),
country: "Brazil".to_string(),
postal_code: "02516".to_string(),
..Default::default()
};

let expected_params = vec![
("input_id".to_string(), "ID-8675309".to_string()),
("country".to_string(), "Brazil".to_string()),
("locality".to_string(), "Sao Paulo".to_string()),
("administrative_area".to_string(), "SP".to_string()),
("postal_code".to_string(), "02516".to_string()),
];

assert_eq!(lookup.into_param_array(), expected_params);
}

#[test]
fn candidate_test() {
let payload = r#"[
{
"input_id": "ID-8675309",
"administrative_area": "SP",
"sub_administrative_area": "Greater Sao Paulo",
"super_administrative_area": "Southeast",
"country_iso_3": "BRA",
"locality": "Sao Paulo",
"dependent_locality": "Vila Guilherme",
"dependent_locality_name": "Santana",
"double_dependent_locality": "Zona Norte",
"postal_code": "02516",
"postal_code_extra": "050"
}
]"#;

let candidates: Vec<Candidate> = from_str(payload).expect("Failed to deserialize JSON");
assert_eq!(candidates.len(), 1);

let candidate = &candidates[0];
assert_eq!(candidate.input_id, "ID-8675309");
assert_eq!(candidate.country_iso_3, "BRA");
assert_eq!(candidate.locality, "Sao Paulo");
assert_eq!(candidate.dependent_locality, "Vila Guilherme");
assert_eq!(candidate.dependent_locality_name, "Santana");
assert_eq!(candidate.double_dependent_locality, "Zona Norte");
assert_eq!(candidate.administrative_area, "SP");
assert_eq!(candidate.sub_administrative_area, "Greater Sao Paulo");
assert_eq!(candidate.super_administrative_area, "Southeast");
assert_eq!(candidate.postal_code, "02516");
assert_eq!(candidate.postal_code_extra, "050");
}
}
1 change: 1 addition & 0 deletions smarty-rust-sdk/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
pub mod international_autocomplete_api;
pub mod international_postal_code_api;
pub mod international_street_api;
pub mod sdk;
pub mod us_autocomplete_pro_api;
Expand Down
4 changes: 2 additions & 2 deletions smarty-rust-sdk/src/sdk/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,9 @@ impl Client {
if let Some(auth) = &self.options.authentication {
builder = auth.authenticate(builder);
}

if !self.options.license.is_empty() {
builder = builder.query(&[("license".to_string(), self.options.license.clone())]);
builder = builder.query(&[("license".to_string(), self.options.license.clone())]);
}

for (header_key, header_value) in self.options.headers.clone() {
Expand Down