/*
* Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
*/
import * as z from "zod/v4-mini";
import { remap as remap$ } from "../../lib/primitives.js";
import { safeParse } from "../../lib/schemas.js";
import { Result as SafeParseResult } from "../../types/fp.js";
import { SDKValidationError } from "../errors/sdkvalidationerror.js";
/**
* Address represents the address as retrieved from the database
*/
export type AddressCompleteCreateRequest = {
/**
* **required for purchase**
*
* @remarks
* First and Last Name of the addressee
*/
name: string;
/**
* Company Name
*/
company?: string | undefined;
/**
* **required for purchase**
*
* @remarks
* First street line. Usually street number and street name (except for DHL Germany, see street_no).
*/
street1: string;
/**
* Second street line.
*/
street2?: string | undefined;
/**
* Third street line.
*
* @remarks
* Only accepted for USPS international shipments, UPS domestic and UPS international shipments.
*/
street3?: string | undefined;
/**
* Street number of the addressed building.
*
* @remarks
* This field can be included in street1 for all carriers except for DHL Germany.
*/
streetNo?: string | undefined;
/**
* **required for purchase**
*
* @remarks
* Name of a city. When creating a Quote Address, sending a city is optional but will yield more accurate Rates.
* Please bear in mind that city names may be ambiguous (there are 34 Springfields in the US). Pass in a state
* or a ZIP code (see below), if known, it will yield more accurate results.
*/
city: string;
/**
* **required for purchase for some countries**
*
* @remarks
* State/Province values are required for shipments from/to the US, AU, and CA. UPS requires province for some
* countries (i.e Ireland). To receive more accurate quotes, passing this field is recommended. Most carriers
* only accept two or three character state abbreviations.
*/
state: string;
/**
* **required for purchase**
*
* @remarks
* Postal code of an Address. When creating a Quote Addresses, sending a ZIP is optional but will yield more
* accurate Rates.
*/
zip: string;
/**
* ISO 3166-1 alpha-2 country codes and country names can be used. For most consistent results, we recommend using country codes like `US` or `DE`.
*
* @remarks
* If using country names, please ensure they are spelled correctly and in English. Country names are converted to country codes.
* Refer to this guide for a list of country codes.
* Sending a country is always required.
*/
country: string;
/**
* Addresses containing a phone number allow carriers to call the recipient when delivering the Parcel. This
*
* @remarks
* increases the probability of delivery and helps to avoid accessorial charges after a Parcel has been shipped.
*/
phone?: string | undefined;
/**
* E-mail address of the contact person, RFC3696/5321-compliant.
*/
email?: string | undefined;
isResidential?: boolean | undefined;
/**
* A string of up to 100 characters that can be filled with any additional information you want
*
* @remarks
* to attach to the object.
*/
metadata?: string | undefined;
validate?: boolean | undefined;
};
/** @internal */
export const AddressCompleteCreateRequest$inboundSchema: z.ZodMiniType<
AddressCompleteCreateRequest,
unknown
> = z.pipe(
z.object({
name: z.string(),
company: z.optional(z.string()),
street1: z.string(),
street2: z.optional(z.string()),
street3: z.optional(z.string()),
street_no: z.optional(z.string()),
city: z.string(),
state: z.string(),
zip: z.string(),
country: z.string(),
phone: z.optional(z.string()),
email: z.optional(z.string()),
is_residential: z.optional(z.boolean()),
metadata: z.optional(z.string()),
validate: z.optional(z.boolean()),
}),
z.transform((v) => {
return remap$(v, {
"street_no": "streetNo",
"is_residential": "isResidential",
});
}),
);
/** @internal */
export type AddressCompleteCreateRequest$Outbound = {
name: string;
company?: string | undefined;
street1: string;
street2?: string | undefined;
street3?: string | undefined;
street_no?: string | undefined;
city: string;
state: string;
zip: string;
country: string;
phone?: string | undefined;
email?: string | undefined;
is_residential?: boolean | undefined;
metadata?: string | undefined;
validate?: boolean | undefined;
};
/** @internal */
export const AddressCompleteCreateRequest$outboundSchema: z.ZodMiniType<
AddressCompleteCreateRequest$Outbound,
AddressCompleteCreateRequest
> = z.pipe(
z.object({
name: z.string(),
company: z.optional(z.string()),
street1: z.string(),
street2: z.optional(z.string()),
street3: z.optional(z.string()),
streetNo: z.optional(z.string()),
city: z.string(),
state: z.string(),
zip: z.string(),
country: z.string(),
phone: z.optional(z.string()),
email: z.optional(z.string()),
isResidential: z.optional(z.boolean()),
metadata: z.optional(z.string()),
validate: z.optional(z.boolean()),
}),
z.transform((v) => {
return remap$(v, {
streetNo: "street_no",
isResidential: "is_residential",
});
}),
);
export function addressCompleteCreateRequestToJSON(
addressCompleteCreateRequest: AddressCompleteCreateRequest,
): string {
return JSON.stringify(
AddressCompleteCreateRequest$outboundSchema.parse(
addressCompleteCreateRequest,
),
);
}
export function addressCompleteCreateRequestFromJSON(
jsonString: string,
): SafeParseResult {
return safeParse(
jsonString,
(x) => AddressCompleteCreateRequest$inboundSchema.parse(JSON.parse(x)),
`Failed to parse 'AddressCompleteCreateRequest' from JSON`,
);
}