37 lines
608 B
Go
37 lines
608 B
Go
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
|
|
}
|