package libpostal import ( "errors" "sync" ) var ( ErrSettingUp = errors.New("error setting up libpostal") ) type Parser struct { serializer sync.Mutex once sync.Once } func NewParser() (*Parser, error) { if !setup() || !setupParser() { return nil, ErrSettingUp } return new(Parser), nil } func (p *Parser) Parse(addressToParse string, options AddressParserOptions) (Address, error) { p.serializer.Lock() defer p.serializer.Unlock() return parseAddress(addressToParse, options) } func (p *Parser) Close() error { p.once.Do(func() { tearDownParser() tearDown() }) return nil }