Rust
Rust
UPS Address Validation (City, State, Zip)
See more HTTP Misc Examples
Demonstrates making a call to the UPS address validation REST API.Chilkat Rust Downloads
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
let http = chilkat::Http::new();
// This is the testing endpoint for address validation:
let url = "https://wwwcie.ups.com/rest/AV".to_string();
// Send an HTTP request with the following JSON body:
// {
// "AccessRequest": {
// "AccessLicenseNumber": "Your Access License Number",
// "UserId": "Your Username",
// "Password": "Your Password"
// },
// "AddressValidationRequest": {
// "Request": {
// "TransactionReference": {
// "CustomerContext": "Your Customer Context"
// },
// "RequestAction": "AV"
// },
// "Address": {
// "City": "ALPHARETTA",
// "StateProvinceCode": "GA",
// "PostalCode": "30005"
// }
// }
// }
// Build the above JSON.
let json = chilkat::JsonObject::new();
let _ = json.update_string("AccessRequest.AccessLicenseNumber", "UPS_ACCESS_KEY");
let _ = json.update_string("AccessRequest.UserId", "UPS_USERNAME");
let _ = json.update_string("AccessRequest.Password", "UPS_PASSWORD");
let _ = json.update_string("AddressValidationRequest.Request.TransactionReference.CustomerContext", "Your Customer Context");
let _ = json.update_string("AddressValidationRequest.Request.RequestAction", "AV");
let _ = json.update_string("AddressValidationRequest.Address.City", "ALPHARETTA");
// We're making an intentional mistake here by passing CA instead of GA.
let _ = json.update_string("AddressValidationRequest.Address.StateProvinceCode", "CA");
let _ = json.update_string("AddressValidationRequest.Address.PostalCode", "30005");
let sb = chilkat::StringBuilder::new();
let resp = chilkat::HttpResponse::new();
if http.http_json("POST", &url, &json, "application/json", &resp).is_err() {
println!("{}", http.last_error_text());
return;
}
println!("status = {}", resp.status_code());
// A 200 response status indicate success.
if resp.status_code() != 200 {
println!("{}", resp.body_str());
println!("Failed.");
return;
}
let _ = json.load(&resp.body_str());
json.set_emit_compact(false);
println!("{}", json.emit().unwrap_or_default());
// A successful exact response looks like this:
// {
// "AddressValidationResponse": {
// "Response": {
// "TransactionReference": {
// "CustomerContext": "Your Customer Context"
// },
// "ResponseStatusCode": "1",
// "ResponseStatusDescription": "Success"
// },
// "AddressValidationResult": {
// "Rank": "1",
// "Quality": "1.0",
// "Address": {
// "City": "ALPHARETTA",
// "StateProvinceCode": "GA"
// },
// "PostalCodeLowEnd": "30005",
// "PostalCodeHighEnd": "30005"
// }
// }
// }
//
// A successful response that was not an exact match provides an array of closest matches, like this:
// {
// "AddressValidationResponse": {
// "Response": {
// "TransactionReference": {
// "CustomerContext": "Your Customer Context"
// "Quality": "0.9875",
// "Address": {
// },
// "ResponseStatusCode": "1",
// "ResponseStatusDescription": "Success"
// },
// "AddressValidationResult": [
// {
// "Rank": "1",
// "City": "ALPHARETTA",
// "StateProvinceCode": "GA"
// },
// "PostalCodeLowEnd": "30005",
// "PostalCodeHighEnd": "30005"
// },
// {
// "Rank": "2",
// "Quality": "0.9750",
// "Address": {
// "City": "ALPHARETTA",
// "StateProvinceCode": "GA"
// },
// "PostalCodeLowEnd": "30004",
// "PostalCodeHighEnd": "30004"
// },
// {
// "Rank": "3",
// "Quality": "0.9750",
// "Address": {
// "City": "ALPHARETTA",
// "StateProvinceCode": "GA"
// },
// "PostalCodeLowEnd": "30009",
// "PostalCodeHighEnd": "30009"
// }
// ]
// }
// }
// Use the online tool at Generate JSON Parsing Code
// to generate JSON parsing code.
let mut status_code = String::new();
let mut postal_code_low_end = String::new();
let mut rank = String::new();
let mut address_city = String::new();
let num_results = json.size_of_array("AddressValidationResponse.AddressValidationResult");
if num_results < 0 {
// Here's parse code for the above JSON exact response:
let _ = json.string_of("AddressValidationResponse.Response.TransactionReference.CustomerContext").unwrap_or_default();
status_code = json.string_of("AddressValidationResponse.Response.ResponseStatusCode").unwrap_or_default();
let _ = json.string_of("AddressValidationResponse.Response.ResponseStatusDescription").unwrap_or_default();
let _ = json.string_of("AddressValidationResponse.AddressValidationResult.Rank").unwrap_or_default();
let _ = json.string_of("AddressValidationResponse.AddressValidationResult.Quality").unwrap_or_default();
let _ = json.string_of("AddressValidationResponse.AddressValidationResult.Address.City").unwrap_or_default();
let _ = json.string_of("AddressValidationResponse.AddressValidationResult.Address.StateProvinceCode").unwrap_or_default();
postal_code_low_end = json.string_of("AddressValidationResponse.AddressValidationResult.PostalCodeLowEnd").unwrap_or_default();
let _ = json.string_of("AddressValidationResponse.AddressValidationResult.PostalCodeHighEnd").unwrap_or_default();
println!("Exact match!");
println!("postal code: {}", postal_code_low_end);
} else {
println!("Non-Exact match.");
let _ = json.string_of("AddressValidationResponse.Response.TransactionReference.CustomerContext").unwrap_or_default();
status_code = json.string_of("AddressValidationResponse.Response.ResponseStatusCode").unwrap_or_default();
let _ = json.string_of("AddressValidationResponse.Response.ResponseStatusDescription").unwrap_or_default();
let mut i = 0;
while i < num_results {
json.set_i(i);
rank = json.string_of("AddressValidationResponse.AddressValidationResult[i].Rank").unwrap_or_default();
println!("rank: {}", rank);
let _ = json.string_of("AddressValidationResponse.AddressValidationResult[i].Quality").unwrap_or_default();
address_city = json.string_of("AddressValidationResponse.AddressValidationResult[i].Address.City").unwrap_or_default();
println!("addressCity: {}", address_city);
let _ = json.string_of("AddressValidationResponse.AddressValidationResult[i].Address.StateProvinceCode").unwrap_or_default();
postal_code_low_end = json.string_of("AddressValidationResponse.AddressValidationResult[i].PostalCodeLowEnd").unwrap_or_default();
println!("postal code: {}", postal_code_low_end);
let _ = json.string_of("AddressValidationResponse.AddressValidationResult[i].PostalCodeHighEnd").unwrap_or_default();
i = i + 1;
}
}