Offline postal address rules, field validation, and formatting for MoonBit
let rule = @moon-postal.builtin_rule("US").unwrap()
let address = @moon-postal.Address::new(
recipient="Ada Lovelace",
address_lines=["12 Example Street"],
locality="Boston",
administrative_area="MA",
postal_code="02108",
country_code="US",
)
let issues = @moon-postal.validate(rule, address)
let label = @moon-postal.format_if_valid(rule, address)let rule = @moon-postal.builtin_rule("US").unwrap().with_area_postal_prefixes([
@moon-postal.AreaPostalPrefix::new("MA", "021"),
@moon-postal.AreaPostalPrefix::new("MA", "022"),
@moon-postal.AreaPostalPrefix::new("NY", "100"),
])
let decision = @moon-postal.assess(rule, address)
let issues = decision.issues()
let printable_lines = decision.label_lines()
let relationship = decision.relationship_status()moon run examples/decision --target nativemoon check --target all
moon test --target all
moon run examples/quickstart --target native
moon run examples/decision --target nativepub struct Address {
recipient : String
organization : String
address_lines : Array[String]
dependent_locality : String
locality : String
administrative_area : String
postal_code : String
country_code : String
}pub struct AddressDecision {
issues : Array[AddressIssue]
label_lines : Array[String]
relationship_status : RelationshipStatus
}pub(all) enum AddressField {
Recipient
Organization
AddressLine
DependentLocality
Locality
AdministrativeArea
PostalCode
Country
} derive(Eq)pub struct AddressRule {
country_code : String
required_fields : Array[AddressField]
postal_pattern : PostalPattern
field_order : Array[AddressField]
combine_region_postal : Bool
area_postal_prefixes : Array[AreaPostalPrefix]
}fn AddressRule::new(country_code : String, required_fields : Array[AddressField], postal_pattern : PostalPattern, field_order : Array[AddressField]) -> AddressRulefn AddressRule::with_area_postal_prefixes(self : AddressRule, relationships : Array[AreaPostalPrefix]) -> AddressRulepub struct AreaPostalPrefix {
area : String
prefix : String
}pub(all) enum IssueCode {
MissingRequiredField
InvalidPostalCode
CountryMismatch
AdministrativeAreaPostalMismatch
UnknownAdministrativeArea
RequiredFieldNotRendered
}pub(all) enum PostalPatternKind {
NoCheck
Digits
DigitsRange
AlphanumericRange
UsZip
CanadaPostal
UkPostcode
JapanPostal
ChinaPostal
}pub(all) enum RelationshipStatus {
NotConfigured
Skipped
UnknownArea
Matched
Mismatched
}Install
Download zipOffline postal address rules, field validation, and formatting for MoonBit