package profile import ( "encoding/json" "strings" ) // AddressClaim as described in openid-connect, see https://openid.net/specs/openid-connect-core-1_0.html#AddressClaim type AddressClaim struct { // Full mailing address, formatted for display or use on a mailing label. This field MAY contain multiple lines, separated by newlines Formatted string `json:"formatted,omitempty"` // Full street address component Street string `json:"street_address,omitempty"` // City or locality component Locality string `json:"locality,omitempty"` // State, province, prefecture, or region component Region string `json:"region,omitempty"` // Zip code or postal code component PostalCode string `json:"postal_code,omitempty"` // Country name component Country string `json:"country,omitempty"` } func (ac *AddressClaim) ToMap() map[string]interface{} { var data map[string]interface{} addressClaimBytes, err := json.Marshal(ac) if err != nil { return data } err = json.Unmarshal(addressClaimBytes, &data) if err != nil { return data } return data } func (a Address) ToAddressClaim() *AddressClaim { ac := &AddressClaim{ Street: a.Street, Locality: a.City, Country: a.Country, PostalCode: a.PostalCode, Region: a.State, } ac.Formatted = formatAddress(ac) return ac } func formatAddress(ac *AddressClaim) string { addressLines := make([]string, 0) if ac.Street != "" { addressLines = append(addressLines, ac.Street) } if ac.Locality != "" { addressLines = append(addressLines, ac.Locality) } if ac.Region != "" { addressLines = append(addressLines, ac.Region) } if ac.PostalCode != "" { addressLines = append(addressLines, ac.PostalCode) } if ac.Country != "" { addressLines = append(addressLines, ac.Country) } return strings.Join(addressLines, "\r\n") }