Advertisement
Guest User

Untitled

a guest
Aug 16th, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 4.61 KB | None | 0 0
  1. pub fn validate_address_fedex(
  2.     fedex_settings: FedexSettings,
  3.     va: ValidateFedexAddresses,
  4.     test: bool,
  5. ) -> AddressValidationResult {
  6.     let (c_key, c_pass) = if !test {
  7.         (
  8.             fedex_settings.credential_key,
  9.             fedex_settings.credential_pass,
  10.         )
  11.     } else {
  12.         (
  13.             fedex_settings.test_credential_key,
  14.             fedex_settings.test_credential_pass,
  15.         )
  16.     };
  17.  
  18.     let mut uc = ns2__WebAuthenticationCredential {
  19.         Key: str_as_mut_ptr!(c_key),
  20.         Password: str_as_mut_ptr!(c_pass),
  21.     };
  22.  
  23.     let mut wad = ns2__WebAuthenticationDetail {
  24.         ParentCredential: null_mut_ptr!(ns2__WebAuthenticationCredential),
  25.         UserCredential: item_as_mut_ptr!(uc, ns2__WebAuthenticationCredential),
  26.     };
  27.  
  28.     let (an, mn) = if !test {
  29.         (fedex_settings.accountnumber, fedex_settings.meternumber)
  30.     } else {
  31.         (
  32.             fedex_settings.test_accountnumber,
  33.             fedex_settings.test_meternumber,
  34.         )
  35.     };
  36.  
  37.     let mut cd = ns2__ClientDetail {
  38.         AccountNumber: str_as_mut_ptr!(an),
  39.         MeterNumber: str_as_mut_ptr!(mn),
  40.         IntegratorId: null_mut_ptr!(i8),
  41.         Localization: null_mut_ptr!(ns2__Localization),
  42.     };
  43.  
  44.     let now = Utc::now();
  45.     let mut seconds: i64 = now.timestamp() as i64; // NOTE: diff for windows
  46.  
  47.     let mut td = ns2__TransactionDetail {
  48.         CustomerTransactionId: str_as_mut_ptr!("Address Validation Request"),
  49.         Localization: null_mut_ptr!(ns2__Localization),
  50.     };
  51.  
  52.     let mut v = ns2__VersionId {
  53.         ServiceId: str_as_mut_ptr!("aval"),
  54.         Major: 4 as libc::c_int,
  55.         Intermediate: 0 as libc::c_int,
  56.         Minor: 0 as libc::c_int,
  57.     };
  58.  
  59.     let mut adrs = vec![];
  60.     for address in va.addresses.into_iter() {
  61.         let street_lines_len = address.street_lines.len();
  62.         let mut street_lines = vec![];
  63.  
  64.         for sl in address.street_lines.into_iter() {
  65.             street_lines.push(str_as_mut_ptr!(sl));
  66.         }
  67.  
  68.         let state_or_province_code = match address.state_or_province_code {
  69.             Some(_state_or_province_code) => str_as_mut_ptr!(_state_or_province_code),
  70.             None => str_as_mut_ptr!("".to_owned()),
  71.         };
  72.  
  73.         let urbanization_code = match address.urbanization_code {
  74.             Some(_urbanization_code) => str_as_mut_ptr!(_urbanization_code),
  75.             None => str_as_mut_ptr!("".to_owned()),
  76.         };
  77.  
  78.         let country_name = match address.country_name {
  79.             Some(_country_name) => str_as_mut_ptr!(_country_name),
  80.             None => str_as_mut_ptr!("".to_owned()),
  81.         };
  82.  
  83.         let mut adr = ns2__Address {
  84.             __sizeStreetLines: street_lines_len as libc::c_int,
  85.             StreetLines: street_lines.as_mut_ptr(),
  86.             City: str_as_mut_ptr!(address.city),
  87.             StateOrProvinceCode: state_or_province_code,
  88.             PostalCode: str_as_mut_ptr!(address.postal_code),
  89.             UrbanizationCode: urbanization_code,
  90.             CountryCode: str_as_mut_ptr!(address.country_code),
  91.             CountryName: country_name,
  92.             Residential: null_mut_ptr!(xsd__boolean), // NOTE: some day, if needed
  93.         };
  94.  
  95.         std::mem::forget(street_lines);
  96.  
  97.         adrs.push(ns2__AddressToValidate {
  98.             ClientReferenceId: str_as_mut_ptr!(address.reference_id),
  99.             Contact: null_mut_ptr!(ns2__Contact),
  100.             Address: item_as_mut_ptr!(adr, ns2__Address),
  101.         });
  102.     }
  103.  
  104.     let addrsss_ptr = ptr_mut_array!(adrs, ns2__AddressToValidate);
  105.  
  106.     for i in 0..adrs.len() {
  107.         unsafe { addrsss_ptr.offset(i as isize).write(adrs[i]) };
  108.     }
  109.  
  110.     let mut vr = ns2__AddressValidationRequest {
  111.         WebAuthenticationDetail: item_as_mut_ptr!(wad, ns2__WebAuthenticationDetail),
  112.         ClientDetail: item_as_mut_ptr!(cd, ns2__ClientDetail),
  113.         InEffectAsOfTimestamp: item_as_mut_ptr!(seconds, ::std::os::raw::c_long),
  114.         TransactionDetail: item_as_mut_ptr!(td, ns2__TransactionDetail),
  115.         Version: item_as_mut_ptr!(v, ns2__VersionId),
  116.         __sizeAddressesToValidate: adrs.len() as libc::c_int,
  117.         AddressesToValidate: addrsss_ptr as *mut ns2__AddressToValidate,
  118.     };
  119.  
  120.     let vt_ptr = item_as_mut_ptr!(vr, ns2__AddressValidationRequest);
  121.     std::mem::forget(vr);
  122.  
  123.     let soap = unsafe { create_soap() };
  124.  
  125.     let base_url = if !test {
  126.         fedex_settings.url
  127.     } else {
  128.         fedex_settings.test_url
  129.     };
  130.  
  131.     let output: ns2__AddressValidationReply =
  132.         unsafe { validate_address(soap, CString::new(base_url).unwrap().as_ptr(), vt_ptr) };
  133.     //...
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement