{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE OverloadedStrings #-}
module Faker.Provider.Address where
import Config
import Control.Monad.Catch
import Control.Monad.IO.Class
import Data.Map.Strict (Map)
import Data.Monoid ((<>))
import Data.Text (Text)
import Data.Vector (Vector)
import qualified Data.Vector as V
import Data.Yaml
import Faker
import Faker.Internal
import Faker.Provider.Name (nameNameProvider, resolveNameField)
parseAddress :: FromJSON a => FakerSettings -> Value -> Parser a
parseAddress settings (Object obj) = do
en <- obj .: (getLocale settings)
faker <- en .: "faker"
address <- faker .: "address"
pure address
parseAddress settings val = fail $ "expected Object, but got " <> (show val)
parseAddressField ::
(FromJSON a, Monoid a) => FakerSettings -> Text -> Value -> Parser a
parseAddressField settings txt val = do
address <- parseAddress settings val
field <- address .:? txt .!= mempty
pure field
parseUnresolvedAddressField ::
(FromJSON a, Monoid a)
=> FakerSettings
-> Text
-> Value
-> Parser (Unresolved a)
parseUnresolvedAddressField settings txt val = do
address <- parseAddress settings val
field <- address .:? txt .!= mempty
pure $ pure field
parseCityPrefix :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parseCityPrefix settings = parseAddressField settings "city_prefix"
parsePlaceNames :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parsePlaceNames settings = parseAddressField settings "place_names"
placeNamesProvider ::
(MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
placeNamesProvider settings = fetchData settings Address parsePlaceNames
parseCitySuffix :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parseCitySuffix settings = parseAddressField settings "city_suffix"
parseCountry :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parseCountry settings = parseAddressField settings "country"
parseVillage :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parseVillage settings = parseAddressField settings "village"
parseDefaultCountry ::
(FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parseDefaultCountry settings = parseAddressField settings "default_country"
parseCountryByCode ::
(FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parseCountryByCode settings = parseAddressField settings "country_by_code"
parseCountryByName ::
(FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parseCountryByName settings = parseAddressField settings "country_by_name"
parseCountryCode :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parseCountryCode settings = parseAddressField settings "country_code"
parseCountryCodeLong ::
(FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parseCountryCodeLong settings = parseAddressField settings "country_code_long"
parseBuildingNumber ::
(FromJSON a, Monoid a) => FakerSettings -> Value -> Parser (Unresolved a)
parseBuildingNumber settings =
parseUnresolvedAddressField settings "building_number"
parseCityWithState ::
(FromJSON a, Monoid a) => FakerSettings -> Value -> Parser (Unresolved a)
parseCityWithState settings = parseUnresolvedAddressField settings "city_with_state"
cityWithStateProvider ::
(MonadThrow m, MonadIO m) => FakerSettings -> m (Unresolved (Vector Text))
cityWithStateProvider settings = fetchData settings Address parseCityWithState
parseMailBox ::
(FromJSON a, Monoid a) => FakerSettings -> Value -> Parser (Unresolved a)
parseMailBox settings = parseUnresolvedAddressField settings "mail_box"
mailBoxProvider ::
(MonadThrow m, MonadIO m) => FakerSettings -> m (Unresolved (Vector Text))
mailBoxProvider settings = fetchData settings Address parseMailBox
parseCommunityPrefix ::
(FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parseCommunityPrefix settings = parseAddressField settings "community_prefix"
parseCommunitySuffix ::
(FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parseCommunitySuffix settings = parseAddressField settings "community_suffix"
parseCommunity ::
(FromJSON a, Monoid a) => FakerSettings -> Value -> Parser (Unresolved a)
parseCommunity settings = parseUnresolvedAddressField settings "community"
parseCommunity2 :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parseCommunity2 settings = parseAddressField settings "community"
parseStreetSuffix ::
(FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parseStreetSuffix settings = parseAddressField settings "street_suffix"
parseSecondaryAddress ::
(FromJSON a, Monoid a) => FakerSettings -> Value -> Parser (Unresolved a)
parseSecondaryAddress settings =
parseUnresolvedAddressField settings "secondary_address"
parsePostcode ::
(FromJSON a, Monoid a) => FakerSettings -> Value -> Parser (Unresolved a)
parsePostcode settings = parseUnresolvedAddressField settings "postcode"
parsePostcodeByState ::
(FromJSON a, Monoid a) => FakerSettings -> Value -> Parser (Unresolved a)
parsePostcodeByState settings =
parseUnresolvedAddressField settings "postcode_by_state"
parseState :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parseState settings = parseAddressField settings "state"
parseStateAbbr :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parseStateAbbr settings = parseAddressField settings "state_abbr"
parseTimeZone :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parseTimeZone settings = parseAddressField settings "time_zone"
parseCity ::
(FromJSON a, Monoid a) => FakerSettings -> Value -> Parser (Unresolved a)
parseCity settings = parseUnresolvedAddressField settings "city"
parseCity2 :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parseCity2 settings = parseAddressField settings "city"
parseStreetName ::
(FromJSON a, Monoid a) => FakerSettings -> Value -> Parser (Unresolved a)
parseStreetName settings = parseUnresolvedAddressField settings "street_name"
parseStreetAddress ::
(FromJSON a, Monoid a) => FakerSettings -> Value -> Parser (Unresolved a)
parseStreetAddress settings =
parseUnresolvedAddressField settings "street_address"
parseFullAddress ::
(FromJSON a, Monoid a) => FakerSettings -> Value -> Parser (Unresolved a)
parseFullAddress settings = parseUnresolvedAddressField settings "full_address"
countryProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
countryProvider settings = fetchData settings Address parseCountry
defaultCountryProvider ::
(MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
defaultCountryProvider settings = fetchData settings Address parseDefaultCountry
villageProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
villageProvider settings = fetchData settings Address parseVillage
addressCityPrefixProvider ::
(MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
addressCityPrefixProvider settings = fetchData settings Address parseCityPrefix
citySuffixProvider ::
(MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
citySuffixProvider settings = fetchData settings Address parseCitySuffix
countryByCodeProvider ::
(MonadThrow m, MonadIO m) => FakerSettings -> m (Map Text Text)
countryByCodeProvider settings = fetchData settings Address parseCountryByCode
countryByNameProvider ::
(MonadThrow m, MonadIO m) => FakerSettings -> m (Map Text Text)
countryByNameProvider settings = fetchData settings Address parseCountryByName
countryCodeProvider ::
(MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
countryCodeProvider settings = fetchData settings Address parseCountryCode
countryCodeLongProvider ::
(MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
countryCodeLongProvider settings =
fetchData settings Address parseCountryCodeLong
buildingNumberProvider ::
(MonadThrow m, MonadIO m) => FakerSettings -> m (Unresolved (Vector Text))
buildingNumberProvider settings = fetchData settings Address parseBuildingNumber
communityPrefixProvider ::
(MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
communityPrefixProvider settings =
fetchData settings Address parseCommunityPrefix
communitySuffixProvider ::
(MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
communitySuffixProvider settings =
fetchData settings Address parseCommunitySuffix
communityProvider ::
(MonadThrow m, MonadIO m) => FakerSettings -> m (Unresolved (Vector Text))
communityProvider settings = fetchData settings Address parseCommunity
communityProvider2 ::
(MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
communityProvider2 settings = fetchData settings Address parseCommunity2
addressCommunityProvider ::
(MonadThrow m, MonadIO m) => FakerSettings -> m (Unresolved (Vector Text))
addressCommunityProvider = communityProvider
streetSuffixProvider ::
(MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
streetSuffixProvider settings = fetchData settings Address parseStreetSuffix
secondaryAddressProvider ::
(MonadThrow m, MonadIO m) => FakerSettings -> m (Unresolved (Vector Text))
secondaryAddressProvider settings =
fetchData settings Address parseSecondaryAddress
postcodeRegexProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m Regex
postcodeRegexProvider settings = do
let parser :: FakerSettings -> Value -> Parser Text
parser = \settings -> parseAddressField settings "postcode"
val <- fetchDataSingle settings Address parser
pure $ Regex $ V.head val
postcodeProvider ::
(MonadThrow m, MonadIO m) => FakerSettings -> m (Unresolved (Vector Text))
postcodeProvider settings = fetchData settings Address parsePostcode
postcodeByStateProvider ::
(MonadThrow m, MonadIO m)
=> FakerSettings
-> m (Unresolved (Map Text Text))
postcodeByStateProvider settings =
fetchData settings Address parsePostcodeByState
stateProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
stateProvider settings = fetchData settings Address parseState
stateAbbrProvider ::
(MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
stateAbbrProvider settings = fetchData settings Address parseStateAbbr
timeZoneProvider ::
(MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
timeZoneProvider settings = fetchData settings Address parseTimeZone
cityProvider ::
(MonadThrow m, MonadIO m) => FakerSettings -> m (Unresolved (Vector Text))
cityProvider settings = fetchData settings Address parseCity
cityProvider2 :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
cityProvider2 settings = fetchData settings Address parseCity2
streetNameProvider ::
(MonadThrow m, MonadIO m) => FakerSettings -> m (Unresolved (Vector Text))
streetNameProvider settings = fetchData settings Address parseStreetName
streetAddressProvider ::
(MonadThrow m, MonadIO m) => FakerSettings -> m (Unresolved (Vector Text))
streetAddressProvider settings = fetchData settings Address parseStreetAddress
fullAddressProvider ::
(MonadThrow m, MonadIO m) => FakerSettings -> m (Unresolved (Vector Text))
fullAddressProvider settings = fetchData settings Address parseFullAddress
resolveAddressText ::
(MonadIO m, MonadThrow m) => FakerSettings -> Text -> m Text
resolveAddressText = genericResolver' resolveAddressField
resolveAddressField ::
(MonadThrow m, MonadIO m) => FakerSettings -> Text -> m Text
resolveAddressField settings field@"community_suffix" =
cachedRandomVec "address" field communitySuffixProvider settings
resolveAddressField settings field@"community_prefix" =
cachedRandomVec "address" field communityPrefixProvider settings
resolveAddressField settings field@"city_prefix" =
cachedRandomVec "address" field addressCityPrefixProvider settings
resolveAddressField settings field@"first_name" =
resolveNameField settings "first_name"
resolveAddressField settings field@"last_name" =
resolveNameField settings "last_name"
resolveAddressField settings field@"Name.first_name" =
resolveNameField settings "first_name"
resolveAddressField settings field@"Name.name" =
cachedRandomUnresolvedVec
"address"
"name"
nameNameProvider
resolveAddressText
settings
resolveAddressField settings field@"city_suffix" =
cachedRandomVec "address" field citySuffixProvider settings
resolveAddressField settings field@"Name.last_name" =
resolveNameField settings "last_name"
resolveAddressField settings field@"Name.surname" =
resolveNameField settings "surname"
resolveAddressField settings field@"surname" =
resolveNameField settings "surname"
resolveAddressField settings field@"street_suffix" =
cachedRandomVec "address" field streetSuffixProvider settings
resolveAddressField settings field@"building_number" =
cachedRandomUnresolvedVec
"address"
field
buildingNumberProvider
resolveAddressText
settings
resolveAddressField settings field@"street_name" =
cachedRandomUnresolvedVec
"address"
field
streetNameProvider
resolveAddressText
settings
resolveAddressField settings field@"street_address" =
cachedRandomUnresolvedVec
"address"
field
streetAddressProvider
resolveAddressText
settings
resolveAddressField settings field@"city" =
cachedRandomUnresolvedVec
"address"
field
cityProvider
resolveAddressText
settings
resolveAddressField settings field@"state_abbr" =
cachedRandomVec "address" field stateAbbrProvider settings
resolveAddressField settings field@"zip_code" =
cachedRandomUnresolvedVec
"address"
field
postcodeProvider
resolveAddressText
settings
resolveAddressField settings field@"secondary_address" =
cachedRandomUnresolvedVec
"address"
field
secondaryAddressProvider
resolveAddressText
settings
resolveAddressField settings field@"city_name" =
let parser :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parser settings = parseAddressField settings field
provider settings = fetchData settings Address parser
in cachedRandomVec "address" field provider settings
resolveAddressField settings field@"city_names" =
let parser :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parser settings = parseAddressField settings field
provider settings = fetchData settings Address parser
in cachedRandomVec "address" field provider settings
resolveAddressField settings field@"city_root" =
let parser :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parser settings = parseAddressField settings field
provider settings = fetchData settings Address parser
in cachedRandomVec "address" field provider settings
resolveAddressField settings field@"cities" =
let parser :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parser settings = parseAddressField settings field
provider settings = fetchData settings Address parser
in cachedRandomVec "address" field provider settings
resolveAddressField settings field@"municipality" =
let parser :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parser settings = parseAddressField settings field
provider settings = fetchData settings Address parser
in cachedRandomVec "address" field provider settings
resolveAddressField settings field@"street_title" =
let parser :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parser settings = parseAddressField settings field
provider settings = fetchData settings Address parser
in cachedRandomVec "address" field provider settings
resolveAddressField settings field@"state" =
let parser :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parser settings = parseAddressField settings field
provider settings = fetchData settings Address parser
in cachedRandomVec "address" field provider settings
resolveAddressField settings field@"streets" =
let parser :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parser settings = parseAddressField settings field
provider settings = fetchData settings Address parser
in cachedRandomVec "address" field provider settings
resolveAddressField settings field@"country" =
let parser :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parser settings = parseAddressField settings field
provider settings = fetchData settings Address parser
in cachedRandomVec "address" field provider settings
resolveAddressField settings field@"street_prefix" =
let parser :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parser settings = parseAddressField settings field
provider settings = fetchData settings Address parser
in cachedRandomVec "address" field provider settings
resolveAddressField settings field@"street_root" =
let parser :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parser settings = parseAddressField settings field
provider settings = fetchData settings Address parser
in cachedRandomVec "address" field provider settings
resolveAddressField settings field@"common_street_suffix" =
let parser :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parser settings = parseAddressField settings field
provider settings = fetchData settings Address parser
in cachedRandomVec "address" field provider settings
resolveAddressField settings field@"village_prefix" =
let parser :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parser settings = parseAddressField settings field
provider settings = fetchData settings Address parser
in cachedRandomVec "address" field provider settings
resolveAddressField settings field@"village" =
let parser :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parser settings = parseAddressField settings field
provider settings = fetchData settings Address parser
in cachedRandomVec "address" field provider settings
resolveAddressField settings field@"postcode" =
let parser :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parser settings = parseAddressField settings field
provider settings = fetchData settings Address parser
in cachedRandomVec "address" field provider settings
resolveAddressField settings field@"street" =
let parser :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parser settings = parseAddressField settings field
provider settings = fetchData settings Address parser
in cachedRandomVec "address" field provider settings
resolveAddressField settings field@"masculine_street_prefix" =
let parser :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parser settings = parseAddressField settings field
provider settings = fetchData settings Address parser
in cachedRandomVec "address" field provider settings
resolveAddressField settings field@"feminine_street_prefix" =
let parser :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parser settings = parseAddressField settings field
provider settings = fetchData settings Address parser
in cachedRandomVec "address" field provider settings
resolveAddressField settings field@"masculine_street_title" =
let parser :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parser settings = parseAddressField settings field
provider settings = fetchData settings Address parser
in cachedRandomVec "address" field provider settings
resolveAddressField settings field@"feminine_street_title" =
let parser :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parser settings = parseAddressField settings field
provider settings = fetchData settings Address parser
in cachedRandomVec "address" field provider settings
resolveAddressField settings field@"Address.city_name" =
resolveAddressField settings "city_name"
resolveAddressField settings field@"Address.street_title" =
resolveAddressField settings "street_title"
resolveAddressField settings field@"default_country" =
cachedRandomVec "address" field defaultCountryProvider settings
resolveAddressField settings field@"mail_box" =
cachedRandomUnresolvedVec
"address"
field
mailBoxProvider
resolveAddressText
settings
resolveAddressField settings field@"community" =
cachedRandomUnresolvedVec
"address"
field
communityProvider
resolveAddressText
settings
resolveAddressField settings field@"place_names" =
cachedRandomVec "address" field placeNamesProvider settings
resolveAddressField settings field@"landscape_elements" =
let parser :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parser settings = parseAddressField settings field
provider settings = fetchData settings Address parser
in cachedRandomVec "address" field provider settings
resolveAddressField settings field@"colonialism" =
let parser :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parser settings = parseAddressField settings field
provider settings = fetchData settings Address parser
in cachedRandomVec "address" field provider settings
resolveAddressField settings field@"the" =
let parser :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
parser settings = parseAddressField settings field
provider settings = fetchData settings Address parser
in cachedRandomVec "address" field provider settings
resolveAddressField settings str = throwM $ InvalidField "address" str