From f52cfba01705309ec126a00b74d9fb8b5f3f4c62 Mon Sep 17 00:00:00 2001 From: Dominic Wong Date: Fri, 1 Oct 2021 14:17:54 +0100 Subject: [PATCH] EV Chargers service (#219) --- clients/go/evchargers/evchargers.go | 238 + clients/go/m3o.go | 3 + clients/ts/evchargers/index.ts | 233 + clients/ts/index.ts | 3 + clients/ts/package.json | 3 +- cmd/clients/example.go | 9 +- evchargers/.gitignore | 2 + evchargers/Dockerfile | 3 + evchargers/Makefile | 28 + evchargers/README.md | 11 + evchargers/examples.json | 643 ++ evchargers/generate.go | 2 + evchargers/handler/data.go | 100 + evchargers/handler/data_test.go | 55 + evchargers/handler/evchargers.go | 438 + evchargers/handler/test-reference.json | 9251 +++++++++++++++++ evchargers/handler/test.json | 389 + evchargers/handler/types.go | 157 + evchargers/main.go | 25 + evchargers/micro.mu | 1 + evchargers/proto/evchargers.pb.go | 2355 +++++ evchargers/proto/evchargers.pb.micro.go | 110 + evchargers/proto/evchargers.proto | 228 + evchargers/publicapi.json | 5 + .../referenceData/curl/getReferenceData.sh | 4 + .../referenceData/go/getReferenceData.go | 14 + .../referenceData/node/getReferenceData.js | 12 + .../search/curl/searchByBoundingBox.sh | 16 + .../search/curl/searchByLocation.sh | 11 + .../curl/searchWithFiltersFastChargersOnly.sh | 14 + .../search/go/searchByBoundingBox.go | 16 + .../evchargers/search/go/searchByLocation.go | 20 + .../go/searchWithFiltersFastChargersOnly.go | 21 + .../search/node/searchByBoundingBox.js | 24 + .../search/node/searchByLocation.js | 19 + .../node/searchWithFiltersFastChargersOnly.js | 20 + go.mod | 2 + go.sum | 102 + 38 files changed, 14584 insertions(+), 3 deletions(-) create mode 100755 clients/go/evchargers/evchargers.go create mode 100755 clients/ts/evchargers/index.ts create mode 100644 evchargers/.gitignore create mode 100644 evchargers/Dockerfile create mode 100644 evchargers/Makefile create mode 100644 evchargers/README.md create mode 100644 evchargers/examples.json create mode 100644 evchargers/generate.go create mode 100644 evchargers/handler/data.go create mode 100644 evchargers/handler/data_test.go create mode 100644 evchargers/handler/evchargers.go create mode 100644 evchargers/handler/test-reference.json create mode 100644 evchargers/handler/test.json create mode 100644 evchargers/handler/types.go create mode 100644 evchargers/main.go create mode 100644 evchargers/micro.mu create mode 100644 evchargers/proto/evchargers.pb.go create mode 100644 evchargers/proto/evchargers.pb.micro.go create mode 100644 evchargers/proto/evchargers.proto create mode 100644 evchargers/publicapi.json create mode 100755 examples/evchargers/referenceData/curl/getReferenceData.sh create mode 100755 examples/evchargers/referenceData/go/getReferenceData.go create mode 100755 examples/evchargers/referenceData/node/getReferenceData.js create mode 100755 examples/evchargers/search/curl/searchByBoundingBox.sh create mode 100755 examples/evchargers/search/curl/searchByLocation.sh create mode 100755 examples/evchargers/search/curl/searchWithFiltersFastChargersOnly.sh create mode 100755 examples/evchargers/search/go/searchByBoundingBox.go create mode 100755 examples/evchargers/search/go/searchByLocation.go create mode 100755 examples/evchargers/search/go/searchWithFiltersFastChargersOnly.go create mode 100755 examples/evchargers/search/node/searchByBoundingBox.js create mode 100755 examples/evchargers/search/node/searchByLocation.js create mode 100755 examples/evchargers/search/node/searchWithFiltersFastChargersOnly.js diff --git a/clients/go/evchargers/evchargers.go b/clients/go/evchargers/evchargers.go new file mode 100755 index 0000000..8a9980d --- /dev/null +++ b/clients/go/evchargers/evchargers.go @@ -0,0 +1,238 @@ +package evchargers + +import ( + "github.com/m3o/m3o-go/client" +) + +func NewEvchargersService(token string) *EvchargersService { + return &EvchargersService{ + client: client.NewClient(&client.Options{ + Token: token, + }), + } +} + +type EvchargersService struct { + client *client.Client +} + +// Retrieve reference data as used by this API +func (t *EvchargersService) ReferenceData(request *ReferenceDataRequest) (*ReferenceDataResponse, error) { + rsp := &ReferenceDataResponse{} + return rsp, t.client.Call("evchargers", "ReferenceData", request, rsp) +} + +// Search by giving a coordinate and a max distance, or bounding box and optional filters +func (t *EvchargersService) Search(request *SearchRequest) (*SearchResponse, error) { + rsp := &SearchResponse{} + return rsp, t.client.Call("evchargers", "Search", request, rsp) +} + +type Address struct { + // Any comments about how to access the charger + AccessComments string `json:"accessComments"` + AddressLine1 string `json:"addressLine1"` + AddressLine2 string `json:"addressLine2"` + Country *Country `json:"country"` + CountryId string `json:"countryId"` + Location *Coordinates `json:"location"` + Postcode string `json:"postcode"` + StateOrProvince string `json:"stateOrProvince"` + Title string `json:"title"` + Town string `json:"town"` +} + +type BoundingBox struct { + BottomLeft *Coordinates `json:"bottomLeft"` + TopRight *Coordinates `json:"topRight"` +} + +type ChargerType struct { + Comments string `json:"comments"` + Id string `json:"id"` + // Is this 40KW+ + IsFastChargeCapable bool `json:"isFastChargeCapable"` + Title string `json:"title"` +} + +type CheckinStatusType struct { + Id string `json:"id"` + IsAutomated bool `json:"isAutomated"` + IsPositive bool `json:"isPositive"` + Title string `json:"title"` +} + +type Connection struct { + // The amps offered + Amps float64 `json:"amps"` + ConnectionType *ConnectionType `json:"connectionType"` + // The ID of the connection type + ConnectionTypeId string `json:"connectionTypeId"` + // The current + Current string `json:"current"` + // The level of charging power available + Level string `json:"level"` + // The power in KW + Power float64 `json:"power"` + Reference string `json:"reference"` + // The voltage offered + Voltage float64 `json:"voltage"` +} + +type ConnectionType struct { + FormalName string `json:"formalName"` + Id string `json:"id"` + IsDiscontinued bool `json:"isDiscontinued"` + IsObsolete bool `json:"isObsolete"` + Title string `json:"title"` +} + +type Coordinates struct { + Latitude float64 `json:"latitude"` + Longitude float64 `json:"longitude"` +} + +type Country struct { + ContinentCode string `json:"continentCode"` + Id string `json:"id"` + IsoCode string `json:"isoCode"` + Title string `json:"title"` +} + +type CurrentType struct { + Description string `json:"description"` + Id string `json:"id"` + Title string `json:"title"` +} + +type DataProvider struct { + Comments string `json:"comments"` + DataProviderStatusType *DataProviderStatusType `json:"dataProviderStatusType"` + Id string `json:"id"` + // How is this data licensed + License string `json:"license"` + Title string `json:"title"` + Website string `json:"website"` +} + +type DataProviderStatusType struct { + Id string `json:"id"` + IsProviderEnabled bool `json:"isProviderEnabled"` + Title string `json:"title"` +} + +type Operator struct { + Comments string `json:"comments"` + ContactEmail string `json:"contactEmail"` + FaultReportEmail string `json:"faultReportEmail"` + Id string `json:"id"` + // Is this operator a private individual vs a company + IsPrivateIndividual bool `json:"isPrivateIndividual"` + PhonePrimary string `json:"phonePrimary"` + PhoneSecondary string `json:"phoneSecondary"` + Title string `json:"title"` + Website string `json:"website"` +} + +type Poi struct { + // The address + Address *Address `json:"address"` + // The connections available at this charge point + Connections []Connection `json:"connections"` + // The cost of charging + Cost string `json:"cost"` + // The ID of the data provider + DataProviderId string `json:"dataProviderId"` + // The ID of the charger + Id string `json:"id"` + // The number of charging points + NumPoints int64 `json:"numPoints,string"` + // The operator + Operator *Operator `json:"operator"` + // The ID of the operator of the charger + OperatorId string `json:"operatorId"` + // The type of usage + UsageType *UsageType `json:"usageType"` + // The type of usage for this charger point (is it public, membership required, etc) + UsageTypeId string `json:"usageTypeId"` +} + +type ReferenceDataRequest struct { +} + +type ReferenceDataResponse struct { + // The types of charger + ChargerTypes *ChargerType `json:"chargerTypes"` + // The types of checkin status + CheckinStatusTypes *CheckinStatusType `json:"checkinStatusTypes"` + // The types of connection + ConnectionTypes *ConnectionType `json:"connectionTypes"` + // The countries + Countries []Country `json:"countries"` + // The types of current + CurrentTypes *CurrentType `json:"currentTypes"` + // The providers of the charger data + DataProviders *DataProvider `json:"dataProviders"` + // The companies operating the chargers + Operators []Operator `json:"operators"` + // The status of the charger + StatusTypes *StatusType `json:"statusTypes"` + // The status of a submission + SubmissionStatusTypes *SubmissionStatusType `json:"submissionStatusTypes"` + // The different types of usage + UsageTypes *UsageType `json:"usageTypes"` + // The types of user comment + UserCommentTypes *UserCommentType `json:"userCommentTypes"` +} + +type SearchRequest struct { + // Bounding box to search within (top left and bottom right coordinates) + Box *BoundingBox `json:"box"` + // IDs of the connection type + ConnectionTypes string `json:"connectionTypes"` + // Country ID + CountryId string `json:"countryId"` + // Search distance from point in metres, defaults to 5000m + Distance int64 `json:"distance,string"` + // Supported charging levels + Levels []string `json:"levels"` + // Coordinates from which to begin search + Location *Coordinates `json:"location"` + // Maximum number of results to return, defaults to 100 + MaxResults int64 `json:"maxResults,string"` + // Minimum power in KW. Note: data not available for many chargers + MinPower int64 `json:"minPower,string"` + // IDs of the the EV charger operator + Operators []string `json:"operators"` + // Usage of the charge point (is it public, membership required, etc) + UsageTypes string `json:"usageTypes"` +} + +type SearchResponse struct { + Pois []Poi `json:"pois"` +} + +type StatusType struct { + Id string `json:"id"` + IsOperational bool `json:"isOperational"` + Title string `json:"title"` +} + +type SubmissionStatusType struct { + Id string `json:"id"` + IsLive bool `json:"isLive"` + Title string `json:"title"` +} + +type UsageType struct { + Id string `json:"id"` + IsAccessKeyRequired bool `json:"isAccessKeyRequired"` + IsMembershipRequired bool `json:"isMembershipRequired"` + IsPayAtLocation bool `json:"isPayAtLocation"` + Title string `json:"title"` +} + +type UserCommentType struct { + Id string `json:"id"` + Title string `json:"title"` +} diff --git a/clients/go/m3o.go b/clients/go/m3o.go index 12be1d7..d41131e 100755 --- a/clients/go/m3o.go +++ b/clients/go/m3o.go @@ -9,6 +9,7 @@ import ( "github.com/micro/services/clients/go/db" "github.com/micro/services/clients/go/email" "github.com/micro/services/clients/go/emoji" + "github.com/micro/services/clients/go/evchargers" "github.com/micro/services/clients/go/file" "github.com/micro/services/clients/go/forex" "github.com/micro/services/clients/go/geocoding" @@ -51,6 +52,7 @@ func NewClient(token string) *Client { DbService: db.NewDbService(token), EmailService: email.NewEmailService(token), EmojiService: emoji.NewEmojiService(token), + EvchargersService: evchargers.NewEvchargersService(token), FileService: file.NewFileService(token), ForexService: forex.NewForexService(token), GeocodingService: geocoding.NewGeocodingService(token), @@ -93,6 +95,7 @@ type Client struct { DbService *db.DbService EmailService *email.EmailService EmojiService *emoji.EmojiService + EvchargersService *evchargers.EvchargersService FileService *file.FileService ForexService *forex.ForexService GeocodingService *geocoding.GeocodingService diff --git a/clients/ts/evchargers/index.ts b/clients/ts/evchargers/index.ts new file mode 100755 index 0000000..ecdfc3d --- /dev/null +++ b/clients/ts/evchargers/index.ts @@ -0,0 +1,233 @@ +import * as m3o from "@m3o/m3o-node"; + +export class EvchargersService { + private client: m3o.Client; + + constructor(token: string) { + this.client = new m3o.Client({ token: token }); + } + // Retrieve reference data as used by this API + referenceData(request: ReferenceDataRequest): Promise { + return this.client.call( + "evchargers", + "ReferenceData", + request + ) as Promise; + } + // Search by giving a coordinate and a max distance, or bounding box and optional filters + search(request: SearchRequest): Promise { + return this.client.call( + "evchargers", + "Search", + request + ) as Promise; + } +} + +export interface Address { + // Any comments about how to access the charger + accessComments?: string; + addressLine1?: string; + addressLine2?: string; + country?: { [key: string]: any }; + countryId?: string; + location?: Coordinates; + postcode?: string; + stateOrProvince?: string; + title?: string; + town?: string; +} + +export interface BoundingBox { + bottomLeft?: Coordinates; + topRight?: Coordinates; +} + +export interface ChargerType { + comments?: string; + id?: string; + // Is this 40KW+ + isFastChargeCapable?: boolean; + title?: string; +} + +export interface CheckinStatusType { + id?: string; + isAutomated?: boolean; + isPositive?: boolean; + title?: string; +} + +export interface Connection { + // The amps offered + amps?: number; + connectionType?: ConnectionType; + // The ID of the connection type + connectionTypeId?: string; + // The current + current?: string; + // The level of charging power available + level?: string; + // The power in KW + power?: number; + reference?: string; + // The voltage offered + voltage?: number; +} + +export interface ConnectionType { + formalName?: string; + id?: string; + isDiscontinued?: boolean; + isObsolete?: boolean; + title?: string; +} + +export interface Coordinates { + latitude?: number; + longitude?: number; +} + +export interface Country { + continentCode?: string; + id?: string; + isoCode?: string; + title?: string; +} + +export interface CurrentType { + description?: string; + id?: string; + title?: string; +} + +export interface DataProvider { + comments?: string; + dataProviderStatusType?: DataProviderStatusType; + id?: string; + // How is this data licensed + license?: string; + title?: string; + website?: string; +} + +export interface DataProviderStatusType { + id?: string; + isProviderEnabled?: boolean; + title?: string; +} + +export interface Operator { + comments?: string; + contactEmail?: string; + faultReportEmail?: string; + id?: string; + // Is this operator a private individual vs a company + isPrivateIndividual?: boolean; + phonePrimary?: string; + phoneSecondary?: string; + title?: string; + website?: string; +} + +export interface Poi { + // The address + address?: { [key: string]: any }; + // The connections available at this charge point + connections?: Connection[]; + // The cost of charging + cost?: string; + // The ID of the data provider + dataProviderId?: string; + // The ID of the charger + id?: string; + // The number of charging points + numPoints?: number; + // The operator + operator?: { [key: string]: any }; + // The ID of the operator of the charger + operatorId?: string; + // The type of usage + usageType?: UsageType; + // The type of usage for this charger point (is it public, membership required, etc) + usageTypeId?: string; +} + +export interface ReferenceDataRequest {} + +export interface ReferenceDataResponse { + // The types of charger + chargerTypes?: ChargerType; + // The types of checkin status + checkinStatusTypes?: CheckinStatusType; + // The types of connection + connectionTypes?: ConnectionType; + // The countries + countries?: Country[]; + // The types of current + currentTypes?: CurrentType; + // The providers of the charger data + dataProviders?: DataProvider; + // The companies operating the chargers + operators?: Operator[]; + // The status of the charger + statusTypes?: StatusType; + // The status of a submission + submissionStatusTypes?: SubmissionStatusType; + // The different types of usage + usageTypes?: UsageType; + // The types of user comment + userCommentTypes?: UserCommentType; +} + +export interface SearchRequest { + // Bounding box to search within (top left and bottom right coordinates) + box?: BoundingBox; + // IDs of the connection type + connectionTypes?: string; + // Country ID + countryId?: string; + // Search distance from point in metres, defaults to 5000m + distance?: number; + // Supported charging levels + levels?: string[]; + // Coordinates from which to begin search + location?: Coordinates; + // Maximum number of results to return, defaults to 100 + maxResults?: number; + // Minimum power in KW. Note: data not available for many chargers + minPower?: number; + // IDs of the the EV charger operator + operators?: string[]; + // Usage of the charge point (is it public, membership required, etc) + usageTypes?: string; +} + +export interface SearchResponse { + pois?: Poi[]; +} + +export interface StatusType { + id?: string; + isOperational?: boolean; + title?: string; +} + +export interface SubmissionStatusType { + id?: string; + isLive?: boolean; + title?: string; +} + +export interface UsageType { + id?: string; + isAccessKeyRequired?: boolean; + isMembershipRequired?: boolean; + isPayAtLocation?: boolean; + title?: string; +} + +export interface UserCommentType { + id?: string; + title?: string; +} diff --git a/clients/ts/index.ts b/clients/ts/index.ts index 2f5ee6c..8b0af10 100755 --- a/clients/ts/index.ts +++ b/clients/ts/index.ts @@ -6,6 +6,7 @@ import * as currency from "./currency"; import * as db from "./db"; import * as email from "./email"; import * as emoji from "./emoji"; +import * as evchargers from "./evchargers"; import * as file from "./file"; import * as forex from "./forex"; import * as geocoding from "./geocoding"; @@ -45,6 +46,7 @@ export class Client { this.dbService = new db.DbService(token); this.emailService = new email.EmailService(token); this.emojiService = new emoji.EmojiService(token); + this.evchargersService = new evchargers.EvchargersService(token); this.fileService = new file.FileService(token); this.forexService = new forex.ForexService(token); this.geocodingService = new geocoding.GeocodingService(token); @@ -83,6 +85,7 @@ export class Client { dbService: db.DbService; emailService: email.EmailService; emojiService: emoji.EmojiService; + evchargersService: evchargers.EvchargersService; fileService: file.FileService; forexService: forex.ForexService; geocodingService: geocoding.GeocodingService; diff --git a/clients/ts/package.json b/clients/ts/package.json index 0f64f52..315e85a 100644 --- a/clients/ts/package.json +++ b/clients/ts/package.json @@ -17,6 +17,7 @@ "./db": "./dist/db/index.js", "./email": "./dist/email/index.js", "./emoji": "./dist/emoji/index.js", + "./evchargers": "./dist/evchargers/index.js", "./file": "./dist/file/index.js", "./forex": "./dist/forex/index.js", "./geocoding": "./dist/geocoding/index.js", @@ -62,5 +63,5 @@ }, "type": "module", "types": "dist/index.d.ts", - "version": "1.0.531" + "version": "1.0.532" } \ No newline at end of file diff --git a/cmd/clients/example.go b/cmd/clients/example.go index a46dbdd..6ee174a 100644 --- a/cmd/clients/example.go +++ b/cmd/clients/example.go @@ -140,7 +140,6 @@ func schemaToGoExample(serviceName, typeName string, schemas map[string]*openapi continue } } - switch v.Value.Type { case "object": typ, found := detectType(k, v.Value.Properties) @@ -162,9 +161,15 @@ func schemaToGoExample(serviceName, typeName string, schemas map[string]*openapi if found { ret += k + fieldSeparator + arrayPrefix + serviceName + "." + strings.Title(typ) + objectOpen + serviceName + "." + strings.Title(typ) + objectOpen + recurse(v.Value.Items.Value.Properties, append(append(path, k), "[0]")) + objectClose + objectClose + arrayPostfix + fieldDelimiter } else { + arrint := val.([]interface{}) switch v.Value.Items.Value.Type { case "string": - ret += k + fieldSeparator + arrayPrefix + fmt.Sprintf("\"%v\"", val) + arrayPostfix + fieldDelimiter + arrstr := make([]string, len(arrint)) + for i, v := range arrint { + arrstr[i] = fmt.Sprintf("%v", v) + } + + ret += k + fieldSeparator + fmt.Sprintf("%#v", arrstr) + fieldDelimiter case "number", "boolean": ret += k + fieldSeparator + arrayPrefix + fmt.Sprintf("%v", val) + arrayPostfix + fieldDelimiter case "object": diff --git a/evchargers/.gitignore b/evchargers/.gitignore new file mode 100644 index 0000000..8215dc5 --- /dev/null +++ b/evchargers/.gitignore @@ -0,0 +1,2 @@ + +evchargers diff --git a/evchargers/Dockerfile b/evchargers/Dockerfile new file mode 100644 index 0000000..da93be7 --- /dev/null +++ b/evchargers/Dockerfile @@ -0,0 +1,3 @@ +FROM alpine +ADD evchargers /evchargers +ENTRYPOINT [ "/evchargers" ] diff --git a/evchargers/Makefile b/evchargers/Makefile new file mode 100644 index 0000000..6512a4f --- /dev/null +++ b/evchargers/Makefile @@ -0,0 +1,28 @@ + +GOPATH:=$(shell go env GOPATH) +.PHONY: init +init: + go get -u github.com/golang/protobuf/proto + go get -u github.com/golang/protobuf/protoc-gen-go + go get github.com/micro/micro/v3/cmd/protoc-gen-micro + go get github.com/micro/micro/v3/cmd/protoc-gen-openapi + +.PHONY: api +api: + protoc --openapi_out=. --proto_path=. proto/evchargers.proto + +.PHONY: proto +proto: + protoc --proto_path=. --micro_out=. --go_out=:. proto/evchargers.proto + +.PHONY: build +build: + go build -o evchargers *.go + +.PHONY: test +test: + go test -v ./... -cover + +.PHONY: docker +docker: + docker build . -t evchargers:latest diff --git a/evchargers/README.md b/evchargers/README.md new file mode 100644 index 0000000..1d74ab2 --- /dev/null +++ b/evchargers/README.md @@ -0,0 +1,11 @@ +Find electric vehicle (EV) chargers wherever you go + +# EV Chargers Service + +This is the E(lectric) V(ehicle) chargers API. Search for EV chargers using +- location and distance +- bounding box + +and filter the results based on connection type, operator, and more. + +Powered by https://openchargemap.org/ diff --git a/evchargers/examples.json b/evchargers/examples.json new file mode 100644 index 0000000..b6c8c6f --- /dev/null +++ b/evchargers/examples.json @@ -0,0 +1,643 @@ +{ + "search": [ + { + "title": "Search by location", + "run_check": true, + "request": { + "location": { + "latitude": 51.53336351319885, + "longitude": -0.0252 + }, + "distance": 2000, + "max_results": 2 + }, + "response": { + "pois": [ + { + "id": "121442", + "data_provider_id": "1", + "operator_id": "25", + "usage_type_id": "4", + "address": { + "location": { + "latitude": 51.539715, + "longitude": -0.02769 + }, + "title": "St Marks Gate", + "address_line_1": "Opposite 1 St Marks Gate", + "address_line_2": "", + "town": "London", + "state_or_province": "", + "access_comments": "", + "postcode": "E9 5HT", + "country_id": "1", + "country": { + "id": "1", + "title": "United Kingdom", + "iso_code": "GB", + "continent_code": "EU" + } + }, + "connections": [ + { + "connection_type_id": "1", + "reference": "", + "level": "2", + "amps": 16, + "voltage": 230, + "power": 4, + "current": "10", + "connection_type": { + "id": "1", + "title": "Type 1 (J1772)", + "formal_name": "SAE J1772-2009", + "is_discontinued": false, + "is_obsolete": false + } + }, + { + "connection_type_id": "25", + "reference": "", + "level": "2", + "amps": 32, + "voltage": 230, + "power": 7, + "current": "10", + "connection_type": { + "id": "25", + "title": "Type 2 (Socket Only)", + "formal_name": "IEC 62196-2 Type 2", + "is_discontinued": false, + "is_obsolete": false + } + }, + { + "connection_type_id": "1", + "reference": "", + "level": "2", + "amps": 16, + "voltage": 230, + "power": 4, + "current": "10", + "connection_type": { + "id": "1", + "title": "Type 1 (J1772)", + "formal_name": "SAE J1772-2009", + "is_discontinued": false, + "is_obsolete": false + } + }, + { + "connection_type_id": "25", + "reference": "", + "level": "2", + "amps": 32, + "voltage": 230, + "power": 7, + "current": "10", + "connection_type": { + "id": "25", + "title": "Type 2 (Socket Only)", + "formal_name": "IEC 62196-2 Type 2", + "is_discontinued": false, + "is_obsolete": false + } + }, + { + "connection_type_id": "1", + "reference": "", + "level": "2", + "amps": 16, + "voltage": 230, + "power": 4, + "current": "10", + "connection_type": { + "id": "1", + "title": "Type 1 (J1772)", + "formal_name": "SAE J1772-2009", + "is_discontinued": false, + "is_obsolete": false + } + }, + { + "connection_type_id": "25", + "reference": "", + "level": "2", + "amps": 32, + "voltage": 230, + "power": 7, + "current": "10", + "connection_type": { + "id": "25", + "title": "Type 2 (Socket Only)", + "formal_name": "IEC 62196-2 Type 2", + "is_discontinued": false, + "is_obsolete": false + } + } + ], + "num_points": "3", + "cost": "£0.059/minute; min £1.18; other tariffs available", + "operator": { + "id": "25", + "title": "Source London", + "website": "http://www.sourcelondon.net/", + "comments": "Monthly post-payment membership system, with per-minute billing and optional lower tariffs in return for monthly subscription payment.", + "is_private_individual": false, + "contact_email": "membership@sourcelondon.net", + "phone_primary": "", + "phone_secondary": "", + "fault_report_email": "membership@sourcelondon.net" + }, + "usage_type": { + "id": "4", + "title": "Public - Membership Required", + "is_pay_at_location": false, + "is_membership_required": true, + "is_access_key_required": true + } + }, + { + "id": "189330", + "data_provider_id": "1", + "operator_id": "3296", + "usage_type_id": "5", + "address": { + "location": { + "latitude": 51.529694, + "longitude": -0.015285153 + }, + "title": "McDonald's Bow", + "address_line_1": "4 Payne Road", + "address_line_2": "", + "town": "London", + "state_or_province": "England", + "access_comments": "", + "postcode": "E3 2SP", + "country_id": "1", + "country": { + "id": "1", + "title": "United Kingdom", + "iso_code": "GB", + "continent_code": "EU" + } + }, + "connections": [ + { + "connection_type_id": "33", + "reference": "", + "level": "3", + "amps": 0, + "voltage": 0, + "power": 50, + "current": "30", + "connection_type": { + "id": "33", + "title": "CCS (Type 2)", + "formal_name": "IEC 62196-3 Configuration FF", + "is_discontinued": false, + "is_obsolete": false + } + }, + { + "connection_type_id": "2", + "reference": "", + "level": "3", + "amps": 0, + "voltage": 0, + "power": 50, + "current": "30", + "connection_type": { + "id": "2", + "title": "CHAdeMO", + "formal_name": "IEC 62196-3 Configuration AA", + "is_discontinued": false, + "is_obsolete": false + } + } + ], + "num_points": "2", + "cost": "£0.40/kWh", + "operator": { + "id": "3296", + "title": "InstaVolt Ltd", + "website": "http://instavolt.co.uk/", + "comments": "Pay-as-you-go, charged per kWh, contactless bank card payment.", + "is_private_individual": false, + "contact_email": "", + "phone_primary": "", + "phone_secondary": "", + "fault_report_email": "" + }, + "usage_type": { + "id": "5", + "title": "Public - Pay At Location", + "is_pay_at_location": true, + "is_membership_required": false, + "is_access_key_required": false + } + } + ] + + } + }, + { + "title": "Search by bounding box", + "run_check": true, + "request": { + "box": { + "bottom_left": { + "latitude":51.52627543859447, + "longitude": -0.03635349400295168 + }, + "top_right": { + "latitude": 51.56717121807993, + "longitude":-0.002293530559768285 + } + }, + "max_results": 2 + }, + "response": { + "pois": [ + { + "id": "189330", + "data_provider_id": "1", + "operator_id": "3296", + "usage_type_id": "5", + "address": { + "location": { + "latitude": 51.529694, + "longitude": -0.015285153 + }, + "title": "McDonald's Bow", + "address_line_1": "4 Payne Road", + "address_line_2": "", + "town": "London", + "state_or_province": "England", + "access_comments": "", + "postcode": "E3 2SP", + "country_id": "1", + "country": { + "id": "1", + "title": "United Kingdom", + "iso_code": "GB", + "continent_code": "EU" + } + }, + "connections": [ + { + "connection_type_id": "33", + "reference": "", + "level": "3", + "amps": 0, + "voltage": 0, + "power": 50, + "current": "30", + "connection_type": { + "id": "33", + "title": "CCS (Type 2)", + "formal_name": "IEC 62196-3 Configuration FF", + "is_discontinued": false, + "is_obsolete": false + } + }, + { + "connection_type_id": "2", + "reference": "", + "level": "3", + "amps": 0, + "voltage": 0, + "power": 50, + "current": "30", + "connection_type": { + "id": "2", + "title": "CHAdeMO", + "formal_name": "IEC 62196-3 Configuration AA", + "is_discontinued": false, + "is_obsolete": false + } + } + ], + "num_points": "2", + "cost": "£0.40/kWh", + "operator": { + "id": "3296", + "title": "InstaVolt Ltd", + "website": "http://instavolt.co.uk/", + "comments": "Pay-as-you-go, charged per kWh, contactless bank card payment.", + "is_private_individual": false, + "contact_email": "", + "phone_primary": "", + "phone_secondary": "", + "fault_report_email": "" + }, + "usage_type": { + "id": "5", + "title": "Public - Pay At Location", + "is_pay_at_location": true, + "is_membership_required": false, + "is_access_key_required": false + } + }, + { + "id": "187765", + "data_provider_id": "18", + "operator_id": "3", + "usage_type_id": "1", + "address": { + "location": { + "latitude": 51.529995, + "longitude": -0.009934 + }, + "title": "Hunt's Lane", + "address_line_1": "Hunt's Lane", + "address_line_2": "", + "town": "London", + "state_or_province": "", + "access_comments": "", + "postcode": "E15 2QD", + "country_id": "1", + "country": { + "id": "1", + "title": "United Kingdom", + "iso_code": "GB", + "continent_code": "EU" + } + }, + "connections": [ + { + "connection_type_id": "25", + "reference": "0", + "level": "2", + "amps": 32, + "voltage": 230, + "power": 7, + "current": "10", + "connection_type": { + "id": "25", + "title": "Type 2 (Socket Only)", + "formal_name": "IEC 62196-2 Type 2", + "is_discontinued": false, + "is_obsolete": false + } + } + ], + "num_points": "0", + "cost": "", + "operator": { + "id": "3", + "title": "POD Point (UK)", + "website": "http://www.pod-point.com/", + "comments": "Part of Groupe EDF", + "is_private_individual": false, + "contact_email": "enquiries@pod-point.com", + "phone_primary": "020 7247 4114", + "phone_secondary": "", + "fault_report_email": "enquiries@pod-point.com" + }, + "usage_type": { + "id": "1", + "title": "Public", + "is_pay_at_location": false, + "is_membership_required": false, + "is_access_key_required": false + } + } + ] + } + }, + { + "title": "Search with filters. Fast chargers only", + "run_check": true, + "request": { + "location": { + "latitude": 51.53336351319885, + "longitude": -0.0252 + }, + "distance": 2000, + "max_results": 2, + "levels": [ + "3" + ] + }, + "response": { + "pois": [ + { + "id": "189330", + "data_provider_id": "1", + "operator_id": "3296", + "usage_type_id": "5", + "address": { + "location": { + "latitude": 51.529694, + "longitude": -0.015285153 + }, + "title": "McDonald's Bow", + "address_line_1": "4 Payne Road", + "address_line_2": "", + "town": "London", + "state_or_province": "England", + "access_comments": "", + "postcode": "E3 2SP", + "country_id": "1", + "country": { + "id": "1", + "title": "United Kingdom", + "iso_code": "GB", + "continent_code": "EU" + } + }, + "connections": [ + { + "connection_type_id": "33", + "reference": "", + "level": "3", + "amps": 0, + "voltage": 0, + "power": 50, + "current": "30", + "connection_type": { + "id": "33", + "title": "CCS (Type 2)", + "formal_name": "IEC 62196-3 Configuration FF", + "is_discontinued": false, + "is_obsolete": false + } + }, + { + "connection_type_id": "2", + "reference": "", + "level": "3", + "amps": 0, + "voltage": 0, + "power": 50, + "current": "30", + "connection_type": { + "id": "2", + "title": "CHAdeMO", + "formal_name": "IEC 62196-3 Configuration AA", + "is_discontinued": false, + "is_obsolete": false + } + } + ], + "num_points": "2", + "cost": "£0.40/kWh", + "operator": { + "id": "3296", + "title": "InstaVolt Ltd", + "website": "http://instavolt.co.uk/", + "comments": "Pay-as-you-go, charged per kWh, contactless bank card payment.", + "is_private_individual": false, + "contact_email": "", + "phone_primary": "", + "phone_secondary": "", + "fault_report_email": "" + }, + "usage_type": { + "id": "5", + "title": "Public - Pay At Location", + "is_pay_at_location": true, + "is_membership_required": false, + "is_access_key_required": false + } + }, + { + "id": "127251", + "data_provider_id": "1", + "operator_id": "32", + "usage_type_id": "4", + "address": { + "location": { + "latitude": 51.543983, + "longitude": -0.01991 + }, + "title": "Queen Elizabeth Olympic Park", + "address_line_1": "Queen Elizabeth Olympic Park", + "address_line_2": "", + "town": "Copper Box Car Park", + "state_or_province": "London", + "access_comments": "", + "postcode": "E20 2ST", + "country_id": "1", + "country": { + "id": "1", + "title": "United Kingdom", + "iso_code": "GB", + "continent_code": "EU" + } + }, + "connections": [ + { + "connection_type_id": "25", + "reference": "", + "level": "2", + "amps": 32, + "voltage": 400, + "power": 22, + "current": "20", + "connection_type": { + "id": "25", + "title": "Type 2 (Socket Only)", + "formal_name": "IEC 62196-2 Type 2", + "is_discontinued": false, + "is_obsolete": false + } + }, + { + "connection_type_id": "2", + "reference": "", + "level": "3", + "amps": 0, + "voltage": 0, + "power": 50, + "current": "30", + "connection_type": { + "id": "2", + "title": "CHAdeMO", + "formal_name": "IEC 62196-3 Configuration AA", + "is_discontinued": false, + "is_obsolete": false + } + }, + { + "connection_type_id": "33", + "reference": "", + "level": "3", + "amps": 0, + "voltage": 0, + "power": 50, + "current": "30", + "connection_type": { + "id": "33", + "title": "CCS (Type 2)", + "formal_name": "IEC 62196-3 Configuration FF", + "is_discontinued": false, + "is_obsolete": false + } + }, + { + "connection_type_id": "1036", + "reference": "", + "level": "3", + "amps": 0, + "voltage": 0, + "power": 43, + "current": "20", + "connection_type": { + "id": "1036", + "title": "Type 2 (Tethered Connector) ", + "formal_name": "IEC 62196-2", + "is_discontinued": false, + "is_obsolete": false + } + } + ], + "num_points": "2", + "cost": "Inclusive; for Polar Plus subscription members only", + "operator": { + "id": "32", + "title": "BP Pulse", + "website": "https://www.bppulse.co.uk/", + "comments": "Formerly known as Polar Network, or BP Chargemaster", + "is_private_individual": false, + "contact_email": "polarenquiries@chargemasterplc.com", + "phone_primary": "01582 400331", + "phone_secondary": "", + "fault_report_email": "polarenquiries@chargemasterplc.com" + }, + "usage_type": { + "id": "4", + "title": "Public - Membership Required", + "is_pay_at_location": false, + "is_membership_required": true, + "is_access_key_required": true + } + } + ] + } + } + ], + "referenceData": [ + { + "title": "Get reference data", + "run_check": true, + "request": { + }, + "response": { + "charger_types": [], + "connection_types": [], + "current_types": [], + "countries": [], + "data_providers": [], + "operators": [], + "status_types": [], + "submission_status_types": [], + "usage_types": [], + "usage_types": [], + "user_comment_types": [], + "checkin_status_types": [] + } + } + ] +} diff --git a/evchargers/generate.go b/evchargers/generate.go new file mode 100644 index 0000000..96f431a --- /dev/null +++ b/evchargers/generate.go @@ -0,0 +1,2 @@ +package main +//go:generate make proto diff --git a/evchargers/handler/data.go b/evchargers/handler/data.go new file mode 100644 index 0000000..cf4630a --- /dev/null +++ b/evchargers/handler/data.go @@ -0,0 +1,100 @@ +package handler + +import ( + "context" + "encoding/json" + "fmt" + "io" + "net/http" + "time" + + "github.com/micro/micro/v3/service/logger" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/mongo/options" +) + +func (e *Evchargers) loadPOIData(r io.Reader) (int, error) { + logger.Infof("Loading reference data") + dec := json.NewDecoder(r) + t, err := dec.Token() + if err != nil { + return 0, err + } + d, ok := t.(json.Delim) + if !ok || d.String() != "[" { + return 0, fmt.Errorf("unexpected token %v %+v", ok, t) + } + ctx := context.Background() + count := 0 + for dec.More() { + // process each item in json array and insert into mongodb + var p Poi + if err := dec.Decode(&p); err != nil { + return 0, fmt.Errorf("error unmarshalling charger %s", err) + } + if len(p.SpatialPosition.Type) == 0 { + // blank so reconstruct + p.SpatialPosition.Type = "Point" + // long, lat not lat, long + p.SpatialPosition.Coordinates = []float64{p.Address.Longitude, p.Address.Latitude} + } + + t := true + _, err := e.mdb.Database("ocm").Collection("poi").ReplaceOne(ctx, bson.D{bson.E{"ID", p.ID}}, p, &options.ReplaceOptions{Upsert: &t}) + if err != nil { + return 0, err + } + count++ + } + return count, nil + +} + +func (e *Evchargers) loadRefData(r io.Reader) error { + dec := json.NewDecoder(r) + var rd ReferenceData + if err := dec.Decode(&rd); err != nil { + return err + } + ctx := context.Background() + t := true + _, err := e.mdb.Database("ocm").Collection("reference").ReplaceOne(ctx, bson.D{bson.E{"_id", 1}}, rd, &options.ReplaceOptions{Upsert: &t}) + if err != nil { + return err + } + + return nil +} + +func (e *Evchargers) refreshDataFromSource() { + start := time.Now() + logger.Infof("Refreshing data") + logger.Infof("Retrieving poi data") + rsp, err := http.Get(fmt.Sprintf("https://api.openchargemap.io/v3/poi/?output=json&key=%s&maxresults=10000000", e.conf.OCMKey)) + if err != nil { + logger.Errorf("Error refreshing data %s", err) + return + } + defer rsp.Body.Close() + c, err := e.loadPOIData(rsp.Body) + if err != nil { + logger.Errorf("Error loading data %s", err) + return + } + logger.Infof("Updated %v items of POI data. Took %s", c, time.Since(start)) + + start = time.Now() + logger.Infof("Retrieving ref data") + rsp2, err := http.Get(fmt.Sprintf("https://api.openchargemap.io/v3/referencedata/?output=json&key=%s", e.conf.OCMKey)) + if err != nil { + logger.Errorf("Error refreshing reference data %s", err) + return + } + defer rsp2.Body.Close() + if err := e.loadRefData(rsp2.Body); err != nil { + logger.Errorf("Error loading reference data %s", err) + return + } + logger.Infof("Updated ref data. Took %s", time.Since(start)) + +} diff --git a/evchargers/handler/data_test.go b/evchargers/handler/data_test.go new file mode 100644 index 0000000..2993201 --- /dev/null +++ b/evchargers/handler/data_test.go @@ -0,0 +1,55 @@ +package handler + +import ( + "context" + "io" + "os" + "testing" + + "go.mongodb.org/mongo-driver/mongo" + "go.mongodb.org/mongo-driver/mongo/options" +) + +func TestDataLoad(t *testing.T) { + t.SkipNow() + s := Evchargers{} + opts := []*options.ClientOptions{options.Client().ApplyURI("mongodb://127.0.0.1:27017/ocm")} + var err error + s.mdb, err = mongo.Connect(context.Background(), opts...) + if err != nil { + t.Fatalf("Error connecting to mongo %s", err) + } + var r io.Reader + r, err = os.Open("test.json") + if err != nil { + t.Fatalf("Error opening test data %s", err) + } + c, err := s.loadPOIData(r) + if err != nil { + t.Fatalf("Err loading data %s", err) + } + if c != 2 { + t.Errorf("Incorrect number of records %d", c) + } +} + +func TestRefDataLoad(t *testing.T) { + t.SkipNow() + s := Evchargers{} + opts := []*options.ClientOptions{options.Client().ApplyURI("mongodb://127.0.0.1:27017/ocm")} + var err error + s.mdb, err = mongo.Connect(context.Background(), opts...) + if err != nil { + t.Fatalf("Error connecting to mongo %s", err) + } + var r io.Reader + r, err = os.Open("test-reference.json") + if err != nil { + t.Fatalf("Error opening test data %s", err) + } + err = s.loadRefData(r) + if err != nil { + t.Fatalf("Err loading data %s", err) + } + +} diff --git a/evchargers/handler/evchargers.go b/evchargers/handler/evchargers.go new file mode 100644 index 0000000..5ad8b8a --- /dev/null +++ b/evchargers/handler/evchargers.go @@ -0,0 +1,438 @@ +package handler + +import ( + "context" + "io/ioutil" + "os" + "strconv" + "time" + + "github.com/micro/micro/v3/service/errors" + "github.com/robfig/cron/v3" + + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/mongo" + "go.mongodb.org/mongo-driver/mongo/options" + + "github.com/micro/micro/v3/service/config" + log "github.com/micro/micro/v3/service/logger" + + evchargers "github.com/micro/services/evchargers/proto" +) + +const ( + defaultDistance = int64(5000) // 5km + +) + +var ( + sphereIndexVersion = int32(3) +) + +type Evchargers struct { + conf conf + mdb *mongo.Client +} + +type conf struct { + MongoHost string `json:"mongo_host"` + CaCrt string `json:"ca_crt"` + OCMKey string `json:"ocm_key"` +} + +func New() *Evchargers { + val, err := config.Get("micro.evchargers") + if err != nil { + log.Fatalf("Failed to load config") + } + var conf conf + if err := val.Scan(&conf); err != nil { + log.Fatalf("Failed to load config") + } + if len(conf.MongoHost) == 0 { + log.Fatalf("Missing mongodb host") + } + if len(conf.CaCrt) > 0 { + // write the cert to file + if err := ioutil.WriteFile(os.TempDir()+"/mongo.crt", []byte(conf.CaCrt), 0644); err != nil { + log.Fatalf("Failed to write crt file for mongodb %s", err) + } + } + opts := []*options.ClientOptions{options.Client().ApplyURI(conf.MongoHost)} + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + client, err := mongo.Connect(ctx, opts...) + if err != nil { + log.Fatalf("Failed to connect to mongo db %s", err) + } + ctx2, cancel2 := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel2() + if err := client.Ping(ctx2, nil); err != nil { + log.Fatalf("Failed to ping mongo db %s", err) + } + + // make sure the indexes are set up + _, err = client.Database("ocm").Collection("poi").Indexes().CreateMany(context.Background(), []mongo.IndexModel{ + { // bounding box queries + Keys: bson.D{{"SpatialPosition.coordinates", "2dsphere"}}, + Options: &options.IndexOptions{ + SphereVersion: &sphereIndexVersion, + }, + }, + { // distance queries + Keys: bson.D{{"SpatialPosition", "2dsphere"}}, + Options: &options.IndexOptions{ + SphereVersion: &sphereIndexVersion, + }, + }, + { + Keys: bson.M{"DateCreated": -1}, + }, + { + Keys: bson.M{"DateLastStatusUpdate": -1}, + }, + { + Keys: bson.M{"ID": -1}, + }, + }) + if err != nil { + log.Fatalf("Failed to craete indexes %s", err) + } + + ev := &Evchargers{conf: conf, mdb: client} + if len(conf.OCMKey) > 0 { + c := cron.New() + // 4am every Sunday for refresh + c.AddFunc("0 4 * * 0", ev.refreshDataFromSource) + c.Start() + } + + return ev +} + +func (e *Evchargers) Search(ctx context.Context, request *evchargers.SearchRequest, response *evchargers.SearchResponse) error { + + toInt := func(in []string) []interface{} { + res := make([]interface{}, len(in)) + for i, v := range in { + res[i], _ = strconv.Atoi(v) + } + return res + } + filters := bson.D{} + if len(request.ConnectionTypes) > 0 { + vals := bson.A{} + vals = append(vals, toInt(request.ConnectionTypes)...) + filters = append(filters, bson.E{"Connections.ConnectionTypeID", bson.D{{"$in", vals}}}) + } + + if request.Location != nil { + distance := defaultDistance + if request.Distance > 0 { + distance = request.Distance + } + filters = append(filters, bson.E{"SpatialPosition", bson.M{"$nearSphere": bson.M{"$geometry": bson.M{ + "type": "Point", + "coordinates": []float64{float64(request.Location.Longitude), float64(request.Location.Latitude)}, + }, + "$maxDistance": distance, + }, + }}) + } else if request.Box != nil && request.Box.BottomLeft != nil { + filters = append(filters, bson.E{"SpatialPosition.coordinates", bson.M{"$geoWithin": bson.M{"$box": bson.A{ + []float32{request.Box.BottomLeft.Longitude, request.Box.BottomLeft.Latitude}, + []float32{request.Box.TopRight.Longitude, request.Box.TopRight.Latitude}, + }}}}) + } + + if len(request.CountryId) > 0 { + i, _ := strconv.Atoi(request.CountryId) + filters = append(filters, bson.E{"AddressInfo.CountryID", i}) + } + + if len(request.Levels) > 0 { + vals := bson.A{} + vals = append(vals, toInt(request.Levels)...) + filters = append(filters, bson.E{"Connections.LevelID", bson.D{{"$in", vals}}}) + } + + if request.MinPower > 0 { + filters = append(filters, bson.E{"Connections.PowerKW", bson.D{{"$gte", request.MinPower}}}) + } + + if len(request.Operators) > 0 { + vals := bson.A{} + vals = append(vals, toInt(request.Operators)...) + filters = append(filters, bson.E{"OperatorID", bson.D{{"$in", vals}}}) + } + + if len(request.UsageTypes) > 0 { + vals := bson.A{} + vals = append(vals, toInt(request.UsageTypes)...) + filters = append(filters, bson.E{"UsageTypeID", bson.D{{"$in", vals}}}) + } + + maxLim := int64(100) + max := options.FindOptions{ + Limit: &maxLim, + } + if request.MaxResults > 0 { + max.Limit = &request.MaxResults + } + crs, err := e.mdb.Database("ocm").Collection("poi").Find(ctx, filters, &max) + if err != nil { + log.Errorf("Error querying %s", err) + return errors.InternalServerError("evchargers.search", "Failed to query ev chargers") + } + defer crs.Close(ctx) + for crs.Next(ctx) { + var result Poi + if err := crs.Decode(&result); err != nil { + log.Errorf("Error decoding result %s", err) + return errors.InternalServerError("evchargers.search", "Failed to query ev chargers") + } + poi := &evchargers.Poi{ + Id: strconv.Itoa(int(result.ID)), + DataProviderId: strconv.Itoa(int(result.DataProviderID)), + OperatorId: strconv.Itoa(int(result.OperatorID)), + UsageTypeId: strconv.Itoa(int(result.UsageTypeID)), + Address: &evchargers.Address{ + Location: &evchargers.Coordinates{ + Latitude: float32(result.Address.Latitude), + Longitude: float32(result.Address.Longitude), + }, + Title: result.Address.Title, + AddressLine_1: result.Address.AddressLine1, + AddressLine_2: result.Address.AddressLine2, + Town: result.Address.Town, + StateOrProvince: result.Address.StateOrProvince, + AccessComments: result.Address.AccessComments, + Postcode: result.Address.Postcode, + CountryId: strconv.Itoa(int(result.Address.CountryID)), + }, + Connections: marshalConnections(result.Connections), + NumPoints: int64(result.NumberOfPoints), + Cost: result.Cost, + } + if true { // verbose + poi.Operator = marshalOperator(result.OperatorInfo) + poi.UsageType = marshalUsageType(result.UsageType) + poi.Address.Country = marshalCountry(result.Address.Country) + } + response.Pois = append(response.Pois, poi) + } + return nil +} + +func marshalCountry(in Country) *evchargers.Country { + return &evchargers.Country{ + Id: strconv.Itoa(int(in.ID)), + Title: in.Title, + IsoCode: in.ISOCode, + ContinentCode: in.ContinentCode, + } +} + +func marshalConnections(in []Connection) []*evchargers.Connection { + res := make([]*evchargers.Connection, len(in)) + for i, v := range in { + res[i] = &evchargers.Connection{ + ConnectionTypeId: strconv.Itoa(int(v.TypeID)), + ConnectionType: &evchargers.ConnectionType{ + Id: strconv.Itoa(int(v.Type.ID)), + Title: v.Type.Title, + FormalName: v.Type.FormalName, + IsDiscontinued: v.Type.IsDiscontinued, + IsObsolete: v.Type.IsObsolete, + }, + Reference: v.Reference, + Level: strconv.Itoa(int(v.LevelID)), + Amps: float32(v.Amps), + Voltage: float32(v.Voltage), + Power: float32(v.Power), + Current: strconv.Itoa(int(v.CurrentTypeID)), + } + } + return res +} + +func marshalDataProvider(in DataProvider) *evchargers.DataProvider { + return &evchargers.DataProvider{ + Id: strconv.Itoa(int(in.ID)), + Title: in.Title, + Website: in.WebsiteURL, + Comments: in.Comments, + DataProviderStatusType: marshalDataProviderStatus(in.DataProviderStatus), + License: in.License, + } +} + +func marshalDataProviderStatus(in DataProviderStatus) *evchargers.DataProviderStatusType { + return &evchargers.DataProviderStatusType{ + Id: strconv.Itoa(int(in.ID)), + Title: in.Title, + IsProviderEnabled: in.IsProviderEnabled, + } +} + +func marshalOperator(in Operator) *evchargers.Operator { + return &evchargers.Operator{ + Id: strconv.Itoa(int(in.ID)), + Title: in.Title, + Website: in.WebsiteURL, + Comments: in.Comments, + IsPrivateIndividual: in.IsPrivateIndividual, + ContactEmail: in.ContactEmail, + PhonePrimary: in.PhonePrimary, + PhoneSecondary: in.PhoneSecondary, + FaultReportEmail: in.FaultReportEmail, + } +} + +func marshalUsageType(in UsageType) *evchargers.UsageType { + return &evchargers.UsageType{ + Id: strconv.Itoa(int(in.ID)), + Title: in.Title, + IsPayAtLocation: in.IsPayAtLocation, + IsMembershipRequired: in.IsMembershipRequired, + IsAccessKeyRequired: in.IsAccessKeyRequired, + } +} + +func marshalCheckinStatusType(in CheckinStatusType) *evchargers.CheckinStatusType { + return &evchargers.CheckinStatusType{ + Id: strconv.Itoa(int(in.ID)), + Title: in.Title, + IsPositive: in.IsPositive, + IsAutomated: in.IsAutomatedCheckin, + } +} + +func marshalUserCommentType(in UserCommentType) *evchargers.UserCommentType { + return &evchargers.UserCommentType{ + Id: strconv.Itoa(int(in.ID)), + Title: in.Title, + } +} + +func marshalStatusType(in StatusType) *evchargers.StatusType { + return &evchargers.StatusType{ + Id: strconv.Itoa(int(in.ID)), + Title: in.Title, + IsOperational: in.IsOperational, + } +} + +func marshalCurrentType(in CurrentType) *evchargers.CurrentType { + return &evchargers.CurrentType{ + Id: strconv.Itoa(int(in.ID)), + Title: in.Title, + Description: in.Description, + } +} + +func marshalConnectionType(in ConnectionType) *evchargers.ConnectionType { + return &evchargers.ConnectionType{ + Id: strconv.Itoa(int(in.ID)), + Title: in.Title, + FormalName: in.FormalName, + IsDiscontinued: in.IsDiscontinued, + IsObsolete: in.IsObsolete, + } +} + +func marshalChargerType(in ChargerType) *evchargers.ChargerType { + return &evchargers.ChargerType{ + Id: strconv.Itoa(int(in.ID)), + Title: in.Title, + Comments: in.Comments, + IsFastChargeCapable: in.IsFastChargeCapable, + } +} + +func marshalSubmissionStatusType(in SubmissionStatusType) *evchargers.SubmissionStatusType { + return &evchargers.SubmissionStatusType{ + Id: strconv.Itoa(int(in.ID)), + Title: in.Title, + IsLive: in.IsLive, + } +} + +func (e *Evchargers) ReferenceData(ctx context.Context, request *evchargers.ReferenceDataRequest, response *evchargers.ReferenceDataResponse) error { + + res := e.mdb.Database("ocm").Collection("reference").FindOne(ctx, bson.D{}) + if res.Err() != nil { + log.Errorf("Error retrieving ref data %s", res.Err()) + return errors.InternalServerError("evchargers.referencedata", "Error retrieving reference data") + } + var r ReferenceData + if err := res.Decode(&r); err != nil { + log.Errorf("Error decoding ref data %s", err) + return errors.InternalServerError("evchargers.referencedata", "Error retrieving reference data") + } + dps := make([]*evchargers.DataProvider, len(r.DataProviders)) + for i, dp := range r.DataProviders { + dps[i] = marshalDataProvider(dp) + } + response.DataProviders = dps + cs := make([]*evchargers.Country, len(r.Countries)) + for i, c := range r.Countries { + cs[i] = marshalCountry(c) + } + response.Countries = cs + + cst := make([]*evchargers.CheckinStatusType, len(r.CheckinStatusTypes)) + for i, v := range r.CheckinStatusTypes { + cst[i] = marshalCheckinStatusType(v) + } + response.CheckinStatusTypes = cst + + uct := make([]*evchargers.UserCommentType, len(r.UserCommentTypes)) + for i, v := range r.UserCommentTypes { + uct[i] = marshalUserCommentType(v) + } + response.UserCommentTypes = uct + + st := make([]*evchargers.StatusType, len(r.StatusTypes)) + for i, v := range r.StatusTypes { + st[i] = marshalStatusType(v) + } + response.StatusTypes = st + + ut := make([]*evchargers.UsageType, len(r.UsageTypes)) + for i, v := range r.UsageTypes { + ut[i] = marshalUsageType(v) + } + response.UsageTypes = ut + + ct := make([]*evchargers.CurrentType, len(r.CurrentTypes)) + for i, v := range r.CurrentTypes { + ct[i] = marshalCurrentType(v) + } + response.CurrentTypes = ct + + connt := make([]*evchargers.ConnectionType, len(r.ConnectionTypes)) + for i, v := range r.ConnectionTypes { + connt[i] = marshalConnectionType(v) + } + response.ConnectionTypes = connt + chrgt := make([]*evchargers.ChargerType, len(r.ChargerTypes)) + for i, v := range r.ChargerTypes { + chrgt[i] = marshalChargerType(v) + } + response.ChargerTypes = chrgt + + ops := make([]*evchargers.Operator, len(r.Operators)) + for i, v := range r.Operators { + ops[i] = marshalOperator(v) + } + response.Operators = ops + + sst := make([]*evchargers.SubmissionStatusType, len(r.SubmissionStatusTypes)) + for i, v := range r.SubmissionStatusTypes { + sst[i] = marshalSubmissionStatusType(v) + } + + response.SubmissionStatusTypes = sst + return nil +} diff --git a/evchargers/handler/test-reference.json b/evchargers/handler/test-reference.json new file mode 100644 index 0000000..02ba7ea --- /dev/null +++ b/evchargers/handler/test-reference.json @@ -0,0 +1,9251 @@ +{ + "ChargerTypes": [ + { + "Comments": "Under 2 kW, usually domestic socket types", + "IsFastChargeCapable": false, + "ID": 1, + "Title": "Level 1 : Low (Under 2kW)" + }, + { + "Comments": "Over 2 kW, usually non-domestic socket type", + "IsFastChargeCapable": false, + "ID": 2, + "Title": "Level 2 : Medium (Over 2kW)" + }, + { + "Comments": "40KW and Higher", + "IsFastChargeCapable": true, + "ID": 3, + "Title": "Level 3: High (Over 40kW)" + } + ], + "ConnectionTypes": [ + { + "FormalName": "Avcon SAE J1772-2001", + "IsDiscontinued": true, + "IsObsolete": false, + "ID": 7, + "Title": "Avcon Connector" + }, + { + "FormalName": null, + "IsDiscontinued": null, + "IsObsolete": null, + "ID": 4, + "Title": "Blue Commando (2P+E)" + }, + { + "FormalName": "BS1363 / Type G", + "IsDiscontinued": null, + "IsObsolete": null, + "ID": 3, + "Title": "BS1363 3 Pin 13 Amp" + }, + { + "FormalName": "IEC 62196-3 Configuration EE", + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 32, + "Title": "CCS (Type 1)" + }, + { + "FormalName": "IEC 62196-3 Configuration FF", + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 33, + "Title": "CCS (Type 2)" + }, + { + "FormalName": null, + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 16, + "Title": "CEE 3 Pin" + }, + { + "FormalName": null, + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 17, + "Title": "CEE 5 Pin" + }, + { + "FormalName": "CEE 7/4", + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 28, + "Title": "CEE 7/4 - Schuko - Type F" + }, + { + "FormalName": null, + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 23, + "Title": "CEE 7/5" + }, + { + "FormalName": null, + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 18, + "Title": "CEE+ 7 Pin" + }, + { + "FormalName": "IEC 62196-3 Configuration AA", + "IsDiscontinued": null, + "IsObsolete": null, + "ID": 2, + "Title": "CHAdeMO" + }, + { + "FormalName": "Europlug 2-Pin (CEE 7/16)", + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 13, + "Title": "Europlug 2-Pin (CEE 7/16)" + }, + { + "FormalName": "GB-T AC - GB/T 20234.2 (Socket)", + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 1038, + "Title": "GB-T AC - GB/T 20234.2 (Socket)" + }, + { + "FormalName": "GB-T AC - GB/T 20234.2 (Tethered Cable)", + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 1039, + "Title": "GB-T AC - GB/T 20234.2 (Tethered Cable)" + }, + { + "FormalName": "GB-T DC - GB/T 20234.3", + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 1040, + "Title": "GB-T DC - GB/T 20234.3" + }, + { + "FormalName": "IEC 60309 3-pin", + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 34, + "Title": "IEC 60309 3-pin" + }, + { + "FormalName": "IEC 60309 5-pin", + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 35, + "Title": "IEC 60309 5-pin" + }, + { + "FormalName": "Large Paddle Inductive", + "IsDiscontinued": true, + "IsObsolete": true, + "ID": 5, + "Title": "LP Inductive" + }, + { + "FormalName": null, + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 10, + "Title": "NEMA 14-30" + }, + { + "FormalName": null, + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 11, + "Title": "NEMA 14-50" + }, + { + "FormalName": "NEMA 5-15R", + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 22, + "Title": "NEMA 5-15R" + }, + { + "FormalName": null, + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 9, + "Title": "NEMA 5-20R" + }, + { + "FormalName": null, + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 15, + "Title": "NEMA 6-15" + }, + { + "FormalName": null, + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 14, + "Title": "NEMA 6-20" + }, + { + "FormalName": null, + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 1042, + "Title": "NEMA TT-30R" + }, + { + "FormalName": null, + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 36, + "Title": "SCAME Type 3A (Low Power)" + }, + { + "FormalName": "IEC 62196-2 Type 3", + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 26, + "Title": "SCAME Type 3C (Schneider-Legrand)" + }, + { + "FormalName": "Small Paddle Inductive", + "IsDiscontinued": true, + "IsObsolete": true, + "ID": 6, + "Title": "SP Inductive" + }, + { + "FormalName": "T13/ IEC Type J", + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 1037, + "Title": "T13 - SEC1011 ( Swiss domestic 3-pin ) - Type J" + }, + { + "FormalName": null, + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 30, + "Title": "Tesla (Model S/X)" + }, + { + "FormalName": "Tesla Connector", + "IsDiscontinued": true, + "IsObsolete": false, + "ID": 8, + "Title": "Tesla (Roadster)" + }, + { + "FormalName": "Tesla Battery Swap Station", + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 31, + "Title": "Tesla Battery Swap" + }, + { + "FormalName": "Tesla Supercharger", + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 27, + "Title": "Tesla Supercharger" + }, + { + "FormalName": "AS/NZS 3123 Three Phase", + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 1041, + "Title": "Three Phase 5-Pin (AS/NZ 3123)" + }, + { + "FormalName": "SAE J1772-2009", + "IsDiscontinued": null, + "IsObsolete": null, + "ID": 1, + "Title": "Type 1 (J1772)" + }, + { + "FormalName": "IEC 62196-2 Type 2", + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 25, + "Title": "Type 2 (Socket Only)" + }, + { + "FormalName": "IEC 62196-2", + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 1036, + "Title": "Type 2 (Tethered Connector) " + }, + { + "FormalName": "Type I/AS 3112/CPCS-CCC", + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 29, + "Title": "Type I (AS 3112)" + }, + { + "FormalName": "Not Specified", + "IsDiscontinued": null, + "IsObsolete": null, + "ID": 0, + "Title": "Unknown" + }, + { + "FormalName": null, + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 24, + "Title": "Wireless Charging" + }, + { + "FormalName": null, + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 21, + "Title": "XLR Plug (4 pin)" + } + ], + "CurrentTypes": [ + { + "Description": "Alternating Current - Single Phase", + "ID": 10, + "Title": "AC (Single-Phase)" + }, + { + "Description": "Alternating Current - Three Phase", + "ID": 20, + "Title": "AC (Three-Phase)" + }, + { + "Description": "Direct Current", + "ID": 30, + "Title": "DC" + } + ], + "Countries": [ + { + "ISOCode": "AF", + "ContinentCode": "AS", + "ID": 5, + "Title": "Afghanistan" + }, + { + "ISOCode": "AX", + "ContinentCode": "EU", + "ID": 6, + "Title": "Aland Islands" + }, + { + "ISOCode": "AL", + "ContinentCode": "EU", + "ID": 7, + "Title": "Albania" + }, + { + "ISOCode": "DZ", + "ContinentCode": "AF", + "ID": 8, + "Title": "Algeria" + }, + { + "ISOCode": "AS", + "ContinentCode": "OC", + "ID": 9, + "Title": "American Samoa" + }, + { + "ISOCode": "AD", + "ContinentCode": "EU", + "ID": 10, + "Title": "Andorra" + }, + { + "ISOCode": "AO", + "ContinentCode": "AF", + "ID": 11, + "Title": "Angola" + }, + { + "ISOCode": "AI", + "ContinentCode": "NA", + "ID": 12, + "Title": "Anguilla" + }, + { + "ISOCode": "AQ", + "ContinentCode": "AN", + "ID": 13, + "Title": "Antarctica" + }, + { + "ISOCode": "AG", + "ContinentCode": "NA", + "ID": 14, + "Title": "Antigua And Barbuda" + }, + { + "ISOCode": "AR", + "ContinentCode": "SA", + "ID": 15, + "Title": "Argentina" + }, + { + "ISOCode": "AM", + "ContinentCode": "AS", + "ID": 16, + "Title": "Armenia" + }, + { + "ISOCode": "AW", + "ContinentCode": "NA", + "ID": 17, + "Title": "Aruba" + }, + { + "ISOCode": "AU", + "ContinentCode": "OC", + "ID": 18, + "Title": "Australia" + }, + { + "ISOCode": "AT", + "ContinentCode": "EU", + "ID": 19, + "Title": "Austria" + }, + { + "ISOCode": "AZ", + "ContinentCode": "AS", + "ID": 20, + "Title": "Azerbaijan" + }, + { + "ISOCode": "BS", + "ContinentCode": "NA", + "ID": 21, + "Title": "Bahamas" + }, + { + "ISOCode": "BH", + "ContinentCode": "AS", + "ID": 22, + "Title": "Bahrain" + }, + { + "ISOCode": "BD", + "ContinentCode": "AS", + "ID": 23, + "Title": "Bangladesh" + }, + { + "ISOCode": "BB", + "ContinentCode": "NA", + "ID": 24, + "Title": "Barbados" + }, + { + "ISOCode": "BY", + "ContinentCode": "EU", + "ID": 25, + "Title": "Belarus" + }, + { + "ISOCode": "BE", + "ContinentCode": "EU", + "ID": 26, + "Title": "Belgium" + }, + { + "ISOCode": "BZ", + "ContinentCode": "NA", + "ID": 27, + "Title": "Belize" + }, + { + "ISOCode": "BJ", + "ContinentCode": "AF", + "ID": 28, + "Title": "Benin" + }, + { + "ISOCode": "BM", + "ContinentCode": "NA", + "ID": 29, + "Title": "Bermuda" + }, + { + "ISOCode": "BT", + "ContinentCode": "AS", + "ID": 30, + "Title": "Bhutan" + }, + { + "ISOCode": "BO", + "ContinentCode": "SA", + "ID": 31, + "Title": "Bolivia, Plurinational State Of" + }, + { + "ISOCode": "BQ", + "ContinentCode": null, + "ID": 32, + "Title": "Bonaire, Saint Eustatius And Saba" + }, + { + "ISOCode": "BA", + "ContinentCode": "EU", + "ID": 33, + "Title": "Bosnia And Herzegovina" + }, + { + "ISOCode": "BW", + "ContinentCode": "AF", + "ID": 34, + "Title": "Botswana" + }, + { + "ISOCode": "BV", + "ContinentCode": "AN", + "ID": 35, + "Title": "Bouvet Island" + }, + { + "ISOCode": "BR", + "ContinentCode": "SA", + "ID": 36, + "Title": "Brazil" + }, + { + "ISOCode": "IO", + "ContinentCode": "AS", + "ID": 37, + "Title": "British Indian Ocean Territory" + }, + { + "ISOCode": "BN", + "ContinentCode": "AS", + "ID": 38, + "Title": "Brunei Darussalam" + }, + { + "ISOCode": "BG", + "ContinentCode": "EU", + "ID": 39, + "Title": "Bulgaria" + }, + { + "ISOCode": "BF", + "ContinentCode": "AF", + "ID": 40, + "Title": "Burkina Faso" + }, + { + "ISOCode": "BI", + "ContinentCode": "AF", + "ID": 41, + "Title": "Burundi" + }, + { + "ISOCode": "KH", + "ContinentCode": "AS", + "ID": 42, + "Title": "Cambodia" + }, + { + "ISOCode": "CM", + "ContinentCode": "AF", + "ID": 43, + "Title": "Cameroon" + }, + { + "ISOCode": "CA", + "ContinentCode": "NA", + "ID": 44, + "Title": "Canada" + }, + { + "ISOCode": "CV", + "ContinentCode": "AF", + "ID": 45, + "Title": "Cape Verde" + }, + { + "ISOCode": "KY", + "ContinentCode": "NA", + "ID": 46, + "Title": "Cayman Islands" + }, + { + "ISOCode": "CF", + "ContinentCode": "AF", + "ID": 47, + "Title": "Central African Republic" + }, + { + "ISOCode": "TD", + "ContinentCode": "AF", + "ID": 48, + "Title": "Chad" + }, + { + "ISOCode": "CL", + "ContinentCode": "SA", + "ID": 49, + "Title": "Chile" + }, + { + "ISOCode": "CN", + "ContinentCode": "AS", + "ID": 50, + "Title": "China" + }, + { + "ISOCode": "CX", + "ContinentCode": "AS", + "ID": 51, + "Title": "Christmas Island" + }, + { + "ISOCode": "CC", + "ContinentCode": "AS", + "ID": 52, + "Title": "Cocos (Keeling) Islands" + }, + { + "ISOCode": "CO", + "ContinentCode": "SA", + "ID": 53, + "Title": "Colombia" + }, + { + "ISOCode": "KM", + "ContinentCode": "AF", + "ID": 54, + "Title": "Comoros" + }, + { + "ISOCode": "CG", + "ContinentCode": "AF", + "ID": 55, + "Title": "Congo" + }, + { + "ISOCode": "CD", + "ContinentCode": "AF", + "ID": 56, + "Title": "Congo, Democratic Republic Of The" + }, + { + "ISOCode": "CK", + "ContinentCode": "OC", + "ID": 57, + "Title": "Cook Islands" + }, + { + "ISOCode": "CR", + "ContinentCode": "NA", + "ID": 58, + "Title": "Costa Rica" + }, + { + "ISOCode": "CI", + "ContinentCode": "AF", + "ID": 59, + "Title": "Cote D'Ivoire" + }, + { + "ISOCode": "HR", + "ContinentCode": "EU", + "ID": 60, + "Title": "Croatia" + }, + { + "ISOCode": "CU", + "ContinentCode": "NA", + "ID": 61, + "Title": "Cuba" + }, + { + "ISOCode": "CW", + "ContinentCode": null, + "ID": 62, + "Title": "Curacao" + }, + { + "ISOCode": "CY", + "ContinentCode": "AS", + "ID": 63, + "Title": "Cyprus" + }, + { + "ISOCode": "CZ", + "ContinentCode": "EU", + "ID": 64, + "Title": "Czech Republic" + }, + { + "ISOCode": "DK", + "ContinentCode": "EU", + "ID": 65, + "Title": "Denmark" + }, + { + "ISOCode": "DJ", + "ContinentCode": "AF", + "ID": 66, + "Title": "Djibouti" + }, + { + "ISOCode": "DM", + "ContinentCode": "NA", + "ID": 67, + "Title": "Dominica" + }, + { + "ISOCode": "DO", + "ContinentCode": "NA", + "ID": 68, + "Title": "Dominican Republic" + }, + { + "ISOCode": "EC", + "ContinentCode": "SA", + "ID": 69, + "Title": "Ecuador" + }, + { + "ISOCode": "EG", + "ContinentCode": "AF", + "ID": 70, + "Title": "Egypt" + }, + { + "ISOCode": "SV", + "ContinentCode": "NA", + "ID": 71, + "Title": "El Salvador" + }, + { + "ISOCode": "GQ", + "ContinentCode": "AF", + "ID": 72, + "Title": "Equatorial Guinea" + }, + { + "ISOCode": "ER", + "ContinentCode": "AF", + "ID": 73, + "Title": "Eritrea" + }, + { + "ISOCode": "EE", + "ContinentCode": "EU", + "ID": 74, + "Title": "Estonia" + }, + { + "ISOCode": "ET", + "ContinentCode": "AF", + "ID": 75, + "Title": "Ethiopia" + }, + { + "ISOCode": "FK", + "ContinentCode": "SA", + "ID": 76, + "Title": "Falkland Islands (Malvinas)" + }, + { + "ISOCode": "FO", + "ContinentCode": "EU", + "ID": 77, + "Title": "Faroe Islands" + }, + { + "ISOCode": "FJ", + "ContinentCode": "OC", + "ID": 78, + "Title": "Fiji" + }, + { + "ISOCode": "FI", + "ContinentCode": "EU", + "ID": 79, + "Title": "Finland" + }, + { + "ISOCode": "FR", + "ContinentCode": "EU", + "ID": 80, + "Title": "France" + }, + { + "ISOCode": "GF", + "ContinentCode": "SA", + "ID": 81, + "Title": "French Guiana" + }, + { + "ISOCode": "PF", + "ContinentCode": "OC", + "ID": 82, + "Title": "French Polynesia" + }, + { + "ISOCode": "TF", + "ContinentCode": "AN", + "ID": 83, + "Title": "French Southern Territories" + }, + { + "ISOCode": "GA", + "ContinentCode": "AF", + "ID": 84, + "Title": "Gabon" + }, + { + "ISOCode": "GM", + "ContinentCode": "AF", + "ID": 85, + "Title": "Gambia" + }, + { + "ISOCode": "GE", + "ContinentCode": "AS", + "ID": 86, + "Title": "Georgia" + }, + { + "ISOCode": "DE", + "ContinentCode": "EU", + "ID": 87, + "Title": "Germany" + }, + { + "ISOCode": "GH", + "ContinentCode": "AF", + "ID": 88, + "Title": "Ghana" + }, + { + "ISOCode": "GI", + "ContinentCode": "EU", + "ID": 89, + "Title": "Gibraltar" + }, + { + "ISOCode": "GR", + "ContinentCode": "EU", + "ID": 90, + "Title": "Greece" + }, + { + "ISOCode": "GL", + "ContinentCode": "NA", + "ID": 91, + "Title": "Greenland" + }, + { + "ISOCode": "GD", + "ContinentCode": "NA", + "ID": 92, + "Title": "Grenada" + }, + { + "ISOCode": "GP", + "ContinentCode": "NA", + "ID": 93, + "Title": "Guadeloupe" + }, + { + "ISOCode": "GU", + "ContinentCode": "OC", + "ID": 94, + "Title": "Guam" + }, + { + "ISOCode": "GT", + "ContinentCode": "NA", + "ID": 95, + "Title": "Guatemala" + }, + { + "ISOCode": "GG", + "ContinentCode": "EU", + "ID": 96, + "Title": "Guernsey" + }, + { + "ISOCode": "GN", + "ContinentCode": "AF", + "ID": 97, + "Title": "Guinea" + }, + { + "ISOCode": "GW", + "ContinentCode": "AF", + "ID": 98, + "Title": "Guinea-Bissau" + }, + { + "ISOCode": "GY", + "ContinentCode": "SA", + "ID": 99, + "Title": "Guyana" + }, + { + "ISOCode": "HT", + "ContinentCode": "NA", + "ID": 100, + "Title": "Haiti" + }, + { + "ISOCode": "HM", + "ContinentCode": "AN", + "ID": 101, + "Title": "Heard Island And Mcdonald Islands" + }, + { + "ISOCode": "VA", + "ContinentCode": "EU", + "ID": 102, + "Title": "Holy See (Vatican City State)" + }, + { + "ISOCode": "HN", + "ContinentCode": "NA", + "ID": 103, + "Title": "Honduras" + }, + { + "ISOCode": "HK", + "ContinentCode": "AS", + "ID": 4, + "Title": "Hong Kong" + }, + { + "ISOCode": "HU", + "ContinentCode": "EU", + "ID": 104, + "Title": "Hungary" + }, + { + "ISOCode": "IS", + "ContinentCode": "EU", + "ID": 105, + "Title": "Iceland" + }, + { + "ISOCode": "IN", + "ContinentCode": "AS", + "ID": 106, + "Title": "India" + }, + { + "ISOCode": "ID", + "ContinentCode": "AS", + "ID": 107, + "Title": "Indonesia" + }, + { + "ISOCode": "IR", + "ContinentCode": "AS", + "ID": 108, + "Title": "Iran, Islamic Republic Of" + }, + { + "ISOCode": "IQ", + "ContinentCode": "AS", + "ID": 109, + "Title": "Iraq" + }, + { + "ISOCode": "IE", + "ContinentCode": "EU", + "ID": 3, + "Title": "Ireland" + }, + { + "ISOCode": "IM", + "ContinentCode": "EU", + "ID": 110, + "Title": "Isle Of Man" + }, + { + "ISOCode": "IL", + "ContinentCode": "AS", + "ID": 111, + "Title": "Israel" + }, + { + "ISOCode": "IT", + "ContinentCode": "EU", + "ID": 112, + "Title": "Italy" + }, + { + "ISOCode": "JM", + "ContinentCode": "NA", + "ID": 113, + "Title": "Jamaica" + }, + { + "ISOCode": "JP", + "ContinentCode": "AS", + "ID": 114, + "Title": "Japan" + }, + { + "ISOCode": "JE", + "ContinentCode": "EU", + "ID": 115, + "Title": "Jersey" + }, + { + "ISOCode": "JO", + "ContinentCode": "AS", + "ID": 116, + "Title": "Jordan" + }, + { + "ISOCode": "KZ", + "ContinentCode": "AS", + "ID": 117, + "Title": "Kazakhstan" + }, + { + "ISOCode": "KE", + "ContinentCode": "AF", + "ID": 118, + "Title": "Kenya" + }, + { + "ISOCode": "KI", + "ContinentCode": "OC", + "ID": 119, + "Title": "Kiribati" + }, + { + "ISOCode": "KP", + "ContinentCode": "AS", + "ID": 120, + "Title": "Korea, Democratic People's Rep." + }, + { + "ISOCode": "KR", + "ContinentCode": "AS", + "ID": 121, + "Title": "Korea, Republic Of" + }, + { + "ISOCode": "XK", + "ContinentCode": "EU", + "ID": 250, + "Title": "Kosovo" + }, + { + "ISOCode": "KW", + "ContinentCode": "AS", + "ID": 122, + "Title": "Kuwait" + }, + { + "ISOCode": "KG", + "ContinentCode": "AS", + "ID": 123, + "Title": "Kyrgyzstan" + }, + { + "ISOCode": "LA", + "ContinentCode": "AS", + "ID": 124, + "Title": "Lao People's Democratic Republic" + }, + { + "ISOCode": "LV", + "ContinentCode": "EU", + "ID": 125, + "Title": "Latvia" + }, + { + "ISOCode": "LB", + "ContinentCode": "AS", + "ID": 126, + "Title": "Lebanon" + }, + { + "ISOCode": "LS", + "ContinentCode": "AF", + "ID": 127, + "Title": "Lesotho" + }, + { + "ISOCode": "LR", + "ContinentCode": "AF", + "ID": 128, + "Title": "Liberia" + }, + { + "ISOCode": "LY", + "ContinentCode": "AF", + "ID": 129, + "Title": "Libyan Arab Jamahiriya" + }, + { + "ISOCode": "LI", + "ContinentCode": "EU", + "ID": 130, + "Title": "Liechtenstein" + }, + { + "ISOCode": "LT", + "ContinentCode": "EU", + "ID": 131, + "Title": "Lithuania" + }, + { + "ISOCode": "LU", + "ContinentCode": "EU", + "ID": 132, + "Title": "Luxembourg" + }, + { + "ISOCode": "MO", + "ContinentCode": "AS", + "ID": 133, + "Title": "Macao" + }, + { + "ISOCode": "MK", + "ContinentCode": "EU", + "ID": 134, + "Title": "Macedonia" + }, + { + "ISOCode": "MG", + "ContinentCode": "AF", + "ID": 135, + "Title": "Madagascar" + }, + { + "ISOCode": "MW", + "ContinentCode": "AF", + "ID": 136, + "Title": "Malawi" + }, + { + "ISOCode": "MY", + "ContinentCode": "AS", + "ID": 137, + "Title": "Malaysia" + }, + { + "ISOCode": "MV", + "ContinentCode": "AS", + "ID": 138, + "Title": "Maldives" + }, + { + "ISOCode": "ML", + "ContinentCode": "AF", + "ID": 139, + "Title": "Mali" + }, + { + "ISOCode": "MT", + "ContinentCode": "EU", + "ID": 140, + "Title": "Malta" + }, + { + "ISOCode": "MH", + "ContinentCode": "OC", + "ID": 141, + "Title": "Marshall Islands" + }, + { + "ISOCode": "MQ", + "ContinentCode": "NA", + "ID": 142, + "Title": "Martinique" + }, + { + "ISOCode": "MR", + "ContinentCode": "AF", + "ID": 143, + "Title": "Mauritania" + }, + { + "ISOCode": "MU", + "ContinentCode": "AF", + "ID": 144, + "Title": "Mauritius" + }, + { + "ISOCode": "YT", + "ContinentCode": "AF", + "ID": 145, + "Title": "Mayotte" + }, + { + "ISOCode": "MX", + "ContinentCode": "NA", + "ID": 146, + "Title": "Mexico" + }, + { + "ISOCode": "FM", + "ContinentCode": "OC", + "ID": 147, + "Title": "Micronesia, Federated States Of" + }, + { + "ISOCode": "MD", + "ContinentCode": "EU", + "ID": 148, + "Title": "Moldova, Republic Of" + }, + { + "ISOCode": "MC", + "ContinentCode": "EU", + "ID": 149, + "Title": "Monaco" + }, + { + "ISOCode": "MN", + "ContinentCode": "AS", + "ID": 150, + "Title": "Mongolia" + }, + { + "ISOCode": "ME", + "ContinentCode": "EU", + "ID": 151, + "Title": "Montenegro" + }, + { + "ISOCode": "MS", + "ContinentCode": "NA", + "ID": 152, + "Title": "Montserrat" + }, + { + "ISOCode": "MA", + "ContinentCode": "AF", + "ID": 153, + "Title": "Morocco" + }, + { + "ISOCode": "MZ", + "ContinentCode": "AF", + "ID": 154, + "Title": "Mozambique" + }, + { + "ISOCode": "MM", + "ContinentCode": "AS", + "ID": 155, + "Title": "Myanmar" + }, + { + "ISOCode": "NA", + "ContinentCode": "AF", + "ID": 156, + "Title": "Namibia" + }, + { + "ISOCode": "NR", + "ContinentCode": "OC", + "ID": 157, + "Title": "Nauru" + }, + { + "ISOCode": "NP", + "ContinentCode": "AS", + "ID": 158, + "Title": "Nepal" + }, + { + "ISOCode": "NL", + "ContinentCode": "EU", + "ID": 159, + "Title": "Netherlands" + }, + { + "ISOCode": "NC", + "ContinentCode": "OC", + "ID": 160, + "Title": "New Caledonia" + }, + { + "ISOCode": "NZ", + "ContinentCode": "OC", + "ID": 161, + "Title": "New Zealand" + }, + { + "ISOCode": "NI", + "ContinentCode": "NA", + "ID": 162, + "Title": "Nicaragua" + }, + { + "ISOCode": "NE", + "ContinentCode": "AF", + "ID": 163, + "Title": "Niger" + }, + { + "ISOCode": "NG", + "ContinentCode": "AF", + "ID": 164, + "Title": "Nigeria" + }, + { + "ISOCode": "NU", + "ContinentCode": "OC", + "ID": 165, + "Title": "Niue" + }, + { + "ISOCode": "NF", + "ContinentCode": "OC", + "ID": 166, + "Title": "Norfolk Island" + }, + { + "ISOCode": "MP", + "ContinentCode": "OC", + "ID": 167, + "Title": "Northern Mariana Islands" + }, + { + "ISOCode": "NO", + "ContinentCode": "EU", + "ID": 168, + "Title": "Norway" + }, + { + "ISOCode": "OM", + "ContinentCode": "AS", + "ID": 169, + "Title": "Oman" + }, + { + "ISOCode": "PK", + "ContinentCode": "AS", + "ID": 170, + "Title": "Pakistan" + }, + { + "ISOCode": "PW", + "ContinentCode": "OC", + "ID": 171, + "Title": "Palau" + }, + { + "ISOCode": "PS", + "ContinentCode": "AS", + "ID": 172, + "Title": "Palestinian Territory, Occupied" + }, + { + "ISOCode": "PA", + "ContinentCode": "NA", + "ID": 173, + "Title": "Panama" + }, + { + "ISOCode": "PG", + "ContinentCode": "OC", + "ID": 174, + "Title": "Papua New Guinea" + }, + { + "ISOCode": "PY", + "ContinentCode": "SA", + "ID": 175, + "Title": "Paraguay" + }, + { + "ISOCode": "PE", + "ContinentCode": "SA", + "ID": 176, + "Title": "Peru" + }, + { + "ISOCode": "PH", + "ContinentCode": "AS", + "ID": 177, + "Title": "Philippines" + }, + { + "ISOCode": "PN", + "ContinentCode": "OC", + "ID": 178, + "Title": "Pitcairn" + }, + { + "ISOCode": "PL", + "ContinentCode": "EU", + "ID": 179, + "Title": "Poland" + }, + { + "ISOCode": "PT", + "ContinentCode": "EU", + "ID": 180, + "Title": "Portugal" + }, + { + "ISOCode": "PR", + "ContinentCode": "NA", + "ID": 181, + "Title": "Puerto Rico" + }, + { + "ISOCode": "QA", + "ContinentCode": "AS", + "ID": 182, + "Title": "Qatar" + }, + { + "ISOCode": "RE", + "ContinentCode": "AF", + "ID": 183, + "Title": "Reunion" + }, + { + "ISOCode": "RO", + "ContinentCode": "EU", + "ID": 184, + "Title": "Romania" + }, + { + "ISOCode": "RU", + "ContinentCode": "EU", + "ID": 185, + "Title": "Russian Federation" + }, + { + "ISOCode": "RW", + "ContinentCode": "AF", + "ID": 186, + "Title": "Rwanda" + }, + { + "ISOCode": "BL", + "ContinentCode": "NA", + "ID": 187, + "Title": "Saint Barthelemy" + }, + { + "ISOCode": "SH", + "ContinentCode": "AF", + "ID": 188, + "Title": "Saint Helena" + }, + { + "ISOCode": "KN", + "ContinentCode": "NA", + "ID": 189, + "Title": "Saint Kitts And Nevis" + }, + { + "ISOCode": "LC", + "ContinentCode": "NA", + "ID": 190, + "Title": "Saint Lucia" + }, + { + "ISOCode": "MF", + "ContinentCode": "NA", + "ID": 191, + "Title": "Saint Martin (French Part)" + }, + { + "ISOCode": "PM", + "ContinentCode": "NA", + "ID": 192, + "Title": "Saint Pierre And Miquelon" + }, + { + "ISOCode": "VC", + "ContinentCode": "NA", + "ID": 193, + "Title": "Saint Vincent And The Grenadines" + }, + { + "ISOCode": "WS", + "ContinentCode": "OC", + "ID": 194, + "Title": "Samoa" + }, + { + "ISOCode": "SM", + "ContinentCode": "EU", + "ID": 195, + "Title": "San Marino" + }, + { + "ISOCode": "ST", + "ContinentCode": "AF", + "ID": 196, + "Title": "Sao Tome And Principe" + }, + { + "ISOCode": "SA", + "ContinentCode": "AS", + "ID": 197, + "Title": "Saudi Arabia" + }, + { + "ISOCode": "SN", + "ContinentCode": "AF", + "ID": 198, + "Title": "Senegal" + }, + { + "ISOCode": "RS", + "ContinentCode": "EU", + "ID": 199, + "Title": "Serbia" + }, + { + "ISOCode": "SC", + "ContinentCode": "AF", + "ID": 200, + "Title": "Seychelles" + }, + { + "ISOCode": "SL", + "ContinentCode": "AF", + "ID": 201, + "Title": "Sierra Leone" + }, + { + "ISOCode": "SG", + "ContinentCode": "AS", + "ID": 202, + "Title": "Singapore" + }, + { + "ISOCode": "SX", + "ContinentCode": null, + "ID": 203, + "Title": "Sint Maarten (Dutch Part)" + }, + { + "ISOCode": "SK", + "ContinentCode": "EU", + "ID": 204, + "Title": "Slovakia" + }, + { + "ISOCode": "SI", + "ContinentCode": "EU", + "ID": 205, + "Title": "Slovenia" + }, + { + "ISOCode": "SB", + "ContinentCode": "OC", + "ID": 206, + "Title": "Solomon Islands" + }, + { + "ISOCode": "SO", + "ContinentCode": "AF", + "ID": 207, + "Title": "Somalia" + }, + { + "ISOCode": "ZA", + "ContinentCode": "AF", + "ID": 208, + "Title": "South Africa" + }, + { + "ISOCode": "GS", + "ContinentCode": "AN", + "ID": 209, + "Title": "South Georgia" + }, + { + "ISOCode": "SS", + "ContinentCode": "AF", + "ID": 249, + "Title": "South Sudan" + }, + { + "ISOCode": "ES", + "ContinentCode": "EU", + "ID": 210, + "Title": "Spain" + }, + { + "ISOCode": "LK", + "ContinentCode": "AS", + "ID": 211, + "Title": "Sri Lanka" + }, + { + "ISOCode": "SD", + "ContinentCode": "AF", + "ID": 212, + "Title": "Sudan" + }, + { + "ISOCode": "SR", + "ContinentCode": "SA", + "ID": 213, + "Title": "Suriname" + }, + { + "ISOCode": "SJ", + "ContinentCode": "EU", + "ID": 214, + "Title": "Svalbard And Jan Mayen" + }, + { + "ISOCode": "SZ", + "ContinentCode": "AF", + "ID": 215, + "Title": "Swaziland" + }, + { + "ISOCode": "SE", + "ContinentCode": "EU", + "ID": 216, + "Title": "Sweden" + }, + { + "ISOCode": "CH", + "ContinentCode": "EU", + "ID": 217, + "Title": "Switzerland" + }, + { + "ISOCode": "SY", + "ContinentCode": "AS", + "ID": 218, + "Title": "Syrian Arab Republic" + }, + { + "ISOCode": "TW", + "ContinentCode": "AS", + "ID": 219, + "Title": "Taiwan, Province Of China" + }, + { + "ISOCode": "TJ", + "ContinentCode": "AS", + "ID": 220, + "Title": "Tajikistan" + }, + { + "ISOCode": "TZ", + "ContinentCode": "AF", + "ID": 221, + "Title": "Tanzania, United Republic Of" + }, + { + "ISOCode": "TH", + "ContinentCode": "AS", + "ID": 222, + "Title": "Thailand" + }, + { + "ISOCode": "TL", + "ContinentCode": "AS", + "ID": 223, + "Title": "Timor-Leste" + }, + { + "ISOCode": "TG", + "ContinentCode": "AF", + "ID": 224, + "Title": "Togo" + }, + { + "ISOCode": "TK", + "ContinentCode": "OC", + "ID": 225, + "Title": "Tokelau" + }, + { + "ISOCode": "TO", + "ContinentCode": "OC", + "ID": 226, + "Title": "Tonga" + }, + { + "ISOCode": "TT", + "ContinentCode": "NA", + "ID": 227, + "Title": "Trinidad And Tobago" + }, + { + "ISOCode": "TN", + "ContinentCode": "AF", + "ID": 228, + "Title": "Tunisia" + }, + { + "ISOCode": "TR", + "ContinentCode": "EU", + "ID": 229, + "Title": "Turkey" + }, + { + "ISOCode": "TM", + "ContinentCode": "AS", + "ID": 230, + "Title": "Turkmenistan" + }, + { + "ISOCode": "TC", + "ContinentCode": "NA", + "ID": 231, + "Title": "Turks And Caicos Islands" + }, + { + "ISOCode": "TV", + "ContinentCode": "OC", + "ID": 232, + "Title": "Tuvalu" + }, + { + "ISOCode": "UG", + "ContinentCode": "AF", + "ID": 233, + "Title": "Uganda" + }, + { + "ISOCode": "UA", + "ContinentCode": "EU", + "ID": 234, + "Title": "Ukraine" + }, + { + "ISOCode": "AE", + "ContinentCode": "AS", + "ID": 235, + "Title": "United Arab Emirates" + }, + { + "ISOCode": "GB", + "ContinentCode": "EU", + "ID": 1, + "Title": "United Kingdom" + }, + { + "ISOCode": "US", + "ContinentCode": "NA", + "ID": 2, + "Title": "United States" + }, + { + "ISOCode": "UM", + "ContinentCode": "OC", + "ID": 236, + "Title": "United States Minor Outlying Islands" + }, + { + "ISOCode": "UY", + "ContinentCode": "SA", + "ID": 237, + "Title": "Uruguay" + }, + { + "ISOCode": "UZ", + "ContinentCode": "AS", + "ID": 238, + "Title": "Uzbekistan" + }, + { + "ISOCode": "VU", + "ContinentCode": "OC", + "ID": 239, + "Title": "Vanuatu" + }, + { + "ISOCode": "VE", + "ContinentCode": "SA", + "ID": 240, + "Title": "Venezuela, Bolivarian Republic Of" + }, + { + "ISOCode": "VN", + "ContinentCode": "AS", + "ID": 241, + "Title": "Viet Nam" + }, + { + "ISOCode": "VG", + "ContinentCode": "NA", + "ID": 242, + "Title": "Virgin Islands, British" + }, + { + "ISOCode": "VI", + "ContinentCode": "NA", + "ID": 243, + "Title": "Virgin Islands, U.S." + }, + { + "ISOCode": "WF", + "ContinentCode": "OC", + "ID": 244, + "Title": "Wallis And Futuna" + }, + { + "ISOCode": "EH", + "ContinentCode": "AF", + "ID": 245, + "Title": "Western Sahara" + }, + { + "ISOCode": "YE", + "ContinentCode": "AS", + "ID": 246, + "Title": "Yemen" + }, + { + "ISOCode": "ZM", + "ContinentCode": "AF", + "ID": 247, + "Title": "Zambia" + }, + { + "ISOCode": "ZW", + "ContinentCode": "AF", + "ID": 248, + "Title": "Zimbabwe" + } + ], + "DataProviders": [ + { + "WebsiteURL": "http://openchargemap.org", + "Comments": null, + "DataProviderStatusType": { + "IsProviderEnabled": true, + "ID": 1, + "Title": "Manual Data Entry" + }, + "IsRestrictedEdit": false, + "IsOpenDataLicensed": true, + "IsApprovedImport": true, + "License": "Licensed under Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)", + "DateLastImported": null, + "ID": 1, + "Title": "Open Charge Map Contributors" + }, + { + "WebsiteURL": "http://www.afdc.energy.gov/", + "Comments": null, + "DataProviderStatusType": { + "IsProviderEnabled": true, + "ID": 20, + "Title": "Automated Import" + }, + "IsRestrictedEdit": false, + "IsOpenDataLicensed": true, + "IsApprovedImport": true, + "License": "This data is provided by the National Renewable Energy Laboratory (\"NREL\"), which is operated by the Alliance for Sustainable Energy, LLC (\"Alliance\"), for the U.S. Department of Energy (\"DOE\"), and may be used for any purpose whatsoever.", + "DateLastImported": "2021-03-27T13:40:33.127Z", + "ID": 2, + "Title": "afdc.energy.gov" + }, + { + "WebsiteURL": "http://www.mobie.pt", + "Comments": null, + "DataProviderStatusType": { + "IsProviderEnabled": true, + "ID": 20, + "Title": "Automated Import" + }, + "IsRestrictedEdit": false, + "IsOpenDataLicensed": true, + "IsApprovedImport": true, + "License": "Public Data redistributed by agreement", + "DateLastImported": "2021-03-27T15:16:48.107Z", + "ID": 7, + "Title": "Mobie.pt" + }, + { + "WebsiteURL": "http://e-tankstellen-finder.com/", + "Comments": null, + "DataProviderStatusType": { + "IsProviderEnabled": true, + "ID": 10, + "Title": "Manual (Bulk Import)" + }, + "IsRestrictedEdit": false, + "IsOpenDataLicensed": null, + "IsApprovedImport": null, + "License": null, + "DateLastImported": null, + "ID": 8, + "Title": "ev-charging.com" + }, + { + "WebsiteURL": "http://www.uppladdning.nu", + "Comments": "This data provider has explicitly asked that OCM do not import their data. (Ref: Nikolay Shishkov)", + "DataProviderStatusType": { + "IsProviderEnabled": false, + "ID": 1000, + "Title": "Delisted - Data Use Permission Denied" + }, + "IsRestrictedEdit": false, + "IsOpenDataLicensed": null, + "IsApprovedImport": null, + "License": null, + "DateLastImported": null, + "ID": 13, + "Title": "www.uppladdning.nu" + }, + { + "WebsiteURL": "http://www.e-laad.nl", + "Comments": null, + "DataProviderStatusType": { + "IsProviderEnabled": true, + "ID": 10, + "Title": "Manual (Bulk Import)" + }, + "IsRestrictedEdit": false, + "IsOpenDataLicensed": null, + "IsApprovedImport": null, + "License": null, + "DateLastImported": null, + "ID": 14, + "Title": "e-Laad" + }, + { + "WebsiteURL": "http://www.carstations.com", + "Comments": null, + "DataProviderStatusType": { + "IsProviderEnabled": true, + "ID": 20, + "Title": "Automated Import" + }, + "IsRestrictedEdit": false, + "IsOpenDataLicensed": null, + "IsApprovedImport": null, + "License": null, + "DateLastImported": "2017-11-04T14:07:02.687Z", + "ID": 15, + "Title": "CarStations.com" + }, + { + "WebsiteURL": "http://www.blinknetwork.com", + "Comments": null, + "DataProviderStatusType": { + "IsProviderEnabled": true, + "ID": 20, + "Title": "Automated Import" + }, + "IsRestrictedEdit": false, + "IsOpenDataLicensed": null, + "IsApprovedImport": null, + "License": null, + "DateLastImported": null, + "ID": 17, + "Title": "BlinkNetwork.com" + }, + { + "WebsiteURL": "http://chargepoints.dft.gov.uk", + "Comments": null, + "DataProviderStatusType": { + "IsProviderEnabled": true, + "ID": 20, + "Title": "Automated Import" + }, + "IsRestrictedEdit": false, + "IsOpenDataLicensed": true, + "IsApprovedImport": true, + "License": "Contains public sector information licensed under the Open Government Licence v2.0.", + "DateLastImported": "2021-07-12T03:31:57.433Z", + "ID": 18, + "Title": "UK National Charge Point Registry" + }, + { + "WebsiteURL": "https://nobil.no/", + "Comments": "NOBIL is an open, publicly owned charging point database for the Nordic countries.", + "DataProviderStatusType": { + "IsProviderEnabled": true, + "ID": 30, + "Title": "Partially Automated (Ad-Hoc Import)" + }, + "IsRestrictedEdit": false, + "IsOpenDataLicensed": true, + "IsApprovedImport": true, + "License": "NOBIL by Enova is licensed under a Creative Commons Attribution 4.0 International (CC BY 4.0) License.", + "DateLastImported": "2021-03-27T14:52:43.187Z", + "ID": 19, + "Title": "NOBIL" + }, + { + "WebsiteURL": "http://www.chargepoint.net/", + "Comments": "Coulomb Chargepoint Network", + "DataProviderStatusType": { + "IsProviderEnabled": false, + "ID": 1001, + "Title": "Delisted - Not Used" + }, + "IsRestrictedEdit": false, + "IsOpenDataLicensed": null, + "IsApprovedImport": null, + "License": null, + "DateLastImported": null, + "ID": 20, + "Title": "Chargepoint.net" + }, + { + "WebsiteURL": "https://www.rwe-mobility.com/", + "Comments": null, + "DataProviderStatusType": { + "IsProviderEnabled": true, + "ID": 20, + "Title": "Automated Import" + }, + "IsRestrictedEdit": false, + "IsOpenDataLicensed": null, + "IsApprovedImport": null, + "License": null, + "DateLastImported": null, + "ID": 21, + "Title": "RWE Mobility" + }, + { + "WebsiteURL": "http://www.chademo.com", + "Comments": null, + "DataProviderStatusType": { + "IsProviderEnabled": true, + "ID": 100, + "Title": "Not Currently Used/Imported" + }, + "IsRestrictedEdit": false, + "IsOpenDataLicensed": false, + "IsApprovedImport": false, + "License": null, + "DateLastImported": null, + "ID": 22, + "Title": "CHAdeMO.com" + }, + { + "WebsiteURL": "http://www.esb.ie/electric-cars/", + "Comments": null, + "DataProviderStatusType": { + "IsProviderEnabled": true, + "ID": 20, + "Title": "Automated Import" + }, + "IsRestrictedEdit": false, + "IsOpenDataLicensed": false, + "IsApprovedImport": false, + "License": null, + "DateLastImported": "2016-05-29T07:34:20.087Z", + "ID": 23, + "Title": "ESB eCars" + }, + { + "WebsiteURL": "http://www.addenergietechnologies.com/", + "Comments": null, + "DataProviderStatusType": { + "IsProviderEnabled": true, + "ID": 30, + "Title": "Partially Automated (Ad-Hoc Import)" + }, + "IsRestrictedEdit": false, + "IsOpenDataLicensed": true, + "IsApprovedImport": true, + "License": "http://creativecommons.org/licenses/by/3.0", + "DateLastImported": "2019-06-26T09:00:39.553Z", + "ID": 24, + "Title": "AddÉnergie Technologies Inc." + }, + { + "WebsiteURL": "http://icaen.gencat.cat/", + "Comments": null, + "DataProviderStatusType": { + "IsProviderEnabled": true, + "ID": 30, + "Title": "Partially Automated (Ad-Hoc Import)" + }, + "IsRestrictedEdit": false, + "IsOpenDataLicensed": true, + "IsApprovedImport": true, + "License": "General public data", + "DateLastImported": "2016-03-03T14:18:07.287Z", + "ID": 25, + "Title": "Catalan Energy Institute (ICAEN)" + }, + { + "WebsiteURL": "http://www.oplaadpalen.nl/", + "Comments": null, + "DataProviderStatusType": { + "IsProviderEnabled": true, + "ID": 20, + "Title": "Automated Import" + }, + "IsRestrictedEdit": false, + "IsOpenDataLicensed": true, + "IsApprovedImport": true, + "License": "Licensed under Attribution-NonCommercial-ShareAlike 3.0 : http://creativecommons.org/licenses/by-nc-sa/3.0/", + "DateLastImported": "2016-06-04T03:04:53.05Z", + "ID": 26, + "Title": "Oplaadpalen.nl" + }, + { + "WebsiteURL": "https://www.placetoplug.com", + "Comments": null, + "DataProviderStatusType": { + "IsProviderEnabled": true, + "ID": 30, + "Title": "Partially Automated (Ad-Hoc Import)" + }, + "IsRestrictedEdit": false, + "IsOpenDataLicensed": false, + "IsApprovedImport": false, + "License": null, + "DateLastImported": null, + "ID": 27, + "Title": "Place To Plug" + }, + { + "WebsiteURL": "https://www.data.gouv.fr/fr/datasets/fichier-consolide-des-bornes-de-recharge-pour-vehicules-electriques/", + "Comments": null, + "DataProviderStatusType": { + "IsProviderEnabled": true, + "ID": 20, + "Title": "Automated Import" + }, + "IsRestrictedEdit": false, + "IsOpenDataLicensed": true, + "IsApprovedImport": true, + "License": "Open License: https://www.etalab.gouv.fr/wp-content/uploads/2014/05/Licence_Ouverte.pdf", + "DateLastImported": "2020-08-27T05:07:20.337Z", + "ID": 28, + "Title": "data.gouv.fr" + }, + { + "WebsiteURL": "https://bundesnetzagentur.de", + "Comments": null, + "DataProviderStatusType": { + "IsProviderEnabled": true, + "ID": 20, + "Title": "Automated Import" + }, + "IsRestrictedEdit": false, + "IsOpenDataLicensed": true, + "IsApprovedImport": true, + "License": "Provided by Bundesnetzagentur.de under the CC-BY 4.0 license", + "DateLastImported": "2021-07-12T02:21:34.507Z", + "ID": 29, + "Title": "Bundesnetzagentur.de" + } + ], + "Operators": [ + { + "WebsiteURL": null, + "Comments": "For use when the operator of the equipment is a single business owner connected to the location and equipment is not part of a larger network", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 45, + "Title": "(Business Owner at Location)" + }, + { + "WebsiteURL": null, + "Comments": "For use when the operator is a home owner or private individual making their own facilities available to the public", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": true, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 44, + "Title": "(Private Residence/Individual)" + }, + { + "WebsiteURL": null, + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": null, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 1, + "Title": "(Unknown Operator)" + }, + { + "WebsiteURL": "https://www.aae.at/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3333, + "Title": "AAE" + }, + { + "WebsiteURL": "http://www.avinc.com/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 26, + "Title": "AeroVironment" + }, + { + "WebsiteURL": "https://www.afconev.co.il/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3435, + "Title": "Afcon (Israel)" + }, + { + "WebsiteURL": "https://www.agsm.it/I-servizi/Electrify-Verona", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 118, + "Title": "AGSM Electrify Verona" + }, + { + "WebsiteURL": "https://www.aimove.it", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3463, + "Title": "AIMove" + }, + { + "WebsiteURL": "https://www.aldi-sued.de/de/nachhaltigkeit/neuigkeiten/e-ladestationen.html", + "Comments": null, + "PhonePrimaryContact": "08008002534", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3464, + "Title": "ALDI SÜD" + }, + { + "WebsiteURL": "http://www.alfapower.co.uk/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3326, + "Title": "Alfapower (UK)" + }, + { + "WebsiteURL": "http://www.alfen.com/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 180, + "Title": "Alfen" + }, + { + "WebsiteURL": "https://alizecharge.com/en/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3336, + "Title": "Alizé" + }, + { + "WebsiteURL": "https://alizecharge.com/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3410, + "Title": "Alizé Liberté" + }, + { + "WebsiteURL": "http://www.allego.eu/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@allego.eu", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 103, + "Title": "Allego BV" + }, + { + "WebsiteURL": "http://www.alterbase86.soregies.fr/portal/#/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "service-recharge@soregies.fr", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3383, + "Title": "AlterBase - Sorégies (FR)" + }, + { + "WebsiteURL": "http://www.amb.cat/en/web/mobilitat/mobilitat-sostenible/electrolineres", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3305, + "Title": "AMB (Àrea metropolitana de Barcelona)" + }, + { + "WebsiteURL": "http://nou.amersam.cat/", + "Comments": null, + "PhonePrimaryContact": " +34 977 300 006", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "amersam@amersam.com", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 212, + "Title": "Amersam" + }, + { + "WebsiteURL": "https://www.aral.de/de/global/retail/pulse.html", + "Comments": "BP's brand name in Germany", + "PhonePrimaryContact": "0049 234 315-0", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "nfo@aral.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3455, + "Title": "Aral pulse" + }, + { + "WebsiteURL": "http://www.auto-bleue.org/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 56, + "Title": "Auto Bleue" + }, + { + "WebsiteURL": "https://www.autoenterprise.com.ua/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3362, + "Title": "Autoenterprise / АвтоЭнтерпрайз" + }, + { + "WebsiteURL": "https://www.autolib.eu/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 53, + "Title": "Autolib (Paris)" + }, + { + "WebsiteURL": "http://autopildyk.lt/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "pagalba@autopildyk.lt", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3284, + "Title": "autoPilDYK" + }, + { + "WebsiteURL": "https://www.avacon.de/", + "Comments": null, + "PhonePrimaryContact": "+49 5351 1230", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@avacon.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3303, + "Title": "Avacon" + }, + { + "WebsiteURL": null, + "Comments": "Obsolete inductive paddle charging", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 43, + "Title": "AVCON" + }, + { + "WebsiteURL": "https://www.axpo.com/axpo/it/it/chi-siamo/localita-europa/sedi-italia.html", + "Comments": "IT*AXP", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3352, + "Title": "Axpo Energy Solutions Italia" + }, + { + "WebsiteURL": "https://azra.ca/en/", + "Comments": null, + "PhonePrimaryContact": "450 477-8008", + "PhoneSecondaryContact": "1-844-279-2972", + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@reseauazra.com", + "FaultReportEmail": "info@reseauazra.com", + "IsRestrictedEdit": false, + "ID": 186, + "Title": "Azra Network" + }, + { + "WebsiteURL": "https://www.badenova.de/web/Privatkunden/E-Mobilit%C3%A4t/%C3%96ffentliches-Laden/index-2.jsp", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "e-mobility@badenova.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3292, + "Title": "Badenova (DE)" + }, + { + "WebsiteURL": "https://ev.bchydro.com", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3385, + "Title": "BC Hydro" + }, + { + "WebsiteURL": "https://www.bec.energy/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3327, + "Title": "Be Charge (Italy)" + }, + { + "WebsiteURL": "http://www.be-emobil.de/", + "Comments": null, + "PhonePrimaryContact": "+49 30 20847590", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "dialog@be-emobil.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 214, + "Title": "be emobil" + }, + { + "WebsiteURL": "https://has-to-be.com", + "Comments": "also known as has.to.be", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3261, + "Title": "Be Energised (has-to-be)" + }, + { + "WebsiteURL": "http://www.becharged.eu/", + "Comments": null, + "PhonePrimaryContact": "+32 (0)9 395.05.93", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": null, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@becharged.eu", + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 94, + "Title": "BeCharged" + }, + { + "WebsiteURL": "http://belib.paris/", + "Comments": null, + "PhonePrimaryContact": "09.69.322.500 (7j/7 de 7h à 22h)", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "contact@sodetrel.fr", + "FaultReportEmail": "sav@sodetrel.fr", + "IsRestrictedEdit": false, + "ID": 1235, + "Title": "Belib’" + }, + { + "WebsiteURL": "http://www.belorusneft.by/beloil-map/?lang=en", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3268, + "Title": "Belorusneft" + }, + { + "WebsiteURL": "https://www.bigge-energie.de/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3443, + "Title": "BIGGIE Energie" + }, + { + "WebsiteURL": "https://blinkcharging.gr/en/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3426, + "Title": "Blink Charging Europe" + }, + { + "WebsiteURL": "http://www.blinknetwork.com/", + "Comments": "Membership based charging network, part of Car Charging Group, inc.", + "PhonePrimaryContact": "888.998.BLINK (2546)", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": "https://prod.blinknetwork.com/membership.html", + "ContactEmail": "support@blinknetwork.com", + "FaultReportEmail": "support@blinknetwork.com", + "IsRestrictedEdit": false, + "ID": 9, + "Title": "Blink Network/ECOtality" + }, + { + "WebsiteURL": "http://www.bluecorner.be/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 36, + "Title": "Blue Corner (Belgium)" + }, + { + "WebsiteURL": "https://www.bluemarblecharging.com/", + "Comments": null, + "PhonePrimaryContact": "+31 850186990", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": "Info@bluemarblecharging.com", + "IsRestrictedEdit": false, + "ID": 3441, + "Title": "Blue Marble Charging" + }, + { + "WebsiteURL": "https://www.bluetorino.eu/ricarica", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3331, + "Title": "BLUETORINO" + }, + { + "WebsiteURL": "https://www.bppulse.co.uk/", + "Comments": "Formerly known as Polar Network, or BP Chargemaster", + "PhonePrimaryContact": "01582 400331", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "polarenquiries@chargemasterplc.com", + "FaultReportEmail": "polarenquiries@chargemasterplc.com", + "IsRestrictedEdit": false, + "ID": 32, + "Title": "BP Pulse" + }, + { + "WebsiteURL": "http://www.bs-energy.de/engagement/umwelt/elektromobilitaet/elektrotankstellen/", + "Comments": null, + "PhonePrimaryContact": " 0531 3838000", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "energieberatung@bs-energy.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 129, + "Title": "BS Energie" + }, + { + "WebsiteURL": "https://cargacoches.com/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3459, + "Title": "Cargacoches" + }, + { + "WebsiteURL": "https://www.celsia.com/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3304, + "Title": "Celsia" + }, + { + "WebsiteURL": "http://www.elektromobilita.cz/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 115, + "Title": "ČEZ" + }, + { + "WebsiteURL": "https://char.gy", + "Comments": "different organisation to similarly named organisation in Luxembourg", + "PhonePrimaryContact": "0800 086 9606", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3345, + "Title": "Char.gy" + }, + { + "WebsiteURL": "http://www.fortum.no/hurtigladere", + "Comments": null, + "PhonePrimaryContact": "22 55 54 24", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "chargedrive.no@fortum.com", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 202, + "Title": "Charge & Drive (Fortum - NO)" + }, + { + "WebsiteURL": "https://www.volkswagenleasing.de/de/home/mobilitaetsdienstleistungen/europa_tank_servicekarten/charge-fuel-card.html", + "Comments": null, + "PhonePrimaryContact": "+49 531 212-03", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "tankkarten@vwfs.com", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 215, + "Title": "Charge & Fuel" + }, + { + "WebsiteURL": "http://www.chargeyourcar.org.uk/", + "Comments": null, + "PhonePrimaryContact": "0191 26 50 500", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "admin@chargeyourcar.org.uk", + "FaultReportEmail": "admin@chargeyourcar.org.uk", + "IsRestrictedEdit": false, + "ID": 20, + "Title": "Charge Your Car" + }, + { + "WebsiteURL": "https://charge.net.nz/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 229, + "Title": "charge.net.nz" + }, + { + "WebsiteURL": "https://chargefox.com", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3339, + "Title": "Chargefox" + }, + { + "WebsiteURL": "https://chargegrid.in/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "tech.support@magentapower.in", + "FaultReportEmail": "tech.support@magentapower.in", + "IsRestrictedEdit": false, + "ID": 3374, + "Title": "ChargeGrid" + }, + { + "WebsiteURL": "http://www.chargeit-mobility.com/", + "Comments": null, + "PhonePrimaryContact": "+49 9321 268 -0700", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@chargeit-mobility.com", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 101, + "Title": "ChargeIT mobility" + }, + { + "WebsiteURL": "http://www.chargelounge.de/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@chargelounge.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 96, + "Title": "ChargeLounge" + }, + { + "WebsiteURL": null, + "Comments": null, + "PhonePrimaryContact": "+44 (0)1582 400331", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 8, + "Title": "Chargemaster" + }, + { + "WebsiteURL": "http://chargenet.lk/", + "Comments": null, + "PhonePrimaryContact": "+94-1-5551-551 ", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@vega.lk", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 227, + "Title": "chargeNET (lk)" + }, + { + "WebsiteURL": "https://www.chargenow.com/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 173, + "Title": "ChargeNow" + }, + { + "WebsiteURL": "http://chargeplacescotland.org/", + "Comments": "Operated by ChargeYourCar on behalf of Transport Scotland. CYC cards/app accepted", + "PhonePrimaryContact": "0141 648 0750", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3315, + "Title": "Chargeplace Scotland" + }, + { + "WebsiteURL": "http://www.chargepoint.net/", + "Comments": null, + "PhonePrimaryContact": "1-888-758-4389", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "support@coulombtech.com", + "FaultReportEmail": "support@coulombtech.com", + "IsRestrictedEdit": null, + "ID": 5, + "Title": "ChargePoint (Coulomb Technologies)" + }, + { + "WebsiteURL": "http://chargestar.com.au/", + "Comments": null, + "PhonePrimaryContact": "1300 661 895", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3310, + "Title": "Chargestar (AU)" + }, + { + "WebsiteURL": "https://chargev.my/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "chargev@greentechmalaysia.my", + "FaultReportEmail": "chargev@greentechmalaysia.my", + "IsRestrictedEdit": false, + "ID": 3338, + "Title": "chargEV" + }, + { + "WebsiteURL": "https://chargy.lu/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3321, + "Title": "Chargy (LU)" + }, + { + "WebsiteURL": "http://www.lecircuitelectrique.com", + "Comments": null, + "PhonePrimaryContact": "1 855 999-8378", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": null, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "infocircuitelectrique@caaquebec.com", + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 90, + "Title": "Circuit Electrique" + }, + { + "WebsiteURL": "https://cityev.net/user-instructions/", + "Comments": "Lamp post mounted chargers, plugsurfing RFID or app", + "PhonePrimaryContact": "+44 23 9319 0109", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3349, + "Title": "City EV" + }, + { + "WebsiteURL": "https://www.clever.dk/", + "Comments": null, + "PhonePrimaryContact": "+45 8230 3030", + "PhoneSecondaryContact": "8230 3030", + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "kundeservice@clever.dk", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 185, + "Title": "CLEVER" + }, + { + "WebsiteURL": null, + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 31, + "Title": "Clipper Creek" + }, + { + "WebsiteURL": "https://www.cnr.tm.fr", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3360, + "Title": "CNR (Compagnie Nationale du Rhône)" + }, + { + "WebsiteURL": "https://www.cogeserenergia.it/mosaic/search/it/mobilita-elettrica", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3474, + "Title": "Cogeser Energia (Italia)" + }, + { + "WebsiteURL": "https://www.comfortcharge.de/", + "Comments": "Deutsche Telekom Comfortcharge", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3369, + "Title": "Comfortcharge" + }, + { + "WebsiteURL": "https://plugcharge.continente.pt", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3431, + "Title": "Continente Plug&Charge" + }, + { + "WebsiteURL": "https://ww2.copec.cl/voltex", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3364, + "Title": "Copec Voltex" + }, + { + "WebsiteURL": "http://www.da-emobil.com/ladenetz", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3320, + "Title": "da emobil" + }, + { + "WebsiteURL": "https://www.dewa.gov.ae/", + "Comments": "Dubai Electricity and Water Authority (DEWA)", + "PhonePrimaryContact": "+971 4- 601 9999", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3263, + "Title": "DEWA" + }, + { + "WebsiteURL": "http://www.drehstromnetz.de", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 66, + "Title": "Drehstromnetz" + }, + { + "WebsiteURL": "http://driv-eco.com/index.php/en/home-eng/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3316, + "Title": "Drive Eco" + }, + { + "WebsiteURL": "https://www.driwe.eu/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3332, + "Title": "Driwe" + }, + { + "WebsiteURL": "https://mobility.dufercoenergia.com/", + "Comments": null, + "PhonePrimaryContact": "+39 345 7051126", + "PhoneSecondaryContact": "800 92 22 00", + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "mobility@dueenergie.com", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3267, + "Title": "Duferco Energie" + }, + { + "WebsiteURL": "http://www.ekobonus.cz/ekologicka-doprava/elektromobilita", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 192, + "Title": "E.ON (CZ)" + }, + { + "WebsiteURL": "https://www.eon.de/de/eonde/pk/produkteUndPreise/E.ON_eMobil/index.htm", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 46, + "Title": "E.ON (DE)" + }, + { + "WebsiteURL": "https://www.eon.dk/privat/strom-til-din-elbil.html", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3251, + "Title": "E.ON (DK)" + }, + { + "WebsiteURL": "https://www.eon.hu/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3359, + "Title": "E.ON (HU)" + }, + { + "WebsiteURL": "https://www.eonenergy.com/eon-drive-ev-charging.html", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3403, + "Title": "E.ON Drive" + }, + { + "WebsiteURL": "https://www.eac.com.cy/En/CustomerService/eCharge/Pages/default.aspx", + "Comments": "Electricity Authority of Cyprus", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3294, + "Title": "EAC e-charge" + }, + { + "WebsiteURL": "http://www.eam.de/ueber-uns/unternehmensprofil/standorte/", + "Comments": null, + "PhonePrimaryContact": " ", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 140, + "Title": "EAM" + }, + { + "WebsiteURL": "http://www.easy-4-you.ch", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3314, + "Title": "Easy4You" + }, + { + "WebsiteURL": "https://easycharger.es/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3324, + "Title": "EasyCharger" + }, + { + "WebsiteURL": "https://easygo.ie/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 1241, + "Title": "EasyGO (aka Carcharger.ie)" + }, + { + "WebsiteURL": "https://easypark.fi/", + "Comments": "Parking operator, EV chargers activated by mobile phone app", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3302, + "Title": "Easypark" + }, + { + "WebsiteURL": "http://www.eaton.com", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 42, + "Title": "EATON" + }, + { + "WebsiteURL": "https://www.eborn.fr/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3408, + "Title": "eborn" + }, + { + "WebsiteURL": "http://www.ecarni.com/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": null, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "ecar@drdni.gov.uk", + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 93, + "Title": "E-Car" + }, + { + "WebsiteURL": "http://e-charge.ro/", + "Comments": "Renovatio E-Charge", + "PhonePrimaryContact": "+40 372 756 599", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "office@e-charge.ro", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3271, + "Title": "e-Charge (Romania)" + }, + { + "WebsiteURL": "http://www.echargenet.com", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3309, + "Title": "echargenet - State Grid Corportation of China" + }, + { + "WebsiteURL": "https://ecocharge77.fr", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3413, + "Title": "EcoCharge77" + }, + { + "WebsiteURL": "http://www.ecoplug.be/index.html", + "Comments": null, + "PhonePrimaryContact": "+32 (0) 483 425 255", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": null, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@ecoplug.be", + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 77, + "Title": "Ecoplug" + }, + { + "WebsiteURL": "http://www.ecospazio.it/", + "Comments": null, + "PhonePrimaryContact": "+39 0464 401121", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": null, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@ecospazio.it", + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 83, + "Title": "Ecospazio (Italy)" + }, + { + "WebsiteURL": "http://www.ecotap.nl/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 179, + "Title": "Ecotap" + }, + { + "WebsiteURL": null, + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3312, + "Title": "EDF" + }, + { + "WebsiteURL": "http://www.edp.pt/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3276, + "Title": "EDP" + }, + { + "WebsiteURL": "http://www.edp.pt/", + "Comments": null, + "PhonePrimaryContact": " +351 21 001 2500", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 199, + "Title": "EDP MOP" + }, + { + "WebsiteURL": "https://plugandgo.com.br/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3445, + "Title": "EDP Plug & Go" + }, + { + "WebsiteURL": "http://www.edrop.ch/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@edrop.ch", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 208, + "Title": "eDrop" + }, + { + "WebsiteURL": "http://www.ee-mobil.de/", + "Comments": null, + "PhonePrimaryContact": "+49 2520 93118 0", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@ee-mobil.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3264, + "Title": "EE-Mobil" + }, + { + "WebsiteURL": "http://www.ewb-duderstadt.de/de/Strom/Ausgezeichnet.html", + "Comments": null, + "PhonePrimaryContact": "(05527) 911-0", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@eew-duderstadt.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 171, + "Title": "EEW Duderstadt" + }, + { + "WebsiteURL": "https://www.resaplace.com/", + "Comments": "Resaplace Parking", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3281, + "Title": "Effia" + }, + { + "WebsiteURL": "http://www.eins.de/privatkunden/strom/elektromobilitaet/", + "Comments": null, + "PhonePrimaryContact": "+49 371 525-5403", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "Robby.Hartl@eins.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 2243, + "Title": "eins" + }, + { + "WebsiteURL": "https://www.ejoin.eu/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3415, + "Title": "ejoin" + }, + { + "WebsiteURL": "https://www.ekomobil.it", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3342, + "Title": "Ekomobil" + }, + { + "WebsiteURL": "http://www.e-laad.nl", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": null, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 29, + "Title": "e-Laad" + }, + { + "WebsiteURL": "https://www.electricblueuk.com/", + "Comments": null, + "PhonePrimaryContact": "+44 1727 807 263", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3391, + "Title": "Electric Blue UK" + }, + { + "WebsiteURL": "https://electrichighway.gridserve.com", + "Comments": "Formerly known as the Ecotricity Electric Highway", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 24, + "Title": "Electric Highway (UK)" + }, + { + "WebsiteURL": null, + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3406, + "Title": "Electric Highway Tasmania" + }, + { + "WebsiteURL": "http://electric-driving.colruytgroup.com", + "Comments": null, + "PhonePrimaryContact": "+32 (0)2 363 55 45", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "electric-driving@colruytgroup.com", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 232, + "Title": "electric-driving.colruytgroup.com" + }, + { + "WebsiteURL": "https://www.electrifyamerica.com/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3318, + "Title": "Electrify America" + }, + { + "WebsiteURL": "https://www.electrify-canada.ca/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3400, + "Title": "Electrify Canada" + }, + { + "WebsiteURL": "http://www.electrodrive-europe.com/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 67, + "Title": "ElectroDrive" + }, + { + "WebsiteURL": "http://www.electrodrive-salzburg.at", + "Comments": null, + "PhonePrimaryContact": "0800 / 810 102", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "office@electrodrive-salzburg.at", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 141, + "Title": "ElectroDrive Salzburg" + }, + { + "WebsiteURL": "http://www.mark-e.de/", + "Comments": null, + "PhonePrimaryContact": " +49 2331 12322437", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "electrodrive@mark-e.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 184, + "Title": "ElectroDrive/Mark-E (DE)" + }, + { + "WebsiteURL": "https://www.electromaps.com/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3401, + "Title": "Electromaps" + }, + { + "WebsiteURL": "https://electroukraine.com.ua/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3390, + "Title": "Electroukraine" + }, + { + "WebsiteURL": "http://www.elektro-ljubljana.si/1/Obnovljivi-viri-energije/Polnilna-mesta-za-elektricna-vozila.aspx", + "Comments": null, + "PhonePrimaryContact": "+386 1 230 40 00", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@elektro-ljubljana.si", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3258, + "Title": "Elektro Ljublana" + }, + { + "WebsiteURL": "http://www.elektromotive.com", + "Comments": null, + "PhonePrimaryContact": "+ 44 (0)1273 704775", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@elektromotive.com", + "FaultReportEmail": "info@elektromotive.com", + "IsRestrictedEdit": null, + "ID": 2, + "Title": "Elektrobay (UK)" + }, + { + "WebsiteURL": "http://www.elektromotive.com", + "Comments": null, + "PhonePrimaryContact": "+ 44 (0)1273 704775", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": "http://www.elektromotive.com/html/application_forms.php", + "ContactEmail": "info@elektromotive.com", + "FaultReportEmail": "info@elektromotive.com", + "IsRestrictedEdit": null, + "ID": 16, + "Title": "Elektromotive (UK)" + }, + { + "WebsiteURL": "http://elen.hep.hr/ELEN-charging-stations.aspx", + "Comments": null, + "PhonePrimaryContact": "+385 163 22123", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3311, + "Title": "Elen" + }, + { + "WebsiteURL": "https://www.elintacharge.com/en/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3414, + "Title": "Elinta Charge" + }, + { + "WebsiteURL": "http://ella.at/", + "Comments": "uses the Be Energised backend", + "PhonePrimaryContact": "+43 800 203004", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3287, + "Title": "Ella" + }, + { + "WebsiteURL": "https://www.elli.eco/de/startseite", + "Comments": "DE*GCE", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3437, + "Title": "Elli (Volkswagen Group Charging GmbH)" + }, + { + "WebsiteURL": "http://www.elmo.ee/", + "Comments": "When calling 651 1911 the price of the call depends on the selected service package. When calling 1911, the price of the call is 0.23 euros (including VAT). The price of content service of calls to call service numbers does not depend on the service package of a customer; it is the same for all callers.", + "PhonePrimaryContact": "6 511 911", + "PhoneSecondaryContact": "1911", + "IsPrivateIndividual": null, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "elmo@kredex.ee", + "FaultReportEmail": "tugi@elmo.ee", + "IsRestrictedEdit": null, + "ID": 76, + "Title": "ELMO" + }, + { + "WebsiteURL": "http://www.e-autozas.hu/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 187, + "Title": "ELMŰ" + }, + { + "WebsiteURL": "https://elo.city", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3368, + "Title": "Elocity" + }, + { + "WebsiteURL": "http://www.friedrichshafen.de/wirtschaft-verkehr/emma", + "Comments": null, + "PhonePrimaryContact": "+49 7541 603380", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@fn-dienste.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 1238, + "Title": "emma" + }, + { + "WebsiteURL": "https://e-mobi.hu/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3319, + "Title": "E-Mobi" + }, + { + "WebsiteURL": "http://www.emobitaly.it/come-ricaricare/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3282, + "Title": "Emobitaly (Italy)" + }, + { + "WebsiteURL": "http://www.e-moving.it/", + "Comments": null, + "PhonePrimaryContact": "800035151", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "e-moving@a2a.eu", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 82, + "Title": "E-moving (Italy)" + }, + { + "WebsiteURL": "http://www.empora.eu", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": null, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 68, + "Title": "Empora" + }, + { + "WebsiteURL": "https://www.enbw.com/privatkunden/tarife-und-produkte/e-mobilitaet/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": null, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 86, + "Title": "EnBW (D)" + }, + { + "WebsiteURL": "http://www.endesa.es/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 207, + "Title": "Endesa" + }, + { + "WebsiteURL": "https://www.eneco-emobility.com/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3394, + "Title": "Eneco" + }, + { + "WebsiteURL": "https://eneldrive.enelx.com/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 80, + "Title": "Enel X" + }, + { + "WebsiteURL": " https://enercharge.at/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3405, + "Title": "Enercharge" + }, + { + "WebsiteURL": "https://www.enercity.de/privatkunden/mobilitaet/e-mobilitaet/formular-reg-e-tanken/index.jsx", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 121, + "Title": "EnerCity" + }, + { + "WebsiteURL": "https://www.ene-eifel.de/privatkunden-strom/e-mobilität", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "service@ene-eifel.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3260, + "Title": "Energie der Eifel" + }, + { + "WebsiteURL": "http://energiedienst.de", + "Comments": null, + "PhonePrimaryContact": "+49 7623 921818", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "kundenservice@energiedienst.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 224, + "Title": "EnergieDienst" + }, + { + "WebsiteURL": "http://ebt-halblech.de/", + "Comments": null, + "PhonePrimaryContact": "+49 8368 9280", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "kontakt@ebt-halblech.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 219, + "Title": "Energieversorgung Buching-Trauchgau" + }, + { + "WebsiteURL": "http://www.enerhub.it/ricarica/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3370, + "Title": "Enerhub" + }, + { + "WebsiteURL": "http://www.enewa.de/", + "Comments": null, + "PhonePrimaryContact": "0228 / 377368 0", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@enewa.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 172, + "Title": "ENEWA" + }, + { + "WebsiteURL": "https://www.enex.cl/estaciones-de-servicios/enex-e-pro/", + "Comments": null, + "PhonePrimaryContact": "600 350 2000", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "enexdirecto@enex.cl", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3461, + "Title": "Enex E-Pro" + }, + { + "WebsiteURL": "http://www.enovates.com/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 181, + "Title": "eNovates" + }, + { + "WebsiteURL": "http://www.enovos.lu/particuliers/ecomobilite", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 52, + "Title": "Enovos" + }, + { + "WebsiteURL": "http://www.enspirion.pl/?page_id=728", + "Comments": null, + "PhonePrimaryContact": "+48 58 888 88 00", + "PhoneSecondaryContact": "+48 785 888 805", + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "biuro@enspirion.pl", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 216, + "Title": "Enspirion" + }, + { + "WebsiteURL": "https://www.entega.de/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3297, + "Title": "Entega" + }, + { + "WebsiteURL": "https://www.eocharging.com/", + "Comments": null, + "PhonePrimaryContact": "+44 333 772 0383 ", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3298, + "Title": "EO Charging" + }, + { + "WebsiteURL": "https://www.eondrive.ro/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3422, + "Title": "eondrive.ro" + }, + { + "WebsiteURL": "https://www.epower.ie/", + "Comments": "Mostly in Ireland, but some outside the country", + "PhonePrimaryContact": "1800 99 88 77", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@epower.ie", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3449, + "Title": "ePower" + }, + { + "WebsiteURL": "http://esarj.com/uyelik", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 70, + "Title": "Eşarj (TR)" + }, + { + "WebsiteURL": "http://www.esb.ie/electric-cars/index.jsp", + "Comments": null, + "PhonePrimaryContact": " 1890 372 387", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "ecars@esb.ie", + "FaultReportEmail": "ecars@esb.ie", + "IsRestrictedEdit": null, + "ID": 22, + "Title": "ESB Ecars" + }, + { + "WebsiteURL": "https://www.esb-evsolutions.co.uk/", + "Comments": "Distinct network from the one they operate on the island of Ireland", + "PhonePrimaryContact": "+44 345 609 0372", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3357, + "Title": "ESB EV-Solutions (UK)" + }, + { + "WebsiteURL": "http://www.essent.nl/content/particulier/producten/elektrisch_rijden/index.html", + "Comments": null, + "PhonePrimaryContact": "0800 377 36 83", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": null, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "elektrischrijden@essent.nl", + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 78, + "Title": "Essent (NL)" + }, + { + "WebsiteURL": "http://www.e-mobilitat.cat/", + "Comments": null, + "PhonePrimaryContact": "+34 900 250 260", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 209, + "Title": "Estabanell Energia" + }, + { + "WebsiteURL": "http://www.estonteco.eu/live/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 205, + "Title": "Estonteca" + }, + { + "WebsiteURL": "http://www.etecnic.es", + "Comments": null, + "PhonePrimaryContact": " (+34) 977 276 952", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "etecnic@etecnic.es", + "FaultReportEmail": "etecnic@etecnic.es", + "IsRestrictedEdit": false, + "ID": 3377, + "Title": "Etecnic" + }, + { + "WebsiteURL": "http://www.etecnic.es/", + "Comments": null, + "PhonePrimaryContact": "+34 977 276 952", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3381, + "Title": "eTecnic" + }, + { + "WebsiteURL": "http://etop.sk/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 222, + "Title": "ETOP" + }, + { + "WebsiteURL": "http://www.e-totem.fr/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 55, + "Title": "e-totem" + }, + { + "WebsiteURL": "https://www.evconnect.com/", + "Comments": null, + "PhonePrimaryContact": "866) 816-7584", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@evconnect.com", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3372, + "Title": "EV Connect" + }, + { + "WebsiteURL": "https://evdirect.hu/", + "Comments": null, + "PhonePrimaryContact": "+36 30 550 9858", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@evdirect.hu", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3424, + "Title": "EV Direct" + }, + { + "WebsiteURL": "https://www.ev-dot.com", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3446, + "Title": "EV Dot" + }, + { + "WebsiteURL": "https://evenergygroup.com/e", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3399, + "Title": "EV Energy Group (FCN)" + }, + { + "WebsiteURL": "https://evloader.com/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3428, + "Title": "EV Loader" + }, + { + "WebsiteURL": "http://www.evbility.eu/", + "Comments": null, + "PhonePrimaryContact": "+390396015174", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": null, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@evbility.com", + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 87, + "Title": "EVbility (Italy)" + }, + { + "WebsiteURL": "http://www.ev-box.com", + "Comments": null, + "PhonePrimaryContact": "+31 (0)88 77 55 444", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": null, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@ev-box.com", + "FaultReportEmail": "info@ev-box.com", + "IsRestrictedEdit": null, + "ID": 73, + "Title": "EV-Box" + }, + { + "WebsiteURL": "https://evcharge.online/", + "Comments": "Rolec. Pre-payment, minimum topup £5.00", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "Contact@power-portal.co.uk", + "FaultReportEmail": "Contact@power-portal.co.uk", + "IsRestrictedEdit": false, + "ID": 3295, + "Title": "evcharge.online" + }, + { + "WebsiteURL": "https://evconnect.ro/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3418, + "Title": "evconnect.ro" + }, + { + "WebsiteURL": "http://www.evd-dormagen.de/", + "Comments": null, + "PhonePrimaryContact": "+49 2133 97150", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3254, + "Title": "Evd Dormagen" + }, + { + "WebsiteURL": " https://user.evedge.co.il/#/portal/locations", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3434, + "Title": "EVEdge (Israel)" + }, + { + "WebsiteURL": "http://evgateway.com/", + "Comments": null, + "PhonePrimaryContact": "+1 949-945-2000", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3389, + "Title": "EVGateway" + }, + { + "WebsiteURL": "https://www.evgo.com/", + "Comments": "Imported by ADFC import", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 15, + "Title": "eVgo Network" + }, + { + "WebsiteURL": "http://goevie.com.au/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3398, + "Title": "Evie" + }, + { + "WebsiteURL": "https://www.eviso.it", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3472, + "Title": "eVISO" + }, + { + "WebsiteURL": "http://www.swiss-emobility.ch/home/evite.html", + "Comments": null, + "PhonePrimaryContact": "+41 (0)58 827 34 09 ", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@swiss-emobility.ch", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 110, + "Title": "EVite (ch)" + }, + { + "WebsiteURL": "https://www.evl.de/e-mobilitaet/e-tanken-in-limburg/", + "Comments": "Uses NewMotion backend", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3351, + "Title": "EVL (de)" + }, + { + "WebsiteURL": "https://ev-mag.ro/stations/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3419, + "Title": "EV-Mag" + }, + { + "WebsiteURL": "http://www.evmapa.cz", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 221, + "Title": "Evmapa (CZ)" + }, + { + "WebsiteURL": "http://www.evnet.nl/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 178, + "Title": "EVnetNL" + }, + { + "WebsiteURL": "https://e-voltt.nl/", + "Comments": null, + "PhonePrimaryContact": "+31(0)85 1054135", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "nederland@e-voltt.com", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3442, + "Title": "e-VOLTT" + }, + { + "WebsiteURL": "https://www.evpass.ch/", + "Comments": "Android & IOS Apps, Swisspass travel RFID can be registered", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3272, + "Title": "EVPass (CH)" + }, + { + "WebsiteURL": "http://www.ev-point.be", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": null, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 49, + "Title": "EV-Point" + }, + { + "WebsiteURL": "https://www.energieversorgung-sylt.de/mobilitaet/e-mobilitaet/", + "Comments": null, + "PhonePrimaryContact": "04651 925-925", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "kundenservice@energieversorgung-sylt.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 137, + "Title": "EVS Energieversorgung Sylt" + }, + { + "WebsiteURL": "", + "Comments": "Imported by ADFC import", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 11, + "Title": "EVSE LLC WebNet" + }, + { + "WebsiteURL": "https://evway.net", + "Comments": null, + "PhonePrimaryContact": "+39 02 35954219", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3291, + "Title": "Evway" + }, + { + "WebsiteURL": "http://www.evziiin.com/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3427, + "Title": "EVziiin" + }, + { + "WebsiteURL": "http://shop.e-wald.eu/produkt/e-wald-ladekarte-monatskarte/", + "Comments": null, + "PhonePrimaryContact": "+49 9923 8045-310", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@e-wald.eu", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 189, + "Title": "E-Wald" + }, + { + "WebsiteURL": "https://www.eways.se/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3444, + "Title": "eways" + }, + { + "WebsiteURL": "http://www.stadtwerke-bruchsal.de/", + "Comments": null, + "PhonePrimaryContact": "+49 7251 7060", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@stadtwerke-bruchsal.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 2241, + "Title": "EWB" + }, + { + "WebsiteURL": "http://www.ewe.de/privatkunden/ewe-stromtankstellen.php", + "Comments": null, + "PhonePrimaryContact": "04418030", + "PhoneSecondaryContact": "08001014432", + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "stromtankkarte@ewe.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 127, + "Title": "EWE" + }, + { + "WebsiteURL": "http://www.ewi-isernhagen.de/energieeffizienz/elektromobilitaet.aspx", + "Comments": null, + "PhonePrimaryContact": " 0511 6165475", + "PhoneSecondaryContact": " 0511 6165476", + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "kontakt@ewi-isernhagen.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 145, + "Title": "EWI Energiewerke Isernhagen" + }, + { + "WebsiteURL": "https://www.swp-potsdam.de/de/energie/elektromobilit%C3%A4t/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3325, + "Title": "EWP : Energie und Wasser Potsdam GmbH" + }, + { + "WebsiteURL": "http://www.ewr-e-mobil.de/", + "Comments": null, + "PhonePrimaryContact": "+49 6241 848-0", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@ewr-e-mobil.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 109, + "Title": "EWR gmbh e-mobile" + }, + { + "WebsiteURL": "http://www.fastned.nl/", + "Comments": null, + "PhonePrimaryContact": "+31 (0)20-7155316", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": null, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "contact@fastned.nl", + "FaultReportEmail": "contact@fastned.nl", + "IsRestrictedEdit": null, + "ID": 74, + "Title": "FastNed" + }, + { + "WebsiteURL": "http://recarga.fenieenergia.es/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3279, + "Title": "Fenie Energía (Spain)" + }, + { + "WebsiteURL": "https://flo.ca/", + "Comments": "RéseauVER / VERnetwork http://www.reseauver.com/ (877) 505-2674 service@reseauver.com", + "PhonePrimaryContact": "+1 877 505-2674", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@flo.ca", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 89, + "Title": "flo" + }, + { + "WebsiteURL": "http://www.flowcharging.com/", + "Comments": null, + "PhonePrimaryContact": "+31 4012734", + "PhoneSecondaryContact": "+31 4012735", + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@flow-nederland.nl", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 197, + "Title": "FLOW Charging" + }, + { + "WebsiteURL": "http://www.fortisis.eu", + "Comments": "Operator based on Greence and Cyprus", + "PhonePrimaryContact": "+30.215.54.09.814 (Greece)", + "PhoneSecondaryContact": "+357.22.31.63.18 (Cyprus)", + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@fortisis.eu", + "FaultReportEmail": "info@fortisis.eu", + "IsRestrictedEdit": false, + "ID": 85, + "Title": "FORTISIS" + }, + { + "WebsiteURL": "https://www.freshmile.com/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3379, + "Title": "Freshmile" + }, + { + "WebsiteURL": "http://www.g2mobility.com/", + "Comments": null, + "PhonePrimaryContact": "01 45 34 25 34.", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 116, + "Title": "G2mobility" + }, + { + "WebsiteURL": "http://galactico.pl/", + "Comments": null, + "PhonePrimaryContact": " +58 52 44 500", + "PhoneSecondaryContact": " +48 68 328 20 89", + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "kontakt@galactico.pl", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 218, + "Title": "Galactico.pl" + }, + { + "WebsiteURL": "http://www.gardauno.it/la-mappa-dei-punti-di-ricarica/", + "Comments": null, + "PhonePrimaryContact": "800-133 966", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 204, + "Title": "GardaUno" + }, + { + "WebsiteURL": "https://info.chargepoint.com/ge_welcome", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 1242, + "Title": "GE WattStation (No longer active)" + }, + { + "WebsiteURL": "http://www.ggew.de/UN/Elektromobilitaet", + "Comments": null, + "PhonePrimaryContact": "06251 1301-0", + "PhoneSecondaryContact": "0800 80 30 300", + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@ggew.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 163, + "Title": "GGEW" + }, + { + "WebsiteURL": "http://www.recargagic.com/", + "Comments": null, + "PhonePrimaryContact": "(+34) 902 103 498", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@recargagic.com", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 210, + "Title": "GIC" + }, + { + "WebsiteURL": "https://www.gnrgy.com", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3334, + "Title": "Gnrgy" + }, + { + "WebsiteURL": "https://gopluseauto.pl/", + "Comments": null, + "PhonePrimaryContact": "+48 515 515 243", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "biuro@gopluseauto.pl", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3450, + "Title": "GO+EAuto" + }, + { + "WebsiteURL": "https://www.gocharge.ie/charge-with-us/", + "Comments": null, + "PhonePrimaryContact": "+353 1 254 6126", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3402, + "Title": "GoCharge (IE)" + }, + { + "WebsiteURL": "http://gofastcharge.com/", + "Comments": "Accepts Hubject roaming partners of Swisscharge", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@gofastcharge.com", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3313, + "Title": "GOFAST (Gotthard Fastcharge)" + }, + { + "WebsiteURL": "http://green-frontiers.net/", + "Comments": null, + "PhonePrimaryContact": " +94 11 2884738", + "PhoneSecondaryContact": "+94710710271", + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@green-frontiers.net", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 226, + "Title": "Green Frontiers (lk)" + }, + { + "WebsiteURL": "http://greenlandmobility.it/", + "Comments": null, + "PhonePrimaryContact": "02/27208182", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": null, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "redazione@greenlandmobility.it", + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 84, + "Title": "Green Land Mobility (Italy)" + }, + { + "WebsiteURL": "http://www.greenflux.nl/", + "Comments": null, + "PhonePrimaryContact": "088 60 50 700", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@greenflux.nl", + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 63, + "Title": "Greenflux" + }, + { + "WebsiteURL": "http://www.greenlots.com", + "Comments": "Part of the Shell group.", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 59, + "Title": "GreenLots" + }, + { + "WebsiteURL": "https://greenway.sk", + "Comments": null, + "PhonePrimaryContact": "+421 2 330 56 236", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@greenway.sk", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 88, + "Title": "Greenway" + }, + { + "WebsiteURL": "https://greenwaypolska.pl/", + "Comments": null, + "PhonePrimaryContact": "+48583251077", + "PhoneSecondaryContact": "+48583251017", + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "bok@greenwaypolska.pl", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3451, + "Title": "Greenway Polska (PL)" + }, + { + "WebsiteURL": "https://www.gridcars.net/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3386, + "Title": "GridCars" + }, + { + "WebsiteURL": "https://www.gridserve.com/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3430, + "Title": "GridServe" + }, + { + "WebsiteURL": "http://gronnkontakt.no/", + "Comments": null, + "PhonePrimaryContact": "47 67 08 00 ", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3247, + "Title": "Grønn Kontakt" + }, + { + "WebsiteURL": "https://www.grupoice.com/wps/portal/ICE/Electricidad/carga-elect", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3404, + "Title": "Grupo ICE" + }, + { + "WebsiteURL": "http://www.harzenergie.de/index.cfm?fuseaction=portal.showcontent&viewmode=content&num_obj_id=30312&language=de&menu=30305&rootmenu=25325&page=30306&bp=30306", + "Comments": null, + "PhonePrimaryContact": "05522/503-9345", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "mobilitaet@harzenergie.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 122, + "Title": "Harz Energie" + }, + { + "WebsiteURL": "http://www.helen.fi/", + "Comments": null, + "PhonePrimaryContact": " 010 802 802 ", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 95, + "Title": "Helsingin Energia" + }, + { + "WebsiteURL": "https://heracomm.gruppohera.it/casa/mobilita-sostenibile/ricarica-pubblica", + "Comments": null, + "PhonePrimaryContact": "800.087.591", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3440, + "Title": "HeraRicarica Pubblica" + }, + { + "WebsiteURL": "http://www.hkevpower.com/", + "Comments": null, + "PhonePrimaryContact": "+852 2210 7122", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "contact@hkevpower.com", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 111, + "Title": "Hong Kong EV Power" + }, + { + "WebsiteURL": "https://www.hrvatskitelekom.hr/", + "Comments": "Primarily a telco, but operates some EV chargepoints", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3384, + "Title": "Hrvatski Telekom" + }, + { + "WebsiteURL": "http://www.hubsta.co.uk/en/home/", + "Comments": "UK*HUB*", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3356, + "Title": "Hubsta" + }, + { + "WebsiteURL": "https://www.iberdrola.es/clientes/hogar/movilidad-verde/recarga", + "Comments": null, + "PhonePrimaryContact": "900 22 45 22", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 2247, + "Title": "Iberdrola" + }, + { + "WebsiteURL": "https://www.ibil.es", + "Comments": null, + "PhonePrimaryContact": "902 540 810", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": null, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "ibil@ibil.es", + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 91, + "Title": "IBIL (Es)" + }, + { + "WebsiteURL": "http://inchanet.cz/products_en.html#fast_charging_station", + "Comments": null, + "PhonePrimaryContact": "+420 776 333 155", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@inchanet.cz", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 191, + "Title": "inChaNet" + }, + { + "WebsiteURL": "https://www.goincharge.com/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3343, + "Title": "Incharge" + }, + { + "WebsiteURL": "https://www.rwe-mobility.com/", + "Comments": null, + "PhonePrimaryContact": "+49(0) 800 88 88 862", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 105, + "Title": "Innogy SE (RWE eMobility)" + }, + { + "WebsiteURL": "http://instavolt.co.uk/", + "Comments": "Pay-as-you-go, charged per kWh, contactless bank card payment.", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3296, + "Title": "InstaVolt Ltd" + }, + { + "WebsiteURL": "https://www.ion.jo/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3457, + "Title": "ION (Jordan)" + }, + { + "WebsiteURL": "http://www.ionity.eu/", + "Comments": "Pan-European High-power CCS charging network joint venture of BMW Group, Daimler AG, Ford Motor Company and the Volkswagen Group", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3299, + "Title": "Ionity" + }, + { + "WebsiteURL": "https://ivycharge.com/", + "Comments": null, + "PhonePrimaryContact": "1-888-550-5155", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3416, + "Title": "IVY" + }, + { + "WebsiteURL": "https://www.izivia.com/le-reseau-izivia", + "Comments": "Formerly known as Sodetrel", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "contact@sodetrel.fr", + "FaultReportEmail": "sav@sodetrel.fr", + "IsRestrictedEdit": false, + "ID": 213, + "Title": "Izivia (Sodetrel)" + }, + { + "WebsiteURL": "https://www.jec.co.uk/your-home/electric-vehicles/charging-your-ev/", + "Comments": "Access via mechanical keyswitch, montly subscription fee.", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3288, + "Title": "Jersey Electricity Evolve" + }, + { + "WebsiteURL": "https://www.jojusolar.co.uk/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3393, + "Title": "Joju Ltd" + }, + { + "WebsiteURL": "http://www.jopetrol.com.jo/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3458, + "Title": "JoPetrol" + }, + { + "WebsiteURL": "http://www.juicepoint.co.nz/", + "Comments": null, + "PhonePrimaryContact": "+64 9 354 3869", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@juicepoint.co.nz", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 120, + "Title": "JuicePoint" + }, + { + "WebsiteURL": "https://k-lataus.fi", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3354, + "Title": "K Lataus" + }, + { + "WebsiteURL": "https://www.kelag.at/privat/kelag-autostrom-111.htm", + "Comments": null, + "PhonePrimaryContact": "+43 463 525 9660", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3285, + "Title": "Kelag AG" + }, + { + "WebsiteURL": "http://www.kiwhipass.fr/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "contact@kiwhipass.fr", + "FaultReportEmail": "assistance@kiwhipass.fr", + "IsRestrictedEdit": null, + "ID": 62, + "Title": "KiWhi Pass" + }, + { + "WebsiteURL": "https://www.e-leclerc.com/catalogue/services/la-borne-electrique", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3411, + "Title": "La Borne" + }, + { + "WebsiteURL": "https://ladefoxx.de/", + "Comments": null, + "PhonePrimaryContact": "05261 255-251", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@ladefoxx.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 106, + "Title": "Ladefoxx" + }, + { + "WebsiteURL": "http://ladenetz.de", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": "info@smartlab-gmbh.de", + "IsRestrictedEdit": false, + "ID": 69, + "Title": "ladenetz.de" + }, + { + "WebsiteURL": "https://www.lastmilesolutions.com/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3387, + "Title": "Last Mile Solutions" + }, + { + "WebsiteURL": "http://www.latvenergo.lv/eng/tenders_and_offers/charging_points_for_electric_vehicles_/", + "Comments": null, + "PhonePrimaryContact": "+371 67 723 511", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@latvenergo.lv", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 182, + "Title": "Latvenergo" + }, + { + "WebsiteURL": "http://lenenergo.ru/ev/", + "Comments": "Utility in St. Petersburg, Russia", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3286, + "Title": "Lenenergo" + }, + { + "WebsiteURL": "http://www.level2.ee/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3348, + "Title": "Level2.ee" + }, + { + "WebsiteURL": null, + "Comments": "Belgian charging network", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 38, + "Title": "Lidl" + }, + { + "WebsiteURL": "http://w41.bcn.cat/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 206, + "Title": "LIVE Barcelona" + }, + { + "WebsiteURL": "http://www.elektrofahrzeuge.lsw.de/", + "Comments": null, + "PhonePrimaryContact": " 05361 1893600", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "mobilitaet@lsw.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 128, + "Title": "LSW Energie" + }, + { + "WebsiteURL": null, + "Comments": "Obsolete inductive paddle charging standard", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 41, + "Title": "MAGNE Charge" + }, + { + "WebsiteURL": "https://www.mainova.de/privatkunden/mobilitaet/stromtankstellen.html", + "Comments": null, + "PhonePrimaryContact": "069 / 213-24221 ", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "Efahrzeug-Foerderung@mainova.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 165, + "Title": "Mainova" + }, + { + "WebsiteURL": "https://www.mgc-gas.jo/gasStations/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3456, + "Title": "Manaseer" + }, + { + "WebsiteURL": "http://www.manxelectricity.com", + "Comments": null, + "PhonePrimaryContact": "(01624) 687687", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "mea@gov.im", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 135, + "Title": "Manx Electricity Authority" + }, + { + "WebsiteURL": "http://www.caib.es/sites/energiaicanviclimatic/ca/mobilitat_elactrica_a_les_illes_balears_melib/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3283, + "Title": "MELIB (ES)" + }, + { + "WebsiteURL": "https://www.motorfuelgroup.com/mfg-ev-power/", + "Comments": "Fossil fuel filling station franchise operator group now doing their own thing in EV charging", + "PhonePrimaryContact": "+44 20 8515 8559", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3471, + "Title": "MFG EV Power" + }, + { + "WebsiteURL": "https://www.midgardelectric.com/", + "Comments": "Bangalore", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info.midgardelectric@gmail.com", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3363, + "Title": "Midgard Electric" + }, + { + "WebsiteURL": "http://thefastchargernetwork.com/", + "Comments": null, + "PhonePrimaryContact": "+ 31 20 7719 026", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "contact@mistergreen.nl", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 112, + "Title": "MisterGreen, The Fast Charger Network" + }, + { + "WebsiteURL": "http://www.mobecpoint.com", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": null, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@mobecpoint.com", + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 92, + "Title": "MobecPoint (Es)" + }, + { + "WebsiteURL": "http://www.mobib.be/index.htm", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": null, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 79, + "Title": "Mobib (Belgium)" + }, + { + "WebsiteURL": "http://www.mobie.pt", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 21, + "Title": "Mobie.pt" + }, + { + "WebsiteURL": "https://mobiliti.hu/emobilitas", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3467, + "Title": "Mobiliti.hu" + }, + { + "WebsiteURL": "https://mobiliti.hu/emobilitas", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3468, + "Title": "Mobiliti.hu" + }, + { + "WebsiteURL": "https://mobiliti.hu/emobilitas", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3469, + "Title": "Mobiliti.hu" + }, + { + "WebsiteURL": "https://mobiliti.hu/emobilitas", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3470, + "Title": "Mobiliti.hu" + }, + { + "WebsiteURL": "https://www.mobive.fr/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3407, + "Title": "MObiVE" + }, + { + "WebsiteURL": "https://molplugee.si/en", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3378, + "Title": "MOL" + }, + { + "WebsiteURL": "https://www.motonet.fi/fi/sivut/motolataus/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3355, + "Title": "Motolataus" + }, + { + "WebsiteURL": "https://www.move.ch", + "Comments": null, + "PhonePrimaryContact": "0800 29 29 29", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3274, + "Title": "MOVE (CH)" + }, + { + "WebsiteURL": "https://www.bayernwerk.de/cps/rde/xchg/bayernwerk/hs.xsl/278.htm", + "Comments": null, + "PhonePrimaryContact": "+49 89 61413-536", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "BAG-e-mobility@bayernwerk.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 201, + "Title": "München Umland" + }, + { + "WebsiteURL": "https://www.mvmpartner.hu/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "mvmp@mvmp.hu", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3289, + "Title": "MVM Partner Zrt." + }, + { + "WebsiteURL": "https://myevroute.com/", + "Comments": null, + "PhonePrimaryContact": "888 908-8303", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "support@myEVroute.com", + "FaultReportEmail": "support@myEVroute.com", + "IsRestrictedEdit": false, + "ID": 3417, + "Title": "myEVroute" + }, + { + "WebsiteURL": "https://echargenetwork.com/", + "Comments": null, + "PhonePrimaryContact": "+1 844 661‑6272", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3365, + "Title": "NBP eCharge Network" + }, + { + "WebsiteURL": "https://www.neogy.it/", + "Comments": null, + "PhonePrimaryContact": "800 832 855", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@neogy.it", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 164, + "Title": "Neogy" + }, + { + "WebsiteURL": "https://www.n-ergie.de/header/die-n-ergie/aktiv-fuer-die-umwelt/elektromobilitaet.html", + "Comments": null, + "PhonePrimaryContact": "+49 911 80201", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "elektromobilitaet@n-ergie.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 234, + "Title": "N-ERGIE" + }, + { + "WebsiteURL": "https://nextstepmobility.de/", + "Comments": null, + "PhonePrimaryContact": "+497243 2006101", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@nextstepmobility.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3466, + "Title": "Next Step Mobility (DE)" + }, + { + "WebsiteURL": "http://www.nissan.de/DE/de/vehicle/electric-vehicles/leaf/charging-and-battery/freistrom-info.html", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 167, + "Title": "Nissan DE Freistrom" + }, + { + "WebsiteURL": "http://www.nissan.co.uk", + "Comments": "Network of franchised Nissan Dealers", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 7, + "Title": "Nissan UK Dealer Network" + }, + { + "WebsiteURL": null, + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": null, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 6, + "Title": "Nissan US Dealer Network" + }, + { + "WebsiteURL": "http://www.mobiliti.hu/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3307, + "Title": "NKM mobiliti" + }, + { + "WebsiteURL": "http://www.nomadpower.eu", + "Comments": null, + "PhonePrimaryContact": "+31 348435512", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@nomadpower.eu", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 196, + "Title": "Nomadpower" + }, + { + "WebsiteURL": "http://www.noodoe.com/ev", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3346, + "Title": "Noodoe EV" + }, + { + "WebsiteURL": "https://www.nrgevgo.com/", + "Comments": null, + "PhonePrimaryContact": "855-509-5581", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3252, + "Title": "NRG EVgo" + }, + { + "WebsiteURL": "https://customer.restation.eu/stations", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@nrg4you.it", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3438, + "Title": "NRG4YOU" + }, + { + "WebsiteURL": "https://www.mynrma.com.au/cars-and-driving/electric-vehicles", + "Comments": "National Roads and Motorists' Association, Australia", + "PhonePrimaryContact": "1300 233 544", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3388, + "Title": "NRMA" + }, + { + "WebsiteURL": "http://www.nuon.com/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 177, + "Title": "Nuon" + }, + { + "WebsiteURL": "https://olife-energy.net/", + "Comments": null, + "PhonePrimaryContact": "+420 724 196 587", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@olife-energy.com", + "FaultReportEmail": "info@olife-energy.com", + "IsRestrictedEdit": false, + "ID": 3425, + "Title": "OlifeEnergy" + }, + { + "WebsiteURL": "https://www.opconnect.com/", + "Comments": null, + "PhonePrimaryContact": "1-855-885-9571", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "nisaacs@opconnect.com", + "FaultReportEmail": "support@opconnect.com", + "IsRestrictedEdit": false, + "ID": 107, + "Title": "OpConnect" + }, + { + "WebsiteURL": "https://optimumway.hu/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@optimumway.hu", + "FaultReportEmail": "info@optimumway.hu", + "IsRestrictedEdit": false, + "ID": 3395, + "Title": "Optimum Way" + }, + { + "WebsiteURL": "http://www.ores.net/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 1236, + "Title": "ORES" + }, + { + "WebsiteURL": "http://www.on.is/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "on@on.is", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 102, + "Title": "Orka Náttúrunnar" + }, + { + "WebsiteURL": "https://orlencharge.orlen.pl/", + "Comments": null, + "PhonePrimaryContact": " +48502167536", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3396, + "Title": "Orlencharge" + }, + { + "WebsiteURL": "https://ospreycharging.co.uk/ev-drivers/", + "Comments": "formerly known as Engenie", + "PhonePrimaryContact": "0330 010 1757", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@engenie.co.uk", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 203, + "Title": "Osprey Charging" + }, + { + "WebsiteURL": "https://www.osterholzer-stadtwerke.de/service/fahren-mit-strom-erdgas/strom/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 124, + "Title": "Osterholzer Stadtwerke" + }, + { + "WebsiteURL": "http://www.ovag-energie.de/oe/ovag-energie.nsf/c/Umwelt,E-Mobilit%C3%A4t", + "Comments": null, + "PhonePrimaryContact": "+49 6031 6848-0", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "service@ovag-energie.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 188, + "Title": "OVAG Energie" + }, + { + "WebsiteURL": "http://www.park-charge.ch/", + "Comments": null, + "PhonePrimaryContact": "+41 44 820 24 55 ", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "park-charge@gmx.net", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 97, + "Title": "Park & Charge (CH)" + }, + { + "WebsiteURL": "http://www.park-charge.de/", + "Comments": null, + "PhonePrimaryContact": "030-32 59 91 80 ", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@park-charge.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 98, + "Title": "Park & Charge (D)" + }, + { + "WebsiteURL": "https://www.parkkisahko.fi/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3322, + "Title": "Parking Energy" + }, + { + "WebsiteURL": "https://passpasselectrique.fr", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3409, + "Title": "pass pass électrique" + }, + { + "WebsiteURL": "https://www.pea.co.th/", + "Comments": "Provincial Electricity Authority, Thailand", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3460, + "Title": "PEA Volta" + }, + { + "WebsiteURL": "https://www.petro-canada.ca/en/personal/fuel/ev-fast-charge-network", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3375, + "Title": "Petro Canada" + }, + { + "WebsiteURL": "http://www.petrol.eu/road/car/electrical-mobility-petrol", + "Comments": "PETROL is a fuel supplier and runs charge points in Slovenia, part of the CENTRAL EUROPEAN GREEN CORRIDORS (CEGC) PROJECT", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 13, + "Title": "PETROL" + }, + { + "WebsiteURL": "http://www.pfalzwerke.de/", + "Comments": null, + "PhonePrimaryContact": "+49 6215850", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@pfalzwerke.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 1240, + "Title": "Pfalzwerke" + }, + { + "WebsiteURL": "https://pgene.pl/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3397, + "Title": "PGE Nowa Energia" + }, + { + "WebsiteURL": "https://pkp.pl/pkpmobility", + "Comments": null, + "PhonePrimaryContact": "+48509895890", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "stacjeladowania@pkp.pl", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3453, + "Title": "PKP Mobility" + }, + { + "WebsiteURL": "https://plugnroll.com/elektroautofahrer/netzwerk/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3280, + "Title": "Plug n Roll" + }, + { + "WebsiteURL": "http://www.pluggedinmidlands.co.uk", + "Comments": null, + "PhonePrimaryContact": "0845 838 0551", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "enquiries@pluggedinmidlands.co.uk", + "FaultReportEmail": "enquiries@pluggedinmidlands.co.uk", + "IsRestrictedEdit": false, + "ID": 71, + "Title": "Plugged In Midlands (UK)" + }, + { + "WebsiteURL": "http://www.pluginncw.com/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "plugincenter@gmail.com", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 119, + "Title": "Plug-In North Central Washington" + }, + { + "WebsiteURL": "https://www.plugitcloud.com", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3353, + "Title": "Plugit" + }, + { + "WebsiteURL": "https://www.plugpoint.ro/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3420, + "Title": "plugpoint.ro" + }, + { + "WebsiteURL": "https://www.plugsurfing.com/", + "Comments": null, + "PhonePrimaryContact": "+49 30 9599814 10 ", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "support@plugsurfing.com", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3266, + "Title": "PlugSurfing" + }, + { + "WebsiteURL": "http://www.pod-point.com/", + "Comments": "Part of Groupe EDF", + "PhonePrimaryContact": "020 7247 4114", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "enquiries@pod-point.com", + "FaultReportEmail": "enquiries@pod-point.com", + "IsRestrictedEdit": false, + "ID": 3, + "Title": "POD Point (UK)" + }, + { + "WebsiteURL": "http://polyfazer.cz/", + "Comments": null, + "PhonePrimaryContact": "+420 270 007 900", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@polyfazer.cz", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 1239, + "Title": "Polyfazer" + }, + { + "WebsiteURL": "http://power-station.be/power-card-laadpas/", + "Comments": null, + "PhonePrimaryContact": "+32 (0)488 985 200", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@power-station.be", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 114, + "Title": "Power Station" + }, + { + "WebsiteURL": "https://www.pre.cz/cs/profil-spolecnosti/dalsi-aktivity-pre/premobilita/", + "Comments": null, + "PhonePrimaryContact": "840 550 055", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 190, + "Title": "PRE (cz)" + }, + { + "WebsiteURL": "http://www.prioenergy.com/produtos-e-servicos/mobilidade-electrica/", + "Comments": "Prio.E Mobility Solutions", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 200, + "Title": "PRIOE" + }, + { + "WebsiteURL": "http://www.putevi-srbije.rs/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3358, + "Title": "Putevi Srbije / ЈП Путеви Србије / Roads of Serbia" + }, + { + "WebsiteURL": "https://www.q1.eu/", + "Comments": null, + "PhonePrimaryContact": "+49 541 602-0", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3429, + "Title": "Q1 Autostrom" + }, + { + "WebsiteURL": "https://www.qld.gov.au/transport/projects/electricvehicles/map", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3317, + "Title": "Queensland Electric Super Highway" + }, + { + "WebsiteURL": "http://chargestar.com.au/rac-electric-highway/", + "Comments": null, + "PhonePrimaryContact": "1300 661895", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@chargestar.com.au", + "FaultReportEmail": "info@chargestar.com.au", + "IsRestrictedEdit": false, + "ID": 194, + "Title": "RAC Electric Highway/ChargeStar" + }, + { + "WebsiteURL": "http://www.raumanenergia.fi/yritys/fi_FI/sahkoautoilu/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 133, + "Title": "Rauman Energia" + }, + { + "WebsiteURL": "https://revitalizechargingsolutions.com/", + "Comments": null, + "PhonePrimaryContact": " 1-817-659-1030", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@revitalizechargingsolutions.com", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 217, + "Title": "RCS (Revitalize Charging Solutions)" + }, + { + "WebsiteURL": "http://www.rechargeinfra.com/", + "Comments": null, + "PhonePrimaryContact": "+358 20 33 4455", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "rami.syvari@fortum.com", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 198, + "Title": "Recharge (Formerly Fortum Charge & Drive)" + }, + { + "WebsiteURL": "http://www.recharge-power.com/", + "Comments": "Imported by ADFC import", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 12, + "Title": "RechargeAccess" + }, + { + "WebsiteURL": null, + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3335, + "Title": "RedePiloto" + }, + { + "WebsiteURL": "http://www.renault.fr/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3275, + "Title": "Renault" + }, + { + "WebsiteURL": "https://www.repower.com/it/la-mobilita-elettrica/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3330, + "Title": "Repower (Italy)" + }, + { + "WebsiteURL": "https://www.reveocharge.com/", + "Comments": "Sud de la France", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3257, + "Title": "Révéo (FR)" + }, + { + "WebsiteURL": "https://www.revoltaegypt.com/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@revoltaegypt.com", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3293, + "Title": "Revolta Egypt" + }, + { + "WebsiteURL": "https://www.rewag.de/privatkunden/strom/rewariostrommobil.html", + "Comments": null, + "PhonePrimaryContact": " +49 941 6010", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@rewag.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3265, + "Title": "REWAG" + }, + { + "WebsiteURL": "http://www.rheinenergie.com/TankEn-Registrierung", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": null, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "energieberatung@rheinenergie.com", + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 72, + "Title": "RheinEnergie AG" + }, + { + "WebsiteURL": "https://re-fd.de/", + "Comments": null, + "PhonePrimaryContact": "+49 661 12-100", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@re-fd.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 2242, + "Title": "RhönEnergie" + }, + { + "WebsiteURL": "https://rompetrol.ro", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3421, + "Title": "Rompetrol" + }, + { + "WebsiteURL": "http://rpsnet.cz", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3250, + "Title": "RPSnet" + }, + { + "WebsiteURL": "http://www.npower.com/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 104, + "Title": "RWE / Npower" + }, + { + "WebsiteURL": "http://www.essent.nl", + "Comments": "Essent is part of the RWE group", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": null, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 48, + "Title": "RWE Mobility/Essent" + }, + { + "WebsiteURL": "https://sa-ev.com", + "Comments": "India", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "sa@sa-ev.com", + "FaultReportEmail": "sa@sa-ev.com", + "IsRestrictedEdit": false, + "ID": 3376, + "Title": "SAEV" + }, + { + "WebsiteURL": "http://www.sahkoinenliikenne.fi/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@sahkoinenliikenne.fi", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 113, + "Title": "Sähköinenliikenne (fi)" + }, + { + "WebsiteURL": "https://www.schleswiger-stadtwerke.de/content/unternehmen/emobilitaet/", + "Comments": null, + "PhonePrimaryContact": "(0 46 21) 801-414", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "matthias.beier@schleswiger-stadtwerke.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 139, + "Title": "Schleswiger Stadtwerke" + }, + { + "WebsiteURL": "http://www.schnell-laden-berlin.de", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "wirkuemmernuns@schnell-laden-berlin.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 223, + "Title": "Schnell Laden Berlin" + }, + { + "WebsiteURL": "https://www.swu.de/privatkunden/energie-wasser/elektromobilitaet/kunde-werden.html", + "Comments": null, + "PhonePrimaryContact": "+49 731 166-8810", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@swu.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 2245, + "Title": "Schwabencard" + }, + { + "WebsiteURL": "http://www.sde76.fr/", + "Comments": "Can be Accessed via Sodetrel pass", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3262, + "Title": "SDE76 (FR)" + }, + { + "WebsiteURL": "https://sdeg16.fr/nos-competences/les-bornes-vehicules-electriques/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3380, + "Title": "SDEG 16 (Syndicat Départemental d'Electricité et de Gaz de la Charente)" + }, + { + "WebsiteURL": "http://sdey.fr/nos-missions/mobilite-electrique/", + "Comments": "Syndicat Départemental d'Énergies de l'Yonne", + "PhonePrimaryContact": "03 86 52 22 00", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 33, + "Title": "SDEY (Fr)" + }, + { + "WebsiteURL": "https://semaconnect.com/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 39, + "Title": "SemaConnect" + }, + { + "WebsiteURL": "https://www.seom.se/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3347, + "Title": "Seom" + }, + { + "WebsiteURL": "https://www.sharz.net/", + "Comments": null, + "PhonePrimaryContact": " (0850) 811 72 75", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3367, + "Title": "Sharz.Net" + }, + { + "WebsiteURL": "https://www.shell.co.uk/motorist/welcome-to-shell-recharge.html", + "Comments": "Shell Recharge", + "PhonePrimaryContact": "08000294601", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3392, + "Title": "Shell UK Oil Products Limited" + }, + { + "WebsiteURL": "http://www.shorepower.com/", + "Comments": "Imported by ADFC import", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 14, + "Title": "Shorepower" + }, + { + "WebsiteURL": null, + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3308, + "Title": "SIEL" + }, + { + "WebsiteURL": "http://www.silfi.it/IT/index.php?id=63&label=Mappa%20colonnine%20ricarica%20veicoli%20elettrici%22", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": null, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 81, + "Title": "Silfi (Italy)" + }, + { + "WebsiteURL": "https://sepredaj.seas.sk/elektricka-mobilita", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@sepredaj.sk", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 2246, + "Title": "Slovenské elektrárne" + }, + { + "WebsiteURL": "https://smatrics.com/ladenetz#", + "Comments": "SMATRICS runs charge points in Austria and Germany, part of the CENTRAL EUROPEAN GREEN CORRIDORS (CEGC) PROJECT", + "PhonePrimaryContact": " +43 1 532 24 00", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@smatrics.com", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3253, + "Title": "SMATRICS Netz" + }, + { + "WebsiteURL": "https://en.sodo.si/fast-charging-stations/list-of-active-fast-charging-stations-on-slovenian-highways", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3255, + "Title": "SODO" + }, + { + "WebsiteURL": "http://www.sofos.es/productos-y-servicios/estaciones-de-recarga/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 211, + "Title": "sofos" + }, + { + "WebsiteURL": "https://account.sonolevi.co.il/findCharger", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3433, + "Title": "Sonol-evi (Israel)" + }, + { + "WebsiteURL": "http://www.sourceeast.net/", + "Comments": "Defunct network.", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "sourceeast@sourceeast.net", + "FaultReportEmail": "sourceeast@sourceeast.net", + "IsRestrictedEdit": true, + "ID": 60, + "Title": "Source East (UK)" + }, + { + "WebsiteURL": "http://www.sourcelondon.net/", + "Comments": "Monthly post-payment membership system, with per-minute billing and optional lower tariffs in return for monthly subscription payment.", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": "https://www.sourcelondon.net/membership", + "ContactEmail": "membership@sourcelondon.net", + "FaultReportEmail": "membership@sourcelondon.net", + "IsRestrictedEdit": false, + "ID": 25, + "Title": "Source London" + }, + { + "WebsiteURL": "http://sparkev.lk/smart-plug-in-membership/", + "Comments": null, + "PhonePrimaryContact": "+94117590590", + "PhoneSecondaryContact": "+94117727539", + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@sparkev.lk", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 228, + "Title": "Spark EV (lk)" + }, + { + "WebsiteURL": "https://www.emotion-team.com/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3329, + "Title": "SpotLink – e.motion" + }, + { + "WebsiteURL": "http://www.sw-magdeburg.de/", + "Comments": null, + "PhonePrimaryContact": " 0800 0796796", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@sw-magdeburg.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 152, + "Title": "Städtische Werke Magdeburg" + }, + { + "WebsiteURL": "http://www.stadtwerke-clausthal.de/", + "Comments": null, + "PhonePrimaryContact": " 05323 715-0 ", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@stadtwerke-clausthal.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 162, + "Title": "Stadtwerke Clausthal-Zellerfeld" + }, + { + "WebsiteURL": "https://www.dvv-dessau.de/", + "Comments": null, + "PhonePrimaryContact": " 0340 8992000", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 158, + "Title": "Stadtwerke Dessau" + }, + { + "WebsiteURL": "https://www.swd-ag.de", + "Comments": null, + "PhonePrimaryContact": "0211/821-8210", + "PhoneSecondaryContact": "0211/821-4093 (Emergency Contact Number 24/7)", + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "elektromobilitaet@swd-ag.de", + "FaultReportEmail": "elektromobilitaet@swd-ag.de", + "IsRestrictedEdit": false, + "ID": 235, + "Title": "Stadtwerke Düsseldorf AG" + }, + { + "WebsiteURL": "http://www.stadtwerke-elmshorn.de/cms/Dienstleistungen/E-Mobilitaet/Stadtwerke-investieren-in-E-Mobilitaet-.html", + "Comments": null, + "PhonePrimaryContact": "(04121) 645-0", + "PhoneSecondaryContact": "(04121) 645-751", + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@stadtwerke-elmshorn.de", + "FaultReportEmail": "service.technik@stadtwerke-elmshorn.de", + "IsRestrictedEdit": false, + "ID": 170, + "Title": "Stadtwerke Elmshorn" + }, + { + "WebsiteURL": "http://www.swgoe.de/", + "Comments": null, + "PhonePrimaryContact": "0551 301290", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 132, + "Title": "Stadtwerke Göttingen" + }, + { + "WebsiteURL": "http://www.stadtwerke-gvm.de/", + "Comments": null, + "PhonePrimaryContact": "03881 78450", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@stadtwerke-gvm.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 151, + "Title": "Stadtwerke Grevesmühlen" + }, + { + "WebsiteURL": "http://www.swhdl.de/strom/e_mobility/", + "Comments": null, + "PhonePrimaryContact": "03904 725995 ", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 148, + "Title": "Stadtwerke Haldensleben SWH" + }, + { + "WebsiteURL": "http://www.evh.de/EVH/Privatkunden/Natuerlich-EVH/Mit-Strom-fahren/", + "Comments": null, + "PhonePrimaryContact": "(0345) 581 33 33", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "kontakt@evh.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 161, + "Title": "Stadtwerke Halle" + }, + { + "WebsiteURL": "https://www.stadtwerke-hameln.de/service/beratung.html", + "Comments": null, + "PhonePrimaryContact": " 05151-7880", + "PhoneSecondaryContact": " 0800 788 0000", + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 146, + "Title": "Stadtwerke Hameln" + }, + { + "WebsiteURL": "http://www.swl.de/web/swl/DE/Unternehmen/Elektromobilitaet/Elektromobilitaet.htm", + "Comments": null, + "PhonePrimaryContact": "0341 121-6404", + "PhoneSecondaryContact": "0800 121-3001 ", + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "elektromobilitaet@swl.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 155, + "Title": "Stadtwerke Leipzig SWL" + }, + { + "WebsiteURL": "http://www.swhl.de/e-mobilitaet/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 123, + "Title": "Stadtwerke Lübeck" + }, + { + "WebsiteURL": "https://www.stadtwerke-muenster.de/privatkunden/strom/alle-stromprodukte/e-mobilitaet/uebersicht.html", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 225, + "Title": "Stadtwerke Münster" + }, + { + "WebsiteURL": "http://www.stadtwerke-neumuenster.de/wDeutsch/privatkunden/unser-einsatz-fuer-die-umwelt/e-mobilitaet.php?navid=172", + "Comments": null, + "PhonePrimaryContact": " 04321 202654 ", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "swn@swn.net", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 147, + "Title": "Stadtwerke Neumünster (SWN)." + }, + { + "WebsiteURL": "http://www.stadtwerke-northeim.de/site/de/580/stromtankstelle.html", + "Comments": null, + "PhonePrimaryContact": "(0 55 51) 60 05 - 0 ", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@stadtwerke-northeim.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 131, + "Title": "Stadtwerke Northeim SWN" + }, + { + "WebsiteURL": "http://www.stadtwerke-rinteln.de/", + "Comments": null, + "PhonePrimaryContact": "05751 700-0 ", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@stadtwerke-rinteln.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 143, + "Title": "Stadtwerke Rinteln" + }, + { + "WebsiteURL": "http://www.swrag.de/", + "Comments": null, + "PhonePrimaryContact": " 0381 8051901", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "kundenzentrum@swrag.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 154, + "Title": "Stadtwerke Rostock" + }, + { + "WebsiteURL": "http://www.stadtwerke-soest.de/index.php?id=280", + "Comments": null, + "PhonePrimaryContact": "02921.392-0", + "PhoneSecondaryContact": "02921.392-150", + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@stadtwerke-soest.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 149, + "Title": "Stadtwerke Soest" + }, + { + "WebsiteURL": "http://www.stadtwerke-stralsund.de/energie/elektrofahrzeuge/elektrofahrzeuge/foerderung.php", + "Comments": null, + "PhonePrimaryContact": " 03831 2410", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "service@stadtwerke-stralsund.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 153, + "Title": "Stadtwerke Strahlsund" + }, + { + "WebsiteURL": "http://www.stadtwerke-uetersen.de/?page_id=1722", + "Comments": null, + "PhonePrimaryContact": " +49 4122 92786 80", + "PhoneSecondaryContact": "04122 / 9 27 86 82", + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "service@stadtwerke-uetersen.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 169, + "Title": "Stadtwerke Uetersen" + }, + { + "WebsiteURL": "http://www.stadtwerke-verden.de/privatkunden/energiedienstleistungen/elektromobilitaet.html", + "Comments": null, + "PhonePrimaryContact": "04231 915112", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 134, + "Title": "Stadtwerke Verden" + }, + { + "WebsiteURL": "http://www.stadtwerke-wernigerode.de/published_page.aspx?id=132", + "Comments": null, + "PhonePrimaryContact": "03943 556-111", + "PhoneSecondaryContact": "(03943) 556-270 ", + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "stefan.streichert@stadtwerke-wernigerode.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 130, + "Title": "Stadtwerke Wernigerode" + }, + { + "WebsiteURL": "http://stadtwerke.wittenberg.de/", + "Comments": null, + "PhonePrimaryContact": " 03491 4700", + "PhoneSecondaryContact": "0800 759 0800", + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "slw@stadtwerke.wittenberg.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 159, + "Title": "Stadtwerke Wittenberg" + }, + { + "WebsiteURL": "http://www.stadtwerke-wf.de/", + "Comments": null, + "PhonePrimaryContact": "(0 53 31) 4 08 - 1 14 ", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "service@stadtwerke-wf.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 166, + "Title": "Stadtwerke Wolfenbüttel" + }, + { + "WebsiteURL": "http://www.sgcc.com.cn/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3290, + "Title": "State Grid Corporation of China (SGCC)" + }, + { + "WebsiteURL": "http://www.stromnetz.hamburg/ueber-uns/innovationen/e-mobility/", + "Comments": null, + "PhonePrimaryContact": "+49 40 4920200", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@stromnetz-hamburg.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 220, + "Title": "Stromnetz Hamburg" + }, + { + "WebsiteURL": "http://stromticket.de/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 160, + "Title": "StromTicket" + }, + { + "WebsiteURL": "http://www.stromtreter.de/", + "Comments": null, + "PhonePrimaryContact": " +49 800 7333532", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3269, + "Title": "Stromtreter" + }, + { + "WebsiteURL": "http://www.stromtreter.de/", + "Comments": null, + "PhonePrimaryContact": " +49 800 7333532", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3270, + "Title": "Stromtreter" + }, + { + "WebsiteURL": "http://suncountryhighway.ca/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": null, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 51, + "Title": "Sun Country Highway" + }, + { + "WebsiteURL": "http://www.sun-stadtwerke.de/energien-der-zukunft/e-mobilitaet/ladekarte.html", + "Comments": null, + "PhonePrimaryContact": "0800 0 22 88 44 ", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "sun@sun-stadtwerke.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 138, + "Title": "SUN Stadtwerke Union Nordhessen" + }, + { + "WebsiteURL": "https://www.swarcoeconnect.org/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3341, + "Title": "Swarco E.Connect" + }, + { + "WebsiteURL": "https://www.swb-gruppe.de/verantwortung/swb-und-umwelt/fahren-mit-strom.php", + "Comments": null, + "PhonePrimaryContact": " 0421 3590", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 125, + "Title": "SWB / EWE" + }, + { + "WebsiteURL": "https://swisscharge.ch/", + "Comments": null, + "PhonePrimaryContact": "071 388 11 50", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@swisscharge.ch", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3273, + "Title": "Swisscharge (CH)" + }, + { + "WebsiteURL": "http://www.syane.orios-infos.com/", + "Comments": "Syndicat des énergies et de l'améngement numérique de la Haute-Savoie", + "PhonePrimaryContact": "+33 4 50 33 50 60", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3277, + "Title": "Syane" + }, + { + "WebsiteURL": "https://www.sydego.fr/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3412, + "Title": "Sydego" + }, + { + "WebsiteURL": "http://tank.rast.de/emobility/", + "Comments": null, + "PhonePrimaryContact": "+49 228 9220", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "kundenservice@tank.rast.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3248, + "Title": "Tank & Rast" + }, + { + "WebsiteURL": "http://www.tanke-wienenergie.at/", + "Comments": null, + "PhonePrimaryContact": "0800 510 820", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 142, + "Title": "TANKE Wien Energie" + }, + { + "WebsiteURL": "https://nexonev.tatamotors.com/charging-locator/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3436, + "Title": "Tata Power" + }, + { + "WebsiteURL": "https://www.tauron.pl/tauron/tauron-innowacje/elektromobilnosc", + "Comments": null, + "PhonePrimaryContact": "+48572886552", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "emap@tauron.pl", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3452, + "Title": "TAURON Nowe Technologie" + }, + { + "WebsiteURL": "https://www.teapont.hu/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3462, + "Title": "TEA." + }, + { + "WebsiteURL": "http://www.teslamotors.com", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": null, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 23, + "Title": "Tesla Motors (Worldwide)" + }, + { + "WebsiteURL": "https://www.geniepoint.co.uk/", + "Comments": "also known as Revive, Engie, or Dragon Charging regional branding", + "PhonePrimaryContact": "+44(0)20 3598 4087", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "GenieSupport@chargepointservices.com", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 150, + "Title": "The GeniePoint Network ( Engie EV Solutions )" + }, + { + "WebsiteURL": "http://www.thenewmotion.be/", + "Comments": null, + "PhonePrimaryContact": " +32 (0)2 588 1251", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@thenewmotion.be", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 157, + "Title": "The New Motion (BE)" + }, + { + "WebsiteURL": "http://www.thenewmotion.de/", + "Comments": null, + "PhonePrimaryContact": "030 215 028 48", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@thenewmotion.de", + "FaultReportEmail": "service@thenewmotion.de", + "IsRestrictedEdit": false, + "ID": 156, + "Title": "The New Motion (DE)" + }, + { + "WebsiteURL": "http://www.thenewmotion.com/", + "Comments": null, + "PhonePrimaryContact": "088 01 09 500", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@thenewmotion.com", + "FaultReportEmail": "klantenservice@thenewmotion.com", + "IsRestrictedEdit": false, + "ID": 47, + "Title": "The New Motion (NL)" + }, + { + "WebsiteURL": "http://therevproject.com/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "rev@therevproject.com", + "FaultReportEmail": "rev@therevproject.com", + "IsRestrictedEdit": false, + "ID": 57, + "Title": "The REV Project (UWA - Australia)" + }, + { + "WebsiteURL": "http://www.theplugincompany.com/en/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 35, + "Title": "ThePluginCompany (Belgium)" + }, + { + "WebsiteURL": "https://www.tiwag.at/no_cache/privatkunden/energieeffizienz/mobilitaet/", + "Comments": null, + "PhonePrimaryContact": "0800 818 819", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 18, + "Title": "TIWAG Tiroler Wasserkraft AG (AT)" + }, + { + "WebsiteURL": "https://toka.energy/", + "Comments": "ЗАРЯДНЫЕ СТАНЦИИ ТОКА, Based in Ukraine", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@toka.energy", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3361, + "Title": "Toka Energy" + }, + { + "WebsiteURL": "https://www.tonikenergy.com/products/ev-charging/", + "Comments": "Accepts Fortum Charge & Drive", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "ev@tonikenergy.com", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3366, + "Title": "Tonik Energy" + }, + { + "WebsiteURL": "http://www.total.be/fr/carburants/carburant-station/plug-to-drive/finder-plugtodrive.html", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 175, + "Title": "TOTAL Be PlugToDrive" + }, + { + "WebsiteURL": "https://apps.total-ev-charge.com/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3447, + "Title": "Total EV Charge" + }, + { + "WebsiteURL": "http://www.total.nl/services-tankstations/plug-to-drive.html", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 174, + "Title": "TOTAL Nl PlugToDrive" + }, + { + "WebsiteURL": "https://www.tsk.sk/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3306, + "Title": "Trenčiansky samosprávny kraj" + }, + { + "WebsiteURL": "https://www.ubitricity.com/", + "Comments": null, + "PhonePrimaryContact": "+49 (0)30 398 371 690", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "contact@ubitricity.com", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 2244, + "Title": "ubitricity" + }, + { + "WebsiteURL": "http://www.ultra-fast.nl/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 64, + "Title": "Ultra-Fast" + }, + { + "WebsiteURL": "http://www.umeaenergi.se/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "umea.energi@umeaenergi.se", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3249, + "Title": "Umeå Energi" + }, + { + "WebsiteURL": "https://www.urbener.com/", + "Comments": null, + "PhonePrimaryContact": "+34 976 29 89 84", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "urbener@urbener.com", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3278, + "Title": "Urbener Energía" + }, + { + "WebsiteURL": "http://www.useda.fr/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3256, + "Title": "USEDA (FR)" + }, + { + "WebsiteURL": "http://www.uewag.de/energie/stromtankstellen", + "Comments": null, + "PhonePrimaryContact": "0661 12-100", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 65, + "Title": "UWAG" + }, + { + "WebsiteURL": "http://www.vattenfall.de/de/emobility/emobility.htm", + "Comments": null, + "PhonePrimaryContact": "0800 - 2 335 335", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "emobility@vattenfall.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 108, + "Title": "Vattenfall InCharge" + }, + { + "WebsiteURL": "https://vector.co.nz/evcharging", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 233, + "Title": "Vector (NZ)" + }, + { + "WebsiteURL": "https://app.vendelectric.com/getstarted", + "Comments": "Apparently operated by Rolec Services.", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3473, + "Title": "Vend Electric" + }, + { + "WebsiteURL": "https://www.veolia.cz", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3340, + "Title": "Veolia" + }, + { + "WebsiteURL": "http://www.versorgungsbetriebe.de/hannmuendenGips/Gips?SessionMandant=HannMuenden&Anwendung=CMSWebpage&Methode=ShowHTMLAusgabe&RessourceID=12045", + "Comments": null, + "PhonePrimaryContact": " 01802 707800", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@versorgungsbetriebe.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 144, + "Title": "Versorgungsbetriebe Hann. Münden" + }, + { + "WebsiteURL": "http://www.emobility-vibrate.eu/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@emobility-vibrate.eu", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 231, + "Title": "Vibrate" + }, + { + "WebsiteURL": "https://www.viesgo.com/es/nuevas-tecnologias-e-innovacion/movilidad-electrica/puntos-de-recarga-publica", + "Comments": "Formerly known as E.ON Energía", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 1237, + "Title": "Viesgo (Spain)" + }, + { + "WebsiteURL": "http://virta.fi/", + "Comments": null, + "PhonePrimaryContact": "0800-02200", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 136, + "Title": "VIRTA" + }, + { + "WebsiteURL": "http://vitaemobility.com/", + "Comments": null, + "PhonePrimaryContact": "+32 473 94 98 27", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@vitaemobility.eu", + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 61, + "Title": "Vitaemobility" + }, + { + "WebsiteURL": "http://www.vlotte.at/", + "Comments": null, + "PhonePrimaryContact": "+43 5574 9000 ", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "elektromobil@vkw.at", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 99, + "Title": "Vlotte" + }, + { + "WebsiteURL": "http://www.voltacharging.com", + "Comments": null, + "PhonePrimaryContact": " 1-888-264-2208", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@voltacharging.com", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 50, + "Title": "Volta Charging" + }, + { + "WebsiteURL": "https://volthero.hu/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@volthero.hu", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3432, + "Title": "Volthero" + }, + { + "WebsiteURL": "https://www.voltrun.com/en/", + "Comments": null, + "PhonePrimaryContact": "+908507778658", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3439, + "Title": "Voltrun" + }, + { + "WebsiteURL": "http://www.schneller-strom-tanken.de/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 126, + "Title": "VR Schneller-Strom-tanken" + }, + { + "WebsiteURL": "http://www.zelenabuducnost.sk/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 193, + "Title": "VSE" + }, + { + "WebsiteURL": "https://webasto-charging.com/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@webasto-charging.com", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3373, + "Title": "Webasto" + }, + { + "WebsiteURL": "https://www.wel.co.nz/projects/electric-vehicles/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 28, + "Title": "WEL Networks (NZ)" + }, + { + "WebsiteURL": "http://www.wenea.com/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3371, + "Title": "Wenea" + }, + { + "WebsiteURL": "http://www.werraenergie.de/www/werraenergie/webinfo/webinfo.nsf/DocsID/E-Mobilitaet", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 195, + "Title": "Werraenergie" + }, + { + "WebsiteURL": "http://westarelectrogo.com/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 34, + "Title": "Westar Energy ElectroGo" + }, + { + "WebsiteURL": "https://www.ww-netz.com/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3423, + "Title": "Westfalen Weser Netz" + }, + { + "WebsiteURL": "http://www.wirtschaftsbetriebe-nienburg.de/", + "Comments": null, + "PhonePrimaryContact": "(05021) 87-315 ", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "wirtschaftsbetriebe@nienburg.de", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 183, + "Title": "Wirtschaftsbetriebe Stadt Nienburg" + }, + { + "WebsiteURL": "https://wroom.org/", + "Comments": "App based access", + "PhonePrimaryContact": "+39 035 36 92 145", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3382, + "Title": "Wroom" + }, + { + "WebsiteURL": "https://yasno.com.ua", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3344, + "Title": "YASNO E-mobility" + }, + { + "WebsiteURL": null, + "Comments": "Energy company based in Argentina", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3300, + "Title": "YPF" + }, + { + "WebsiteURL": "https://www.zapgrid.net/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3328, + "Title": "ZapGrid" + }, + { + "WebsiteURL": "http://www.zeag-energie.de", + "Comments": null, + "PhonePrimaryContact": "07131 610-0", + "PhoneSecondaryContact": "07131 56-4248", + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 176, + "Title": "ZEAG Energie" + }, + { + "WebsiteURL": "https://www.zefenergy.com/", + "Comments": null, + "PhonePrimaryContact": "612.688.4596", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "solutions@zefenergy.com", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3454, + "Title": "ZEF Energy" + }, + { + "WebsiteURL": "http://www.ze-mo.be/", + "Comments": null, + "PhonePrimaryContact": "+32 10 750 650", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@ze-mo.be", + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 54, + "Title": "ZE-MO (Be)" + }, + { + "WebsiteURL": "https://z-e-n.fr/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3448, + "Title": "ZEN (Zero Emission Network)/PROVIRIDIS" + }, + { + "WebsiteURL": "https://www.zencar.eu/", + "Comments": null, + "PhonePrimaryContact": "+32 2 669 77 91", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@zencar.eu", + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 100, + "Title": "ZenCar" + }, + { + "WebsiteURL": "https://zepto.pl/", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3475, + "Title": "Zepto" + }, + { + "WebsiteURL": "http://zerocarbonworld.org/", + "Comments": "UK Charity promoting carbon reduction", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "info@zerocarbonworld.com", + "FaultReportEmail": "info@zerocarbonworld.com", + "IsRestrictedEdit": null, + "ID": 19, + "Title": "Zero Carbon World" + }, + { + "WebsiteURL": "http://www.zes.net/", + "Comments": "Zorlu Energy Solutions, Turkey", + "PhonePrimaryContact": "0850 339 99 37", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3323, + "Title": "ZES" + }, + { + "WebsiteURL": "https://www.zse.sk/sk/Uvod/E-mobilita/ZSE-Drive", + "Comments": "Energy company in Slovakia", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3259, + "Title": "ZSE (SK)" + }, + { + "WebsiteURL": "https://www.elektrodistribucija.mk/Electromobility/Charger-locations.aspx", + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3350, + "Title": "ЕВН (EVN) (Macedonia)" + }, + { + "WebsiteURL": "https://www.moesk.ru/spec_projects/moesk_ev/", + "Comments": null, + "PhonePrimaryContact": "8 (800) 700-40-70", + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": false, + "ID": 3301, + "Title": "МОЭСК (Russia)" + } + ], + "StatusTypes": [ + { + "IsOperational": null, + "IsUserSelectable": true, + "ID": 0, + "Title": "Unknown" + }, + { + "IsOperational": true, + "IsUserSelectable": false, + "ID": 10, + "Title": "Currently Available (Automated Status)" + }, + { + "IsOperational": true, + "IsUserSelectable": false, + "ID": 20, + "Title": "Currently In Use (Automated Status)" + }, + { + "IsOperational": true, + "IsUserSelectable": true, + "ID": 30, + "Title": "Temporarily Unavailable" + }, + { + "IsOperational": true, + "IsUserSelectable": true, + "ID": 50, + "Title": "Operational" + }, + { + "IsOperational": true, + "IsUserSelectable": true, + "ID": 75, + "Title": "Partly Operational (Mixed)" + }, + { + "IsOperational": false, + "IsUserSelectable": true, + "ID": 100, + "Title": "Not Operational" + }, + { + "IsOperational": false, + "IsUserSelectable": true, + "ID": 150, + "Title": "Planned For Future Date" + }, + { + "IsOperational": false, + "IsUserSelectable": true, + "ID": 200, + "Title": "Removed (Decommissioned)" + }, + { + "IsOperational": false, + "IsUserSelectable": true, + "ID": 210, + "Title": "Removed (Duplicate Listing)" + } + ], + "SubmissionStatusTypes": [ + { + "IsLive": false, + "ID": 1, + "Title": "Submission Under Review" + }, + { + "IsLive": false, + "ID": 50, + "Title": "Imported and Under Review" + }, + { + "IsLive": true, + "ID": 100, + "Title": "Imported and Published" + }, + { + "IsLive": true, + "ID": 200, + "Title": "Submission Published" + }, + { + "IsLive": false, + "ID": 250, + "Title": "Submission Rejected - Incomplete" + }, + { + "IsLive": false, + "ID": 1000, + "Title": "Delisted" + }, + { + "IsLive": false, + "ID": 1001, + "Title": "Delisted - Duplicate" + }, + { + "IsLive": false, + "ID": 1002, + "Title": "Delisted - No Longer Active/Decommissioned" + }, + { + "IsLive": false, + "ID": 1005, + "Title": "Delisted - Superseded by Update" + }, + { + "IsLive": false, + "ID": 1010, + "Title": "Delisted - Not Public Information/Is Private Residence" + }, + { + "IsLive": false, + "ID": 1020, + "Title": "Delisted - Removed by Import Data Provider" + } + ], + "UsageTypes": [ + { + "IsPayAtLocation": null, + "IsMembershipRequired": null, + "IsAccessKeyRequired": null, + "ID": 0, + "Title": "(Unknown)" + }, + { + "IsPayAtLocation": false, + "IsMembershipRequired": false, + "IsAccessKeyRequired": false, + "ID": 6, + "Title": "Private - For Staff, Visitors or Customers" + }, + { + "IsPayAtLocation": null, + "IsMembershipRequired": true, + "IsAccessKeyRequired": null, + "ID": 2, + "Title": "Private - Restricted Access" + }, + { + "IsPayAtLocation": null, + "IsMembershipRequired": null, + "IsAccessKeyRequired": null, + "ID": 3, + "Title": "Privately Owned - Notice Required" + }, + { + "IsPayAtLocation": null, + "IsMembershipRequired": null, + "IsAccessKeyRequired": null, + "ID": 1, + "Title": "Public" + }, + { + "IsPayAtLocation": false, + "IsMembershipRequired": true, + "IsAccessKeyRequired": true, + "ID": 4, + "Title": "Public - Membership Required" + }, + { + "IsPayAtLocation": false, + "IsMembershipRequired": false, + "IsAccessKeyRequired": false, + "ID": 7, + "Title": "Public - Notice Required" + }, + { + "IsPayAtLocation": true, + "IsMembershipRequired": false, + "IsAccessKeyRequired": false, + "ID": 5, + "Title": "Public - Pay At Location" + } + ], + "UserCommentTypes": [ + { + "ID": 10, + "Title": "General Comment" + }, + { + "ID": 50, + "Title": "Important Notice (For Other Users)" + }, + { + "ID": 100, + "Title": "Suggested Change (Note To Editors)" + }, + { + "ID": 110, + "Title": "Suggested Changed (Actioned By Editor)" + }, + { + "ID": 1000, + "Title": "Fault Report (Notice To Users And Operator)" + } + ], + "CheckinStatusTypes": [ + { + "IsPositive": null, + "IsAutomatedCheckin": false, + "ID": 0, + "Title": "Did Not Visit Location" + }, + { + "IsPositive": true, + "IsAutomatedCheckin": false, + "ID": 10, + "Title": "Charged Successfully" + }, + { + "IsPositive": true, + "IsAutomatedCheckin": true, + "ID": 15, + "Title": "Charged Successfully (Automated Checkin)" + }, + { + "IsPositive": false, + "IsAutomatedCheckin": false, + "ID": 20, + "Title": "Failed to Charge (Equipment Not Operational)" + }, + { + "IsPositive": false, + "IsAutomatedCheckin": false, + "ID": 22, + "Title": "Failed to Charge (Equipment Not Fully Installed)" + }, + { + "IsPositive": false, + "IsAutomatedCheckin": false, + "ID": 25, + "Title": "Failed to Charge (Equipment Problem)" + }, + { + "IsPositive": false, + "IsAutomatedCheckin": false, + "ID": 30, + "Title": "Failed to Charge (Equipment Not Compatible)" + }, + { + "IsPositive": false, + "IsAutomatedCheckin": false, + "ID": 40, + "Title": "Failed to Charge (Required Other Access Card/Fob etc.)" + }, + { + "IsPositive": false, + "IsAutomatedCheckin": false, + "ID": 50, + "Title": "Failed to Charge (No Charging Equipment Present)" + }, + { + "IsPositive": true, + "IsAutomatedCheckin": false, + "ID": 100, + "Title": "Charging Spot In Use (Other EV Parked)" + }, + { + "IsPositive": false, + "IsAutomatedCheckin": false, + "ID": 110, + "Title": "Charging Spot In Use (Non-EV Parked)" + }, + { + "IsPositive": false, + "IsAutomatedCheckin": false, + "ID": 120, + "Title": "Charging Spot Not Accessible (Access locked or site closed)" + }, + { + "IsPositive": false, + "IsAutomatedCheckin": false, + "ID": 130, + "Title": "Charging Spot Not Found (Inadequate or Incorrect Details)" + }, + { + "IsPositive": true, + "IsAutomatedCheckin": false, + "ID": 140, + "Title": "Equipment & Location Confirmed Correct" + }, + { + "IsPositive": false, + "IsAutomatedCheckin": false, + "ID": 150, + "Title": "Location Is A Duplicate" + }, + { + "IsPositive": false, + "IsAutomatedCheckin": false, + "ID": 160, + "Title": "Equipment/Location Has Been Decommissioned" + }, + { + "IsPositive": false, + "IsAutomatedCheckin": false, + "ID": 200, + "Title": "Other (Negative/Bad)" + }, + { + "IsPositive": true, + "IsAutomatedCheckin": false, + "ID": 210, + "Title": "Other (Positive/Good)" + } + ], + "DataTypes": [ + { + "ID": 1, + "Title": "Single Line Text" + }, + { + "ID": 2, + "Title": "Multi Line Text" + }, + { + "ID": 3, + "Title": "Number" + }, + { + "ID": 4, + "Title": "Date" + }, + { + "ID": 5, + "Title": "Boolean" + }, + { + "ID": 10, + "Title": "Option List" + } + ], + "MetadataGroups": [ + { + "DataProviderID": 1, + "IsRestrictedEdit": false, + "IsPublicInterest": true, + "MetadataFields": [ + { + "MetadataGroupID": 1, + "DataTypeID": 10, + "DataType": null, + "MetadataFieldOptions": [ + { + "MetadataFieldID": 1, + "ID": 1, + "Title": "Shopping" + }, + { + "MetadataFieldID": 1, + "ID": 2, + "Title": "Hotel" + }, + { + "MetadataFieldID": 1, + "ID": 3, + "Title": "Restaurant" + }, + { + "MetadataFieldID": 1, + "ID": 8, + "Title": "Parking" + }, + { + "MetadataFieldID": 1, + "ID": 9, + "Title": "Secure" + } + ], + "ID": 1, + "Title": "POI Type" + }, + { + "MetadataGroupID": 1, + "DataTypeID": 1, + "DataType": null, + "MetadataFieldOptions": null, + "ID": 2, + "Title": "Access Hours" + }, + { + "MetadataGroupID": 1, + "DataTypeID": 10, + "DataType": null, + "MetadataFieldOptions": [ + { + "MetadataFieldID": 4, + "ID": 4, + "Title": "Positioning" + } + ], + "ID": 4, + "Title": "Attribution" + }, + { + "MetadataGroupID": 1, + "DataTypeID": 10, + "DataType": null, + "MetadataFieldOptions": [ + { + "MetadataFieldID": 5, + "ID": 5, + "Title": "Car" + }, + { + "MetadataFieldID": 5, + "ID": 6, + "Title": "Motorcycle" + }, + { + "MetadataFieldID": 5, + "ID": 7, + "Title": "Bus" + }, + { + "MetadataFieldID": 5, + "ID": 10, + "Title": "Goods/Delivery Vehicles" + }, + { + "MetadataFieldID": 5, + "ID": 11, + "Title": "Taxi" + }, + { + "MetadataFieldID": 5, + "ID": 12, + "Title": "Bike" + } + ], + "ID": 5, + "Title": "Vehicle Type" + } + ], + "ID": 1, + "Title": "Extended Information" + }, + { + "DataProviderID": 1, + "IsRestrictedEdit": false, + "IsPublicInterest": false, + "MetadataFields": [ + { + "MetadataGroupID": 2, + "DataTypeID": 10, + "DataType": null, + "MetadataFieldOptions": null, + "ID": 3, + "Title": "Group of Companies" + } + ], + "ID": 2, + "Title": "Supporting Data" + } + ], + "UserProfile": null, + "ChargePoint": { + "DataProvider": { + "WebsiteURL": null, + "Comments": null, + "DataProviderStatusType": null, + "IsRestrictedEdit": false, + "IsOpenDataLicensed": null, + "IsApprovedImport": null, + "License": null, + "DateLastImported": null, + "ID": 0, + "Title": null + }, + "OperatorInfo": { + "WebsiteURL": null, + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": null, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 0, + "Title": null + }, + "UsageType": { + "IsPayAtLocation": null, + "IsMembershipRequired": null, + "IsAccessKeyRequired": null, + "ID": 0, + "Title": null + }, + "StatusType": { + "IsOperational": null, + "IsUserSelectable": false, + "ID": 0, + "Title": null + }, + "SubmissionStatus": null, + "UserComments": null, + "PercentageSimilarity": null, + "MediaItems": null, + "IsRecentlyVerified": true, + "DateLastVerified": "2021-09-30T10:53:31.845Z", + "ID": -1, + "UUID": "b6fd7a7f-c336-4b4d-8f25-e89187531bb4", + "ParentChargePointID": null, + "DataProviderID": null, + "DataProvidersReference": null, + "OperatorID": null, + "OperatorsReference": null, + "UsageTypeID": null, + "UsageCost": null, + "AddressInfo": { + "ID": 0, + "Title": null, + "AddressLine1": null, + "AddressLine2": null, + "Town": null, + "StateOrProvince": null, + "Postcode": null, + "CountryID": null, + "Country": null, + "Latitude": 0.0, + "Longitude": 0.0, + "ContactTelephone1": null, + "ContactTelephone2": null, + "ContactEmail": null, + "AccessComments": null, + "RelatedURL": null, + "Distance": null, + "DistanceUnit": 0 + }, + "Connections": [ + { + "ID": 0, + "ConnectionTypeID": null, + "ConnectionType": null, + "Reference": null, + "StatusTypeID": null, + "StatusType": null, + "LevelID": null, + "Level": null, + "Amps": null, + "Voltage": null, + "PowerKW": null, + "CurrentTypeID": null, + "CurrentType": null, + "Quantity": null, + "Comments": null + } + ], + "NumberOfPoints": 1, + "GeneralComments": "", + "DatePlanned": null, + "DateLastConfirmed": "2021-09-30T10:53:31.845Z", + "StatusTypeID": null, + "DateLastStatusUpdate": "2021-09-30T10:53:31.845Z", + "MetadataValues": null, + "DataQualityLevel": 1, + "DateCreated": "2021-09-30T10:53:31.845Z", + "SubmissionStatusTypeID": null + }, + "UserComment": { + "ID": 0, + "ChargePointID": 0, + "CommentTypeID": null, + "CommentType": { + "ID": 10, + "Title": "General Comment" + }, + "UserName": null, + "Comment": "", + "Rating": null, + "RelatedURL": null, + "DateCreated": "2021-09-30T10:53:31.845Z", + "User": null, + "CheckinStatusTypeID": null, + "CheckinStatusType": { + "IsPositive": null, + "IsAutomatedCheckin": false, + "ID": 0, + "Title": "Did Not Visit Location" + }, + "IsActionedByEditor": null + } +} \ No newline at end of file diff --git a/evchargers/handler/test.json b/evchargers/handler/test.json new file mode 100644 index 0000000..7e78c8d --- /dev/null +++ b/evchargers/handler/test.json @@ -0,0 +1,389 @@ +[ + { + "DataProvider": { + "WebsiteURL": "http://openchargemap.org", + "Comments": null, + "DataProviderStatusType": { + "IsProviderEnabled": true, + "ID": 1, + "Title": "Manual Data Entry" + }, + "IsRestrictedEdit": false, + "IsOpenDataLicensed": true, + "IsApprovedImport": true, + "License": "Licensed under Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)", + "DateLastImported": null, + "ID": 1, + "Title": "Open Charge Map Contributors" + }, + "OperatorInfo": { + "WebsiteURL": "https://evcharge.online/", + "Comments": "Rolec. Pre-payment, minimum topup £5.00", + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": false, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": "Contact@power-portal.co.uk", + "FaultReportEmail": "Contact@power-portal.co.uk", + "IsRestrictedEdit": false, + "ID": 3295, + "Title": "evcharge.online" + }, + "UsageType": { + "IsPayAtLocation": false, + "IsMembershipRequired": false, + "IsAccessKeyRequired": false, + "ID": 6, + "Title": "Private - For Staff, Visitors or Customers" + }, + "StatusType": { + "IsOperational": true, + "IsUserSelectable": true, + "ID": 50, + "Title": "Operational" + }, + "SubmissionStatus": { + "IsLive": true, + "ID": 200, + "Title": "Submission Published" + }, + "UserComments": null, + "PercentageSimilarity": null, + "MediaItems": null, + "IsRecentlyVerified": true, + "DateLastVerified": "2021-09-27T16:41:00Z", + "ID": 189420, + "UUID": "E8B7D92B-8E36-43AB-909C-48A87A4BA279", + "ParentChargePointID": null, + "DataProviderID": 1, + "DataProvidersReference": null, + "OperatorID": 3295, + "OperatorsReference": null, + "UsageTypeID": 6, + "UsageCost": "Free", + "AddressInfo": { + "ID": 189779, + "Title": "Agrovista Allscott ", + "AddressLine1": "Agrovista Amenity", + "AddressLine2": "Walcot", + "Town": "Wrockwardine", + "StateOrProvince": "Telford and Wrekin", + "Postcode": "TF6 5DY", + "CountryID": 1, + "Country": { + "ISOCode": "GB", + "ContinentCode": "EU", + "ID": 1, + "Title": "United Kingdom" + }, + "Latitude": 52.70780288629825, + "Longitude": -2.5934020726602967, + "ContactTelephone1": null, + "ContactTelephone2": null, + "ContactEmail": null, + "AccessComments": null, + "RelatedURL": null, + "Distance": null, + "DistanceUnit": 0 + }, + "Connections": [ + { + "ID": 306355, + "ConnectionTypeID": 25, + "ConnectionType": { + "FormalName": "IEC 62196-2 Type 2", + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 25, + "Title": "Type 2 (Socket Only)" + }, + "Reference": "UKEV6095", + "StatusTypeID": 50, + "StatusType": { + "IsOperational": true, + "IsUserSelectable": true, + "ID": 50, + "Title": "Operational" + }, + "LevelID": 2, + "Level": { + "Comments": "Over 2 kW, usually non-domestic socket type", + "IsFastChargeCapable": false, + "ID": 2, + "Title": "Level 2 : Medium (Over 2kW)" + }, + "Amps": 32, + "Voltage": 400, + "PowerKW": 22.0, + "CurrentTypeID": 20, + "CurrentType": { + "Description": "Alternating Current - Three Phase", + "ID": 20, + "Title": "AC (Three-Phase)" + }, + "Quantity": 1, + "Comments": null + }, + { + "ID": 306356, + "ConnectionTypeID": 25, + "ConnectionType": { + "FormalName": "IEC 62196-2 Type 2", + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 25, + "Title": "Type 2 (Socket Only)" + }, + "Reference": "UKEV6096", + "StatusTypeID": 50, + "StatusType": { + "IsOperational": true, + "IsUserSelectable": true, + "ID": 50, + "Title": "Operational" + }, + "LevelID": 2, + "Level": { + "Comments": "Over 2 kW, usually non-domestic socket type", + "IsFastChargeCapable": false, + "ID": 2, + "Title": "Level 2 : Medium (Over 2kW)" + }, + "Amps": 32, + "Voltage": 400, + "PowerKW": 22.0, + "CurrentTypeID": 20, + "CurrentType": { + "Description": "Alternating Current - Three Phase", + "ID": 20, + "Title": "AC (Three-Phase)" + }, + "Quantity": 1, + "Comments": null + }, + { + "ID": 306357, + "ConnectionTypeID": 25, + "ConnectionType": { + "FormalName": "IEC 62196-2 Type 2", + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 25, + "Title": "Type 2 (Socket Only)" + }, + "Reference": "UKEV6097", + "StatusTypeID": 50, + "StatusType": { + "IsOperational": true, + "IsUserSelectable": true, + "ID": 50, + "Title": "Operational" + }, + "LevelID": 2, + "Level": { + "Comments": "Over 2 kW, usually non-domestic socket type", + "IsFastChargeCapable": false, + "ID": 2, + "Title": "Level 2 : Medium (Over 2kW)" + }, + "Amps": 32, + "Voltage": 400, + "PowerKW": 22.0, + "CurrentTypeID": 20, + "CurrentType": { + "Description": "Alternating Current - Three Phase", + "ID": 20, + "Title": "AC (Three-Phase)" + }, + "Quantity": 1, + "Comments": null + }, + { + "ID": 306358, + "ConnectionTypeID": 25, + "ConnectionType": { + "FormalName": "IEC 62196-2 Type 2", + "IsDiscontinued": false, + "IsObsolete": false, + "ID": 25, + "Title": "Type 2 (Socket Only)" + }, + "Reference": "UKEV6098", + "StatusTypeID": 50, + "StatusType": { + "IsOperational": true, + "IsUserSelectable": true, + "ID": 50, + "Title": "Operational" + }, + "LevelID": 2, + "Level": { + "Comments": "Over 2 kW, usually non-domestic socket type", + "IsFastChargeCapable": false, + "ID": 2, + "Title": "Level 2 : Medium (Over 2kW)" + }, + "Amps": 32, + "Voltage": 400, + "PowerKW": 22.0, + "CurrentTypeID": 20, + "CurrentType": { + "Description": "Alternating Current - Three Phase", + "ID": 20, + "Title": "AC (Three-Phase)" + }, + "Quantity": 1, + "Comments": null + } + ], + "NumberOfPoints": 4, + "GeneralComments": null, + "DatePlanned": null, + "DateLastConfirmed": null, + "StatusTypeID": 50, + "DateLastStatusUpdate": "2021-09-27T16:41:00Z", + "MetadataValues": null, + "DataQualityLevel": 1, + "DateCreated": "2021-09-27T16:41:00Z", + "SubmissionStatusTypeID": 200 + }, + { + "DataProvider": { + "WebsiteURL": "http://openchargemap.org", + "Comments": null, + "DataProviderStatusType": { + "IsProviderEnabled": true, + "ID": 1, + "Title": "Manual Data Entry" + }, + "IsRestrictedEdit": false, + "IsOpenDataLicensed": true, + "IsApprovedImport": true, + "License": "Licensed under Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)", + "DateLastImported": null, + "ID": 1, + "Title": "Open Charge Map Contributors" + }, + "OperatorInfo": { + "WebsiteURL": null, + "Comments": null, + "PhonePrimaryContact": null, + "PhoneSecondaryContact": null, + "IsPrivateIndividual": null, + "AddressInfo": null, + "BookingURL": null, + "ContactEmail": null, + "FaultReportEmail": null, + "IsRestrictedEdit": null, + "ID": 1, + "Title": "(Unknown Operator)" + }, + "UsageType": { + "IsPayAtLocation": null, + "IsMembershipRequired": null, + "IsAccessKeyRequired": null, + "ID": 1, + "Title": "Public" + }, + "StatusType": { + "IsOperational": true, + "IsUserSelectable": true, + "ID": 50, + "Title": "Operational" + }, + "SubmissionStatus": { + "IsLive": true, + "ID": 200, + "Title": "Submission Published" + }, + "UserComments": null, + "PercentageSimilarity": null, + "MediaItems": null, + "IsRecentlyVerified": true, + "DateLastVerified": "2021-09-27T15:13:00Z", + "ID": 189419, + "UUID": "2A489FF2-CF7B-41D8-979D-08A9A251568C", + "ParentChargePointID": null, + "DataProviderID": 1, + "DataProvidersReference": null, + "OperatorID": 1, + "OperatorsReference": null, + "UsageTypeID": 1, + "UsageCost": "FREE", + "AddressInfo": { + "ID": 189778, + "Title": "CRMU EV Station", + "AddressLine1": "Main Street", + "AddressLine2": null, + "Town": "Coon Rapids", + "StateOrProvince": "Iowa", + "Postcode": "50059", + "CountryID": 2, + "Country": { + "ISOCode": "US", + "ContinentCode": "NA", + "ID": 2, + "Title": "United States" + }, + "Latitude": 41.870824375016525, + "Longitude": -94.67421942978399, + "ContactTelephone1": null, + "ContactTelephone2": null, + "ContactEmail": null, + "AccessComments": null, + "RelatedURL": null, + "Distance": null, + "DistanceUnit": 0 + }, + "Connections": [ + { + "ID": 306345, + "ConnectionTypeID": 1, + "ConnectionType": { + "FormalName": "SAE J1772-2009", + "IsDiscontinued": null, + "IsObsolete": null, + "ID": 1, + "Title": "Type 1 (J1772)" + }, + "Reference": null, + "StatusTypeID": 50, + "StatusType": { + "IsOperational": true, + "IsUserSelectable": true, + "ID": 50, + "Title": "Operational" + }, + "LevelID": 2, + "Level": { + "Comments": "Over 2 kW, usually non-domestic socket type", + "IsFastChargeCapable": false, + "ID": 2, + "Title": "Level 2 : Medium (Over 2kW)" + }, + "Amps": 30, + "Voltage": 239, + "PowerKW": 6.6, + "CurrentTypeID": 10, + "CurrentType": { + "Description": "Alternating Current - Single Phase", + "ID": 10, + "Title": "AC (Single-Phase)" + }, + "Quantity": 2, + "Comments": null + } + ], + "NumberOfPoints": 2, + "GeneralComments": null, + "DatePlanned": null, + "DateLastConfirmed": null, + "StatusTypeID": 50, + "DateLastStatusUpdate": "2021-09-27T16:06:00Z", + "MetadataValues": null, + "DataQualityLevel": 1, + "DateCreated": "2021-09-27T15:13:00Z", + "SubmissionStatusTypeID": 200 + } +] diff --git a/evchargers/handler/types.go b/evchargers/handler/types.go new file mode 100644 index 0000000..222ec5d --- /dev/null +++ b/evchargers/handler/types.go @@ -0,0 +1,157 @@ +package handler + +type Poi struct { + ID int32 `bson:"ID" json:"ID"` + DataProviderID int32 `bson:"DataProviderID" json:"DataProviderID"` + DataProvider DataProvider `bson:"DataProvider" json:"DataProvider"` + OperatorID int32 `bson:"OperatorID" json:"OperatorID"` + OperatorInfo Operator `bson:"OperatorInfo" json:"OperatorInfo"` + UsageTypeID int32 `bson:"UsageTypeID" json:"UsageTypeID"` + UsageType UsageType `bson:"UsageType" json:"UsageType"` + Cost string `bson:"UsageCost" json:"UsageCost"` + Address Address `bson:"AddressInfo" json:"AddressInfo"` + Connections []Connection `bson:"Connections" json:"Connections"` + NumberOfPoints int32 `bson:"NumberOfPoints" json:"NumberOfPoints"` + GeneralComments string `bson:"GeneralComments" json:"GeneralComments"` + StatusTypeID int32 `bson:"StatusTypeID" json:"StatusTypeID"` + StatusType StatusType `bson:"StatusType" json:"StatusType"` + SpatialPosition Position `bson:"SpatialPosition" json:"SpatialPosition"` +} + +type Position struct { + Type string `bson:"type" json:"type"` + Coordinates []float64 `bson:"coordinates" json:"coordinates"` +} + +type Address struct { + Title string `bson:"Title" json:"Title"` + Latitude float64 `bson:"Latitude" json:"Latitude"` + Longitude float64 `bson:"Longitude" json:"Longitude"` + AddressLine1 string `bson:"AddressLine1" json:"AddressLine1"` + AddressLine2 string `bson:"AddressLine2" json:"AddressLine2"` + Town string `bson:"Town" json:"Town"` + StateOrProvince string `bson:"StateOrProvince" json:"StateOrProvince"` + AccessComments string `bson:"AccessComments" json:"AccessComments"` + Postcode string `bson:"Postcode" json:"Postcode"` + CountryID int32 `bson:"CountryID" json:"CountryID"` + Country Country `bson:"Country" json:"Country"` +} + +type Country struct { + ID int32 `bson:"ID" json:"ID"` + Title string `bson:"Title" json:"Title"` + ISOCode string `bson:"ISOCode" json:"ISOCode"` + ContinentCode string `bson:"ContinentCode" json:"ContinentCode"` +} + +type Connection struct { + TypeID int32 `bson:"ConnectionTypeID" json:"ConnectionTypeID"` + Type ConnectionType `bson:"ConnectionType" json:"ConnectionType"` + StatusTypeID int32 `bson:"StatusTypeID" json:"StatusTypeID"` + StatusType StatusType `bson:"StatusType" json:"StatusType"` + LevelID int32 `bson:"LevelID" json:"LevelID"` + Level ChargerType `bson:"Level" json:"Level"` + Amps float64 `bson:"Amps" json:"Amps"` + Voltage float64 `bson:"Voltage" json:"Voltage"` + Power float64 `bson:"PowerKW" json:"PowerKW"` + CurrentTypeID int32 `bson:"CurrentTypeID" json:"CurrentTypeID"` + CurrentType CurrentType `bson:"CurrentType" json:"CurrentType"` + Quantity int32 `bson:"Quantity" json:"Quantity"` + Reference string `bson:"Reference" json:"Reference"` +} + +type ChargerType struct { + ID int32 `bson:"ID" json:"ID"` + Title string `bson:"Title" json:"Title"` + Comments string `bson:"Comments" json:"Comments"` + IsFastChargeCapable bool `bson:"IsFastChargeCapable" json:"IsFastChargeCapable"` +} + +type CurrentType struct { + ID int32 `bson:"ID" json:"ID"` + Title string `bson:"Title" json:"Title"` + Description string `bson:"Description" json:"Description"` +} + +type ConnectionType struct { + ID int32 `bson:"ID" json:"ID"` + Title string `bson:"Title" json:"Title"` + FormalName string `bson:"FormalName" json:"FormalName"` + IsDiscontinued bool `bson:"IsDiscontinued" json:"IsDiscontinued"` + IsObsolete bool `bson:"IsObsolete" json:"IsObsolete"` +} + +type DataProvider struct { + ID int32 `bson:"ID" json:"ID"` + Title string `bson:"Title" json:"Title"` + WebsiteURL string `bson:"WebsiteURL" json:"WebsiteURL"` + Comments string `bson:"Comments" json:"Comments"` + DataProviderStatus DataProviderStatus `bson:"DataProviderStatusType" json:"DataProviderStatusType"` + IsOpenDataLicensed bool `bson:"IsOpenDataLicensed" json:"IsOpenDataLicensed"` + License string `bson:"License" json:"License"` +} + +type DataProviderStatus struct { + ID int32 `bson:"ID" json:"ID"` + Title string `bson:"Title" json:"Title"` + IsProviderEnabled bool `bson:"IsProviderEnabled" json:"IsProviderEnabled"` +} + +type Operator struct { + ID int32 `bson:"ID" json:"ID"` + Title string `bson:"Title" json:"Title"` + WebsiteURL string `bson:"WebsiteURL" json:"WebsiteURL"` + Comments string `bson:"Comments" json:"Comments"` + PhonePrimary string `bson:"PhonePrimaryContact" json:"PhonePrimaryContact"` + PhoneSecondary string `bson:"PhoneSecondaryContact" json:"PhoneSecondaryContact"` + IsPrivateIndividual bool `bson:"IsPrivateIndividual" json:"IsPrivateIndividual"` + ContactEmail string `bson:"ContactEmail" json:"ContactEmail"` + FaultReportEmail string `bson:"FaultReportEmail" json:"FaultReportEmail"` +} + +type UsageType struct { + ID int32 `bson:"ID" json:"ID"` + Title string `bson:"Title" json:"Title"` + IsPayAtLocation bool `bson:"IsPayAtLocation" json:"IsPayAtLocation"` + IsMembershipRequired bool `bson:"IsMembershipRequired" json:"IsMembershipRequired"` + IsAccessKeyRequired bool `bson:"IsAccessKeyRequired" json:"IsAccessKeyRequired"` +} + +type StatusType struct { + ID int32 `bson:"ID" json:"ID"` + Title string `bson:"Title" json:"Title"` + IsUsageSelectable bool `bson:"IsUsageSelectable" json:"IsUsageSelectable"` + IsOperational bool `bson:"IsOperational" json:"IsOperational"` +} + +type UserCommentType struct { + ID int32 `bson:"ID" json:"ID"` + Title string `bson:"Title" json:"Title"` +} + +type CheckinStatusType struct { + ID int32 `bson:"ID" json:"ID"` + Title string `bson:"Title" json:"Title"` + IsPositive bool `bson:"IsPositive" json:"IsPositive"` + IsAutomatedCheckin bool `bson:"IsAutomatedCheckin" json:"IsAutomatedCheckin"` +} + +type ReferenceData struct { + ChargerTypes []ChargerType `bson:"ChargerTypes" json:"ChargerTypes"` + ConnectionTypes []ConnectionType `bson:"ConnectionTypes" json:"ConnectionTypes"` + CurrentTypes []CurrentType `bson:"CurrentTypes" json:"CurrentTypes"` + Countries []Country `bson:"Countries" json:"Countries"` + DataProviders []DataProvider `bson:"DataProviders" json:"DataProviders"` + Operators []Operator `bson:"Operators" json:"Operators"` + StatusTypes []StatusType `bson:"StatusTypes" json:"StatusTypes"` + UsageTypes []UsageType `bson:"UsageTypes" json:"UsageTypes"` + UserCommentTypes []UserCommentType `bson:"UserCommentTypes" json:"UserCommentTypes"` + CheckinStatusTypes []CheckinStatusType `bson:"CheckinStatusTypes" json:"CheckinStatusTypes"` + SubmissionStatusTypes []SubmissionStatusType `bson:"SubmissionStatusTypes" json:"SubmissionStatusTypes"` +} + +type SubmissionStatusType struct { + ID int32 `bson:"ID" json:"ID"` + Title string `bson:"Title" json:"Title"` + IsLive bool `bson:"IsLive" json:"IsLive"` +} diff --git a/evchargers/main.go b/evchargers/main.go new file mode 100644 index 0000000..39323ed --- /dev/null +++ b/evchargers/main.go @@ -0,0 +1,25 @@ +package main + +import ( + "github.com/micro/services/evchargers/handler" + pb "github.com/micro/services/evchargers/proto" + + "github.com/micro/micro/v3/service" + "github.com/micro/micro/v3/service/logger" +) + +func main() { + // Create service + srv := service.New( + service.Name("evchargers"), + service.Version("latest"), + ) + + // Register handler + pb.RegisterEvchargersHandler(srv.Server(), handler.New()) + + // Run service + if err := srv.Run(); err != nil { + logger.Fatal(err) + } +} diff --git a/evchargers/micro.mu b/evchargers/micro.mu new file mode 100644 index 0000000..cb3e851 --- /dev/null +++ b/evchargers/micro.mu @@ -0,0 +1 @@ +service evchargers diff --git a/evchargers/proto/evchargers.pb.go b/evchargers/proto/evchargers.pb.go new file mode 100644 index 0000000..27613d3 --- /dev/null +++ b/evchargers/proto/evchargers.pb.go @@ -0,0 +1,2355 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.15.5 +// source: proto/evchargers.proto + +package evchargers + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Search by giving a coordinate and a max distance, or bounding box and optional filters +type SearchRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Coordinates from which to begin search + Location *Coordinates `protobuf:"bytes,1,opt,name=location,proto3" json:"location,omitempty"` + // Search distance from point in metres, defaults to 5000m + Distance int64 `protobuf:"varint,2,opt,name=distance,proto3" json:"distance,omitempty"` + // Bounding box to search within (top left and bottom right coordinates) + Box *BoundingBox `protobuf:"bytes,3,opt,name=box,proto3" json:"box,omitempty"` + // Maximum number of results to return, defaults to 100 + MaxResults int64 `protobuf:"varint,4,opt,name=max_results,json=maxResults,proto3" json:"max_results,omitempty"` + // Country ID + CountryId string `protobuf:"bytes,5,opt,name=country_id,json=countryId,proto3" json:"country_id,omitempty"` + // IDs of the the EV charger operator + Operators []string `protobuf:"bytes,6,rep,name=operators,proto3" json:"operators,omitempty"` + // IDs of the connection type + ConnectionTypes []string `protobuf:"bytes,7,rep,name=connection_types,json=connectionTypes,proto3" json:"connection_types,omitempty"` + // Supported charging levels + Levels []string `protobuf:"bytes,8,rep,name=levels,proto3" json:"levels,omitempty"` + // Minimum power in KW. Note: data not available for many chargers + MinPower int64 `protobuf:"varint,9,opt,name=min_power,json=minPower,proto3" json:"min_power,omitempty"` + // Usage of the charge point (is it public, membership required, etc) + UsageTypes []string `protobuf:"bytes,11,rep,name=usage_types,json=usageTypes,proto3" json:"usage_types,omitempty"` +} + +func (x *SearchRequest) Reset() { + *x = SearchRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_evchargers_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SearchRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SearchRequest) ProtoMessage() {} + +func (x *SearchRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_evchargers_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SearchRequest.ProtoReflect.Descriptor instead. +func (*SearchRequest) Descriptor() ([]byte, []int) { + return file_proto_evchargers_proto_rawDescGZIP(), []int{0} +} + +func (x *SearchRequest) GetLocation() *Coordinates { + if x != nil { + return x.Location + } + return nil +} + +func (x *SearchRequest) GetDistance() int64 { + if x != nil { + return x.Distance + } + return 0 +} + +func (x *SearchRequest) GetBox() *BoundingBox { + if x != nil { + return x.Box + } + return nil +} + +func (x *SearchRequest) GetMaxResults() int64 { + if x != nil { + return x.MaxResults + } + return 0 +} + +func (x *SearchRequest) GetCountryId() string { + if x != nil { + return x.CountryId + } + return "" +} + +func (x *SearchRequest) GetOperators() []string { + if x != nil { + return x.Operators + } + return nil +} + +func (x *SearchRequest) GetConnectionTypes() []string { + if x != nil { + return x.ConnectionTypes + } + return nil +} + +func (x *SearchRequest) GetLevels() []string { + if x != nil { + return x.Levels + } + return nil +} + +func (x *SearchRequest) GetMinPower() int64 { + if x != nil { + return x.MinPower + } + return 0 +} + +func (x *SearchRequest) GetUsageTypes() []string { + if x != nil { + return x.UsageTypes + } + return nil +} + +type Coordinates struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Latitude float32 `protobuf:"fixed32,1,opt,name=latitude,proto3" json:"latitude,omitempty"` + Longitude float32 `protobuf:"fixed32,2,opt,name=longitude,proto3" json:"longitude,omitempty"` +} + +func (x *Coordinates) Reset() { + *x = Coordinates{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_evchargers_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Coordinates) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Coordinates) ProtoMessage() {} + +func (x *Coordinates) ProtoReflect() protoreflect.Message { + mi := &file_proto_evchargers_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Coordinates.ProtoReflect.Descriptor instead. +func (*Coordinates) Descriptor() ([]byte, []int) { + return file_proto_evchargers_proto_rawDescGZIP(), []int{1} +} + +func (x *Coordinates) GetLatitude() float32 { + if x != nil { + return x.Latitude + } + return 0 +} + +func (x *Coordinates) GetLongitude() float32 { + if x != nil { + return x.Longitude + } + return 0 +} + +// Box to search (top left and bottom right coordinates) +type BoundingBox struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + BottomLeft *Coordinates `protobuf:"bytes,1,opt,name=bottom_left,json=bottomLeft,proto3" json:"bottom_left,omitempty"` + TopRight *Coordinates `protobuf:"bytes,2,opt,name=top_right,json=topRight,proto3" json:"top_right,omitempty"` +} + +func (x *BoundingBox) Reset() { + *x = BoundingBox{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_evchargers_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BoundingBox) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BoundingBox) ProtoMessage() {} + +func (x *BoundingBox) ProtoReflect() protoreflect.Message { + mi := &file_proto_evchargers_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BoundingBox.ProtoReflect.Descriptor instead. +func (*BoundingBox) Descriptor() ([]byte, []int) { + return file_proto_evchargers_proto_rawDescGZIP(), []int{2} +} + +func (x *BoundingBox) GetBottomLeft() *Coordinates { + if x != nil { + return x.BottomLeft + } + return nil +} + +func (x *BoundingBox) GetTopRight() *Coordinates { + if x != nil { + return x.TopRight + } + return nil +} + +type SearchResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Pois []*Poi `protobuf:"bytes,1,rep,name=pois,proto3" json:"pois,omitempty"` +} + +func (x *SearchResponse) Reset() { + *x = SearchResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_evchargers_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SearchResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SearchResponse) ProtoMessage() {} + +func (x *SearchResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_evchargers_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SearchResponse.ProtoReflect.Descriptor instead. +func (*SearchResponse) Descriptor() ([]byte, []int) { + return file_proto_evchargers_proto_rawDescGZIP(), []int{3} +} + +func (x *SearchResponse) GetPois() []*Poi { + if x != nil { + return x.Pois + } + return nil +} + +type Poi struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of the charger + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // The ID of the data provider + DataProviderId string `protobuf:"bytes,2,opt,name=data_provider_id,json=dataProviderId,proto3" json:"data_provider_id,omitempty"` + // The ID of the operator of the charger + OperatorId string `protobuf:"bytes,3,opt,name=operator_id,json=operatorId,proto3" json:"operator_id,omitempty"` + // The type of usage for this charger point (is it public, membership required, etc) + UsageTypeId string `protobuf:"bytes,4,opt,name=usage_type_id,json=usageTypeId,proto3" json:"usage_type_id,omitempty"` + // The address + Address *Address `protobuf:"bytes,5,opt,name=address,proto3" json:"address,omitempty"` + // The connections available at this charge point + Connections []*Connection `protobuf:"bytes,6,rep,name=connections,proto3" json:"connections,omitempty"` + // The number of charging points + NumPoints int64 `protobuf:"varint,7,opt,name=num_points,json=numPoints,proto3" json:"num_points,omitempty"` + // The cost of charging + Cost string `protobuf:"bytes,8,opt,name=cost,proto3" json:"cost,omitempty"` + // The operator + Operator *Operator `protobuf:"bytes,10,opt,name=operator,proto3" json:"operator,omitempty"` + // The type of usage + UsageType *UsageType `protobuf:"bytes,11,opt,name=usage_type,json=usageType,proto3" json:"usage_type,omitempty"` +} + +func (x *Poi) Reset() { + *x = Poi{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_evchargers_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Poi) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Poi) ProtoMessage() {} + +func (x *Poi) ProtoReflect() protoreflect.Message { + mi := &file_proto_evchargers_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Poi.ProtoReflect.Descriptor instead. +func (*Poi) Descriptor() ([]byte, []int) { + return file_proto_evchargers_proto_rawDescGZIP(), []int{4} +} + +func (x *Poi) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Poi) GetDataProviderId() string { + if x != nil { + return x.DataProviderId + } + return "" +} + +func (x *Poi) GetOperatorId() string { + if x != nil { + return x.OperatorId + } + return "" +} + +func (x *Poi) GetUsageTypeId() string { + if x != nil { + return x.UsageTypeId + } + return "" +} + +func (x *Poi) GetAddress() *Address { + if x != nil { + return x.Address + } + return nil +} + +func (x *Poi) GetConnections() []*Connection { + if x != nil { + return x.Connections + } + return nil +} + +func (x *Poi) GetNumPoints() int64 { + if x != nil { + return x.NumPoints + } + return 0 +} + +func (x *Poi) GetCost() string { + if x != nil { + return x.Cost + } + return "" +} + +func (x *Poi) GetOperator() *Operator { + if x != nil { + return x.Operator + } + return nil +} + +func (x *Poi) GetUsageType() *UsageType { + if x != nil { + return x.UsageType + } + return nil +} + +type Address struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Location *Coordinates `protobuf:"bytes,1,opt,name=location,proto3" json:"location,omitempty"` + Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` + AddressLine_1 string `protobuf:"bytes,3,opt,name=address_line_1,json=addressLine1,proto3" json:"address_line_1,omitempty"` + AddressLine_2 string `protobuf:"bytes,4,opt,name=address_line_2,json=addressLine2,proto3" json:"address_line_2,omitempty"` + Town string `protobuf:"bytes,5,opt,name=town,proto3" json:"town,omitempty"` + StateOrProvince string `protobuf:"bytes,6,opt,name=state_or_province,json=stateOrProvince,proto3" json:"state_or_province,omitempty"` + // Any comments about how to access the charger + AccessComments string `protobuf:"bytes,7,opt,name=access_comments,json=accessComments,proto3" json:"access_comments,omitempty"` + Postcode string `protobuf:"bytes,8,opt,name=postcode,proto3" json:"postcode,omitempty"` + CountryId string `protobuf:"bytes,9,opt,name=country_id,json=countryId,proto3" json:"country_id,omitempty"` + Country *Country `protobuf:"bytes,10,opt,name=country,proto3" json:"country,omitempty"` +} + +func (x *Address) Reset() { + *x = Address{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_evchargers_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Address) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Address) ProtoMessage() {} + +func (x *Address) ProtoReflect() protoreflect.Message { + mi := &file_proto_evchargers_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Address.ProtoReflect.Descriptor instead. +func (*Address) Descriptor() ([]byte, []int) { + return file_proto_evchargers_proto_rawDescGZIP(), []int{5} +} + +func (x *Address) GetLocation() *Coordinates { + if x != nil { + return x.Location + } + return nil +} + +func (x *Address) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *Address) GetAddressLine_1() string { + if x != nil { + return x.AddressLine_1 + } + return "" +} + +func (x *Address) GetAddressLine_2() string { + if x != nil { + return x.AddressLine_2 + } + return "" +} + +func (x *Address) GetTown() string { + if x != nil { + return x.Town + } + return "" +} + +func (x *Address) GetStateOrProvince() string { + if x != nil { + return x.StateOrProvince + } + return "" +} + +func (x *Address) GetAccessComments() string { + if x != nil { + return x.AccessComments + } + return "" +} + +func (x *Address) GetPostcode() string { + if x != nil { + return x.Postcode + } + return "" +} + +func (x *Address) GetCountryId() string { + if x != nil { + return x.CountryId + } + return "" +} + +func (x *Address) GetCountry() *Country { + if x != nil { + return x.Country + } + return nil +} + +type Connection struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of the connection type + ConnectionTypeId string `protobuf:"bytes,1,opt,name=connection_type_id,json=connectionTypeId,proto3" json:"connection_type_id,omitempty"` + Reference string `protobuf:"bytes,2,opt,name=reference,proto3" json:"reference,omitempty"` + // The level of charging power available + Level string `protobuf:"bytes,4,opt,name=level,proto3" json:"level,omitempty"` + // The amps offered + Amps float32 `protobuf:"fixed32,5,opt,name=amps,proto3" json:"amps,omitempty"` + // The voltage offered + Voltage float32 `protobuf:"fixed32,6,opt,name=voltage,proto3" json:"voltage,omitempty"` + // The power in KW + Power float32 `protobuf:"fixed32,7,opt,name=power,proto3" json:"power,omitempty"` + // The current + Current string `protobuf:"bytes,8,opt,name=current,proto3" json:"current,omitempty"` + ConnectionType *ConnectionType `protobuf:"bytes,9,opt,name=connection_type,json=connectionType,proto3" json:"connection_type,omitempty"` +} + +func (x *Connection) Reset() { + *x = Connection{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_evchargers_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Connection) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Connection) ProtoMessage() {} + +func (x *Connection) ProtoReflect() protoreflect.Message { + mi := &file_proto_evchargers_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Connection.ProtoReflect.Descriptor instead. +func (*Connection) Descriptor() ([]byte, []int) { + return file_proto_evchargers_proto_rawDescGZIP(), []int{6} +} + +func (x *Connection) GetConnectionTypeId() string { + if x != nil { + return x.ConnectionTypeId + } + return "" +} + +func (x *Connection) GetReference() string { + if x != nil { + return x.Reference + } + return "" +} + +func (x *Connection) GetLevel() string { + if x != nil { + return x.Level + } + return "" +} + +func (x *Connection) GetAmps() float32 { + if x != nil { + return x.Amps + } + return 0 +} + +func (x *Connection) GetVoltage() float32 { + if x != nil { + return x.Voltage + } + return 0 +} + +func (x *Connection) GetPower() float32 { + if x != nil { + return x.Power + } + return 0 +} + +func (x *Connection) GetCurrent() string { + if x != nil { + return x.Current + } + return "" +} + +func (x *Connection) GetConnectionType() *ConnectionType { + if x != nil { + return x.ConnectionType + } + return nil +} + +// Retrieve reference data as used by this API +type ReferenceDataRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ReferenceDataRequest) Reset() { + *x = ReferenceDataRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_evchargers_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ReferenceDataRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReferenceDataRequest) ProtoMessage() {} + +func (x *ReferenceDataRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_evchargers_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReferenceDataRequest.ProtoReflect.Descriptor instead. +func (*ReferenceDataRequest) Descriptor() ([]byte, []int) { + return file_proto_evchargers_proto_rawDescGZIP(), []int{7} +} + +type ReferenceDataResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The types of charger + ChargerTypes []*ChargerType `protobuf:"bytes,1,rep,name=charger_types,json=chargerTypes,proto3" json:"charger_types,omitempty"` + // The types of connection + ConnectionTypes []*ConnectionType `protobuf:"bytes,2,rep,name=connection_types,json=connectionTypes,proto3" json:"connection_types,omitempty"` + // The types of current + CurrentTypes []*CurrentType `protobuf:"bytes,3,rep,name=current_types,json=currentTypes,proto3" json:"current_types,omitempty"` + // The countries + Countries []*Country `protobuf:"bytes,4,rep,name=countries,proto3" json:"countries,omitempty"` + // The providers of the charger data + DataProviders []*DataProvider `protobuf:"bytes,5,rep,name=data_providers,json=dataProviders,proto3" json:"data_providers,omitempty"` + // The companies operating the chargers + Operators []*Operator `protobuf:"bytes,6,rep,name=operators,proto3" json:"operators,omitempty"` + // The status of the charger + StatusTypes []*StatusType `protobuf:"bytes,7,rep,name=status_types,json=statusTypes,proto3" json:"status_types,omitempty"` + // The status of a submission + SubmissionStatusTypes []*SubmissionStatusType `protobuf:"bytes,8,rep,name=submission_status_types,json=submissionStatusTypes,proto3" json:"submission_status_types,omitempty"` + // The different types of usage + UsageTypes []*UsageType `protobuf:"bytes,9,rep,name=usage_types,json=usageTypes,proto3" json:"usage_types,omitempty"` + // The types of user comment + UserCommentTypes []*UserCommentType `protobuf:"bytes,10,rep,name=user_comment_types,json=userCommentTypes,proto3" json:"user_comment_types,omitempty"` + // The types of checkin status + CheckinStatusTypes []*CheckinStatusType `protobuf:"bytes,11,rep,name=checkin_status_types,json=checkinStatusTypes,proto3" json:"checkin_status_types,omitempty"` +} + +func (x *ReferenceDataResponse) Reset() { + *x = ReferenceDataResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_evchargers_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ReferenceDataResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReferenceDataResponse) ProtoMessage() {} + +func (x *ReferenceDataResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_evchargers_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReferenceDataResponse.ProtoReflect.Descriptor instead. +func (*ReferenceDataResponse) Descriptor() ([]byte, []int) { + return file_proto_evchargers_proto_rawDescGZIP(), []int{8} +} + +func (x *ReferenceDataResponse) GetChargerTypes() []*ChargerType { + if x != nil { + return x.ChargerTypes + } + return nil +} + +func (x *ReferenceDataResponse) GetConnectionTypes() []*ConnectionType { + if x != nil { + return x.ConnectionTypes + } + return nil +} + +func (x *ReferenceDataResponse) GetCurrentTypes() []*CurrentType { + if x != nil { + return x.CurrentTypes + } + return nil +} + +func (x *ReferenceDataResponse) GetCountries() []*Country { + if x != nil { + return x.Countries + } + return nil +} + +func (x *ReferenceDataResponse) GetDataProviders() []*DataProvider { + if x != nil { + return x.DataProviders + } + return nil +} + +func (x *ReferenceDataResponse) GetOperators() []*Operator { + if x != nil { + return x.Operators + } + return nil +} + +func (x *ReferenceDataResponse) GetStatusTypes() []*StatusType { + if x != nil { + return x.StatusTypes + } + return nil +} + +func (x *ReferenceDataResponse) GetSubmissionStatusTypes() []*SubmissionStatusType { + if x != nil { + return x.SubmissionStatusTypes + } + return nil +} + +func (x *ReferenceDataResponse) GetUsageTypes() []*UsageType { + if x != nil { + return x.UsageTypes + } + return nil +} + +func (x *ReferenceDataResponse) GetUserCommentTypes() []*UserCommentType { + if x != nil { + return x.UserCommentTypes + } + return nil +} + +func (x *ReferenceDataResponse) GetCheckinStatusTypes() []*CheckinStatusType { + if x != nil { + return x.CheckinStatusTypes + } + return nil +} + +type ChargerType struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` + Comments string `protobuf:"bytes,3,opt,name=comments,proto3" json:"comments,omitempty"` + // Is this 40KW+ + IsFastChargeCapable bool `protobuf:"varint,4,opt,name=is_fast_charge_capable,json=isFastChargeCapable,proto3" json:"is_fast_charge_capable,omitempty"` +} + +func (x *ChargerType) Reset() { + *x = ChargerType{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_evchargers_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChargerType) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChargerType) ProtoMessage() {} + +func (x *ChargerType) ProtoReflect() protoreflect.Message { + mi := &file_proto_evchargers_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChargerType.ProtoReflect.Descriptor instead. +func (*ChargerType) Descriptor() ([]byte, []int) { + return file_proto_evchargers_proto_rawDescGZIP(), []int{9} +} + +func (x *ChargerType) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *ChargerType) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *ChargerType) GetComments() string { + if x != nil { + return x.Comments + } + return "" +} + +func (x *ChargerType) GetIsFastChargeCapable() bool { + if x != nil { + return x.IsFastChargeCapable + } + return false +} + +type ConnectionType struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` + FormalName string `protobuf:"bytes,3,opt,name=formal_name,json=formalName,proto3" json:"formal_name,omitempty"` + IsDiscontinued bool `protobuf:"varint,4,opt,name=is_discontinued,json=isDiscontinued,proto3" json:"is_discontinued,omitempty"` + IsObsolete bool `protobuf:"varint,5,opt,name=is_obsolete,json=isObsolete,proto3" json:"is_obsolete,omitempty"` +} + +func (x *ConnectionType) Reset() { + *x = ConnectionType{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_evchargers_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ConnectionType) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ConnectionType) ProtoMessage() {} + +func (x *ConnectionType) ProtoReflect() protoreflect.Message { + mi := &file_proto_evchargers_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ConnectionType.ProtoReflect.Descriptor instead. +func (*ConnectionType) Descriptor() ([]byte, []int) { + return file_proto_evchargers_proto_rawDescGZIP(), []int{10} +} + +func (x *ConnectionType) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *ConnectionType) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *ConnectionType) GetFormalName() string { + if x != nil { + return x.FormalName + } + return "" +} + +func (x *ConnectionType) GetIsDiscontinued() bool { + if x != nil { + return x.IsDiscontinued + } + return false +} + +func (x *ConnectionType) GetIsObsolete() bool { + if x != nil { + return x.IsObsolete + } + return false +} + +type CurrentType struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` +} + +func (x *CurrentType) Reset() { + *x = CurrentType{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_evchargers_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CurrentType) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CurrentType) ProtoMessage() {} + +func (x *CurrentType) ProtoReflect() protoreflect.Message { + mi := &file_proto_evchargers_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CurrentType.ProtoReflect.Descriptor instead. +func (*CurrentType) Descriptor() ([]byte, []int) { + return file_proto_evchargers_proto_rawDescGZIP(), []int{11} +} + +func (x *CurrentType) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *CurrentType) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *CurrentType) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +type Country struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` + IsoCode string `protobuf:"bytes,3,opt,name=iso_code,json=isoCode,proto3" json:"iso_code,omitempty"` + ContinentCode string `protobuf:"bytes,4,opt,name=continent_code,json=continentCode,proto3" json:"continent_code,omitempty"` +} + +func (x *Country) Reset() { + *x = Country{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_evchargers_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Country) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Country) ProtoMessage() {} + +func (x *Country) ProtoReflect() protoreflect.Message { + mi := &file_proto_evchargers_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Country.ProtoReflect.Descriptor instead. +func (*Country) Descriptor() ([]byte, []int) { + return file_proto_evchargers_proto_rawDescGZIP(), []int{12} +} + +func (x *Country) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Country) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *Country) GetIsoCode() string { + if x != nil { + return x.IsoCode + } + return "" +} + +func (x *Country) GetContinentCode() string { + if x != nil { + return x.ContinentCode + } + return "" +} + +type DataProvider struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` + Website string `protobuf:"bytes,3,opt,name=website,proto3" json:"website,omitempty"` + Comments string `protobuf:"bytes,4,opt,name=comments,proto3" json:"comments,omitempty"` + DataProviderStatusType *DataProviderStatusType `protobuf:"bytes,5,opt,name=data_provider_status_type,json=dataProviderStatusType,proto3" json:"data_provider_status_type,omitempty"` + // How is this data licensed + License string `protobuf:"bytes,6,opt,name=license,proto3" json:"license,omitempty"` +} + +func (x *DataProvider) Reset() { + *x = DataProvider{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_evchargers_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DataProvider) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DataProvider) ProtoMessage() {} + +func (x *DataProvider) ProtoReflect() protoreflect.Message { + mi := &file_proto_evchargers_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DataProvider.ProtoReflect.Descriptor instead. +func (*DataProvider) Descriptor() ([]byte, []int) { + return file_proto_evchargers_proto_rawDescGZIP(), []int{13} +} + +func (x *DataProvider) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *DataProvider) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *DataProvider) GetWebsite() string { + if x != nil { + return x.Website + } + return "" +} + +func (x *DataProvider) GetComments() string { + if x != nil { + return x.Comments + } + return "" +} + +func (x *DataProvider) GetDataProviderStatusType() *DataProviderStatusType { + if x != nil { + return x.DataProviderStatusType + } + return nil +} + +func (x *DataProvider) GetLicense() string { + if x != nil { + return x.License + } + return "" +} + +type DataProviderStatusType struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` + IsProviderEnabled bool `protobuf:"varint,3,opt,name=is_provider_enabled,json=isProviderEnabled,proto3" json:"is_provider_enabled,omitempty"` +} + +func (x *DataProviderStatusType) Reset() { + *x = DataProviderStatusType{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_evchargers_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DataProviderStatusType) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DataProviderStatusType) ProtoMessage() {} + +func (x *DataProviderStatusType) ProtoReflect() protoreflect.Message { + mi := &file_proto_evchargers_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DataProviderStatusType.ProtoReflect.Descriptor instead. +func (*DataProviderStatusType) Descriptor() ([]byte, []int) { + return file_proto_evchargers_proto_rawDescGZIP(), []int{14} +} + +func (x *DataProviderStatusType) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *DataProviderStatusType) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *DataProviderStatusType) GetIsProviderEnabled() bool { + if x != nil { + return x.IsProviderEnabled + } + return false +} + +type Operator struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` + Website string `protobuf:"bytes,3,opt,name=website,proto3" json:"website,omitempty"` + Comments string `protobuf:"bytes,4,opt,name=comments,proto3" json:"comments,omitempty"` + // Is this operator a private individual vs a company + IsPrivateIndividual bool `protobuf:"varint,5,opt,name=is_private_individual,json=isPrivateIndividual,proto3" json:"is_private_individual,omitempty"` + ContactEmail string `protobuf:"bytes,6,opt,name=contact_email,json=contactEmail,proto3" json:"contact_email,omitempty"` + PhonePrimary string `protobuf:"bytes,7,opt,name=phone_primary,json=phonePrimary,proto3" json:"phone_primary,omitempty"` + PhoneSecondary string `protobuf:"bytes,8,opt,name=phone_secondary,json=phoneSecondary,proto3" json:"phone_secondary,omitempty"` + FaultReportEmail string `protobuf:"bytes,9,opt,name=fault_report_email,json=faultReportEmail,proto3" json:"fault_report_email,omitempty"` +} + +func (x *Operator) Reset() { + *x = Operator{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_evchargers_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Operator) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Operator) ProtoMessage() {} + +func (x *Operator) ProtoReflect() protoreflect.Message { + mi := &file_proto_evchargers_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Operator.ProtoReflect.Descriptor instead. +func (*Operator) Descriptor() ([]byte, []int) { + return file_proto_evchargers_proto_rawDescGZIP(), []int{15} +} + +func (x *Operator) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Operator) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *Operator) GetWebsite() string { + if x != nil { + return x.Website + } + return "" +} + +func (x *Operator) GetComments() string { + if x != nil { + return x.Comments + } + return "" +} + +func (x *Operator) GetIsPrivateIndividual() bool { + if x != nil { + return x.IsPrivateIndividual + } + return false +} + +func (x *Operator) GetContactEmail() string { + if x != nil { + return x.ContactEmail + } + return "" +} + +func (x *Operator) GetPhonePrimary() string { + if x != nil { + return x.PhonePrimary + } + return "" +} + +func (x *Operator) GetPhoneSecondary() string { + if x != nil { + return x.PhoneSecondary + } + return "" +} + +func (x *Operator) GetFaultReportEmail() string { + if x != nil { + return x.FaultReportEmail + } + return "" +} + +type StatusType struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` + IsOperational bool `protobuf:"varint,3,opt,name=is_operational,json=isOperational,proto3" json:"is_operational,omitempty"` +} + +func (x *StatusType) Reset() { + *x = StatusType{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_evchargers_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StatusType) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StatusType) ProtoMessage() {} + +func (x *StatusType) ProtoReflect() protoreflect.Message { + mi := &file_proto_evchargers_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StatusType.ProtoReflect.Descriptor instead. +func (*StatusType) Descriptor() ([]byte, []int) { + return file_proto_evchargers_proto_rawDescGZIP(), []int{16} +} + +func (x *StatusType) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *StatusType) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *StatusType) GetIsOperational() bool { + if x != nil { + return x.IsOperational + } + return false +} + +type SubmissionStatusType struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` + IsLive bool `protobuf:"varint,3,opt,name=is_live,json=isLive,proto3" json:"is_live,omitempty"` +} + +func (x *SubmissionStatusType) Reset() { + *x = SubmissionStatusType{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_evchargers_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SubmissionStatusType) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubmissionStatusType) ProtoMessage() {} + +func (x *SubmissionStatusType) ProtoReflect() protoreflect.Message { + mi := &file_proto_evchargers_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubmissionStatusType.ProtoReflect.Descriptor instead. +func (*SubmissionStatusType) Descriptor() ([]byte, []int) { + return file_proto_evchargers_proto_rawDescGZIP(), []int{17} +} + +func (x *SubmissionStatusType) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *SubmissionStatusType) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *SubmissionStatusType) GetIsLive() bool { + if x != nil { + return x.IsLive + } + return false +} + +type UsageType struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` + IsPayAtLocation bool `protobuf:"varint,3,opt,name=is_pay_at_location,json=isPayAtLocation,proto3" json:"is_pay_at_location,omitempty"` + IsMembershipRequired bool `protobuf:"varint,4,opt,name=is_membership_required,json=isMembershipRequired,proto3" json:"is_membership_required,omitempty"` + IsAccessKeyRequired bool `protobuf:"varint,5,opt,name=is_access_key_required,json=isAccessKeyRequired,proto3" json:"is_access_key_required,omitempty"` +} + +func (x *UsageType) Reset() { + *x = UsageType{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_evchargers_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UsageType) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UsageType) ProtoMessage() {} + +func (x *UsageType) ProtoReflect() protoreflect.Message { + mi := &file_proto_evchargers_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UsageType.ProtoReflect.Descriptor instead. +func (*UsageType) Descriptor() ([]byte, []int) { + return file_proto_evchargers_proto_rawDescGZIP(), []int{18} +} + +func (x *UsageType) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *UsageType) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *UsageType) GetIsPayAtLocation() bool { + if x != nil { + return x.IsPayAtLocation + } + return false +} + +func (x *UsageType) GetIsMembershipRequired() bool { + if x != nil { + return x.IsMembershipRequired + } + return false +} + +func (x *UsageType) GetIsAccessKeyRequired() bool { + if x != nil { + return x.IsAccessKeyRequired + } + return false +} + +type UserCommentType struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` +} + +func (x *UserCommentType) Reset() { + *x = UserCommentType{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_evchargers_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UserCommentType) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UserCommentType) ProtoMessage() {} + +func (x *UserCommentType) ProtoReflect() protoreflect.Message { + mi := &file_proto_evchargers_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UserCommentType.ProtoReflect.Descriptor instead. +func (*UserCommentType) Descriptor() ([]byte, []int) { + return file_proto_evchargers_proto_rawDescGZIP(), []int{19} +} + +func (x *UserCommentType) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *UserCommentType) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +type CheckinStatusType struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` + IsPositive bool `protobuf:"varint,3,opt,name=is_positive,json=isPositive,proto3" json:"is_positive,omitempty"` + IsAutomated bool `protobuf:"varint,4,opt,name=is_automated,json=isAutomated,proto3" json:"is_automated,omitempty"` +} + +func (x *CheckinStatusType) Reset() { + *x = CheckinStatusType{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_evchargers_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CheckinStatusType) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CheckinStatusType) ProtoMessage() {} + +func (x *CheckinStatusType) ProtoReflect() protoreflect.Message { + mi := &file_proto_evchargers_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CheckinStatusType.ProtoReflect.Descriptor instead. +func (*CheckinStatusType) Descriptor() ([]byte, []int) { + return file_proto_evchargers_proto_rawDescGZIP(), []int{20} +} + +func (x *CheckinStatusType) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *CheckinStatusType) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *CheckinStatusType) GetIsPositive() bool { + if x != nil { + return x.IsPositive + } + return false +} + +func (x *CheckinStatusType) GetIsAutomated() bool { + if x != nil { + return x.IsAutomated + } + return false +} + +var File_proto_evchargers_proto protoreflect.FileDescriptor + +var file_proto_evchargers_proto_rawDesc = []byte{ + 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x76, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, + 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x65, 0x76, 0x63, 0x68, 0x61, 0x72, + 0x67, 0x65, 0x72, 0x73, 0x22, 0xea, 0x02, 0x0a, 0x0d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x65, 0x76, 0x63, 0x68, 0x61, + 0x72, 0x67, 0x65, 0x72, 0x73, 0x2e, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, + 0x73, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x64, + 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x64, + 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x29, 0x0a, 0x03, 0x62, 0x6f, 0x78, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x65, 0x76, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x72, + 0x73, 0x2e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6f, 0x78, 0x52, 0x03, 0x62, + 0x6f, 0x78, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x69, + 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, + 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x18, + 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x73, + 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6c, + 0x65, 0x76, 0x65, 0x6c, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x65, 0x76, + 0x65, 0x6c, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6e, 0x5f, 0x70, 0x6f, 0x77, 0x65, 0x72, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x50, 0x6f, 0x77, 0x65, 0x72, + 0x12, 0x1f, 0x0a, 0x0b, 0x75, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, + 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x75, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x73, 0x22, 0x47, 0x0a, 0x0b, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x73, + 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x02, 0x52, 0x08, 0x6c, 0x61, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, + 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x22, 0x7d, 0x0a, 0x0b, 0x42, 0x6f, + 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6f, 0x78, 0x12, 0x38, 0x0a, 0x0b, 0x62, 0x6f, 0x74, + 0x74, 0x6f, 0x6d, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x65, 0x76, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x72, 0x73, 0x2e, 0x43, 0x6f, 0x6f, 0x72, + 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x73, 0x52, 0x0a, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x4c, + 0x65, 0x66, 0x74, 0x12, 0x34, 0x0a, 0x09, 0x74, 0x6f, 0x70, 0x5f, 0x72, 0x69, 0x67, 0x68, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x65, 0x76, 0x63, 0x68, 0x61, 0x72, 0x67, + 0x65, 0x72, 0x73, 0x2e, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x73, 0x52, + 0x08, 0x74, 0x6f, 0x70, 0x52, 0x69, 0x67, 0x68, 0x74, 0x22, 0x35, 0x0a, 0x0e, 0x53, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x04, 0x70, + 0x6f, 0x69, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x65, 0x76, 0x63, 0x68, + 0x61, 0x72, 0x67, 0x65, 0x72, 0x73, 0x2e, 0x50, 0x6f, 0x69, 0x52, 0x04, 0x70, 0x6f, 0x69, 0x73, + 0x22, 0x88, 0x03, 0x0a, 0x03, 0x50, 0x6f, 0x69, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x64, 0x61, 0x74, 0x61, + 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x69, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, + 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x75, 0x73, 0x61, 0x67, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x65, 0x76, 0x63, 0x68, 0x61, + 0x72, 0x67, 0x65, 0x72, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x38, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x65, 0x76, + 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x72, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, + 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, + 0x6f, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x65, 0x76, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, + 0x72, 0x73, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x08, 0x6f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x34, 0x0a, 0x0a, 0x75, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x65, 0x76, 0x63, 0x68, + 0x61, 0x72, 0x67, 0x65, 0x72, 0x73, 0x2e, 0x55, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x52, 0x09, 0x75, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0xf3, 0x02, 0x0a, 0x07, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x33, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x65, 0x76, 0x63, 0x68, + 0x61, 0x72, 0x67, 0x65, 0x72, 0x73, 0x2e, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, + 0x65, 0x73, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, + 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, + 0x6e, 0x65, 0x5f, 0x31, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x4c, 0x69, 0x6e, 0x65, 0x31, 0x12, 0x24, 0x0a, 0x0e, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x32, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x6e, 0x65, 0x32, 0x12, 0x12, + 0x0a, 0x04, 0x74, 0x6f, 0x77, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x6f, + 0x77, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x6f, 0x72, 0x5f, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x27, + 0x0a, 0x0f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, + 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x74, 0x63, + 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x74, 0x63, + 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x69, + 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, + 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x65, 0x76, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x72, 0x73, + 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, + 0x79, 0x22, 0x91, 0x02, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x63, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x1c, + 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x65, 0x76, + 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x6d, 0x70, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x04, 0x61, 0x6d, 0x70, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x6f, 0x6c, 0x74, 0x61, 0x67, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x76, 0x6f, 0x6c, 0x74, 0x61, 0x67, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, + 0x05, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, + 0x12, 0x43, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x65, 0x76, 0x63, 0x68, + 0x61, 0x72, 0x67, 0x65, 0x72, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x54, 0x79, 0x70, 0x65, 0x22, 0x16, 0x0a, 0x14, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xeb, 0x05, + 0x0a, 0x15, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0d, 0x63, 0x68, 0x61, 0x72, 0x67, + 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x65, 0x76, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x72, 0x73, 0x2e, 0x43, 0x68, 0x61, 0x72, + 0x67, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x72, + 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x65, 0x76, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x72, 0x73, 0x2e, 0x43, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0f, 0x63, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x3c, 0x0a, 0x0d, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x65, 0x76, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x72, 0x73, + 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x31, 0x0a, 0x09, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x65, 0x76, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x72, 0x73, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x09, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x3f, 0x0a, + 0x0e, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x65, 0x76, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, + 0x72, 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, + 0x0d, 0x64, 0x61, 0x74, 0x61, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0x32, + 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x65, 0x76, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x72, 0x73, 0x2e, 0x4f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, + 0x72, 0x73, 0x12, 0x39, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x65, 0x76, 0x63, 0x68, 0x61, + 0x72, 0x67, 0x65, 0x72, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, + 0x52, 0x0b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x58, 0x0a, + 0x17, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, + 0x2e, 0x65, 0x76, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x72, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, + 0x52, 0x15, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x36, 0x0a, 0x0b, 0x75, 0x73, 0x61, 0x67, 0x65, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x65, + 0x76, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x72, 0x73, 0x2e, 0x55, 0x73, 0x61, 0x67, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x0a, 0x75, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, + 0x49, 0x0a, 0x12, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x65, 0x76, + 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x72, 0x73, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6d, + 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x10, 0x75, 0x73, 0x65, 0x72, 0x43, 0x6f, + 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x65, 0x76, 0x63, 0x68, 0x61, + 0x72, 0x67, 0x65, 0x72, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x52, 0x12, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0x84, 0x01, 0x0a, 0x0b, + 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, + 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x33, 0x0a, + 0x16, 0x69, 0x73, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x5f, + 0x63, 0x61, 0x70, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, + 0x73, 0x46, 0x61, 0x73, 0x74, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, + 0x6c, 0x65, 0x22, 0xa1, 0x01, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x0f, + 0x69, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x73, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x74, + 0x69, 0x6e, 0x75, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x6f, 0x62, 0x73, 0x6f, + 0x6c, 0x65, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x4f, 0x62, + 0x73, 0x6f, 0x6c, 0x65, 0x74, 0x65, 0x22, 0x55, 0x0a, 0x0b, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x71, 0x0a, + 0x07, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x19, + 0x0a, 0x08, 0x69, 0x73, 0x6f, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x69, 0x73, 0x6f, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, + 0x74, 0x69, 0x6e, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x64, 0x65, + 0x22, 0xe3, 0x01, 0x0a, 0x0c, 0x44, 0x61, 0x74, 0x61, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x77, 0x65, 0x62, 0x73, 0x69, + 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x5d, 0x0a, + 0x19, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x22, 0x2e, 0x65, 0x76, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x72, 0x73, 0x2e, 0x44, 0x61, + 0x74, 0x61, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x16, 0x64, 0x61, 0x74, 0x61, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, + 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x22, 0x6e, 0x0a, 0x16, 0x44, 0x61, 0x74, 0x61, 0x50, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x69, 0x73, 0x5f, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x11, 0x69, 0x73, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x45, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0xbb, 0x02, 0x0a, 0x08, 0x4f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x6f, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x77, 0x65, 0x62, + 0x73, 0x69, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, 0x65, 0x62, 0x73, + 0x69, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, + 0x32, 0x0a, 0x15, 0x69, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x6e, + 0x64, 0x69, 0x76, 0x69, 0x64, 0x75, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, + 0x69, 0x73, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x69, 0x76, 0x69, 0x64, + 0x75, 0x61, 0x6c, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x5f, 0x65, + 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x63, 0x74, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x68, 0x6f, 0x6e, + 0x65, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x27, 0x0a, + 0x0f, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x53, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x12, 0x2c, 0x0a, 0x12, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, + 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x10, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x45, + 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x59, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x73, 0x5f, 0x6f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0d, 0x69, 0x73, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x22, + 0x55, 0x0a, 0x14, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x17, 0x0a, + 0x07, 0x69, 0x73, 0x5f, 0x6c, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, + 0x69, 0x73, 0x4c, 0x69, 0x76, 0x65, 0x22, 0xc9, 0x01, 0x0a, 0x09, 0x55, 0x73, 0x61, 0x67, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x2b, 0x0a, 0x12, 0x69, 0x73, + 0x5f, 0x70, 0x61, 0x79, 0x5f, 0x61, 0x74, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x69, 0x73, 0x50, 0x61, 0x79, 0x41, 0x74, 0x4c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x16, 0x69, 0x73, 0x5f, 0x6d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x69, 0x73, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x33, 0x0a, + 0x16, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x72, + 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, + 0x73, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, + 0x65, 0x64, 0x22, 0x37, 0x0a, 0x0f, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x22, 0x7d, 0x0a, 0x11, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x50, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x61, 0x75, + 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, + 0x73, 0x41, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x65, 0x64, 0x32, 0xa7, 0x01, 0x0a, 0x0a, 0x45, + 0x76, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x72, 0x73, 0x12, 0x41, 0x0a, 0x06, 0x53, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x12, 0x19, 0x2e, 0x65, 0x76, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x72, 0x73, + 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, + 0x2e, 0x65, 0x76, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x72, 0x73, 0x2e, 0x53, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x0d, + 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x20, 0x2e, + 0x65, 0x76, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x72, 0x73, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x21, 0x2e, 0x65, 0x76, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x72, 0x73, 0x2e, 0x52, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x42, 0x14, 0x5a, 0x12, 0x2e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3b, + 0x65, 0x76, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x72, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, +} + +var ( + file_proto_evchargers_proto_rawDescOnce sync.Once + file_proto_evchargers_proto_rawDescData = file_proto_evchargers_proto_rawDesc +) + +func file_proto_evchargers_proto_rawDescGZIP() []byte { + file_proto_evchargers_proto_rawDescOnce.Do(func() { + file_proto_evchargers_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_evchargers_proto_rawDescData) + }) + return file_proto_evchargers_proto_rawDescData +} + +var file_proto_evchargers_proto_msgTypes = make([]protoimpl.MessageInfo, 21) +var file_proto_evchargers_proto_goTypes = []interface{}{ + (*SearchRequest)(nil), // 0: evchargers.SearchRequest + (*Coordinates)(nil), // 1: evchargers.Coordinates + (*BoundingBox)(nil), // 2: evchargers.BoundingBox + (*SearchResponse)(nil), // 3: evchargers.SearchResponse + (*Poi)(nil), // 4: evchargers.Poi + (*Address)(nil), // 5: evchargers.Address + (*Connection)(nil), // 6: evchargers.Connection + (*ReferenceDataRequest)(nil), // 7: evchargers.ReferenceDataRequest + (*ReferenceDataResponse)(nil), // 8: evchargers.ReferenceDataResponse + (*ChargerType)(nil), // 9: evchargers.ChargerType + (*ConnectionType)(nil), // 10: evchargers.ConnectionType + (*CurrentType)(nil), // 11: evchargers.CurrentType + (*Country)(nil), // 12: evchargers.Country + (*DataProvider)(nil), // 13: evchargers.DataProvider + (*DataProviderStatusType)(nil), // 14: evchargers.DataProviderStatusType + (*Operator)(nil), // 15: evchargers.Operator + (*StatusType)(nil), // 16: evchargers.StatusType + (*SubmissionStatusType)(nil), // 17: evchargers.SubmissionStatusType + (*UsageType)(nil), // 18: evchargers.UsageType + (*UserCommentType)(nil), // 19: evchargers.UserCommentType + (*CheckinStatusType)(nil), // 20: evchargers.CheckinStatusType +} +var file_proto_evchargers_proto_depIdxs = []int32{ + 1, // 0: evchargers.SearchRequest.location:type_name -> evchargers.Coordinates + 2, // 1: evchargers.SearchRequest.box:type_name -> evchargers.BoundingBox + 1, // 2: evchargers.BoundingBox.bottom_left:type_name -> evchargers.Coordinates + 1, // 3: evchargers.BoundingBox.top_right:type_name -> evchargers.Coordinates + 4, // 4: evchargers.SearchResponse.pois:type_name -> evchargers.Poi + 5, // 5: evchargers.Poi.address:type_name -> evchargers.Address + 6, // 6: evchargers.Poi.connections:type_name -> evchargers.Connection + 15, // 7: evchargers.Poi.operator:type_name -> evchargers.Operator + 18, // 8: evchargers.Poi.usage_type:type_name -> evchargers.UsageType + 1, // 9: evchargers.Address.location:type_name -> evchargers.Coordinates + 12, // 10: evchargers.Address.country:type_name -> evchargers.Country + 10, // 11: evchargers.Connection.connection_type:type_name -> evchargers.ConnectionType + 9, // 12: evchargers.ReferenceDataResponse.charger_types:type_name -> evchargers.ChargerType + 10, // 13: evchargers.ReferenceDataResponse.connection_types:type_name -> evchargers.ConnectionType + 11, // 14: evchargers.ReferenceDataResponse.current_types:type_name -> evchargers.CurrentType + 12, // 15: evchargers.ReferenceDataResponse.countries:type_name -> evchargers.Country + 13, // 16: evchargers.ReferenceDataResponse.data_providers:type_name -> evchargers.DataProvider + 15, // 17: evchargers.ReferenceDataResponse.operators:type_name -> evchargers.Operator + 16, // 18: evchargers.ReferenceDataResponse.status_types:type_name -> evchargers.StatusType + 17, // 19: evchargers.ReferenceDataResponse.submission_status_types:type_name -> evchargers.SubmissionStatusType + 18, // 20: evchargers.ReferenceDataResponse.usage_types:type_name -> evchargers.UsageType + 19, // 21: evchargers.ReferenceDataResponse.user_comment_types:type_name -> evchargers.UserCommentType + 20, // 22: evchargers.ReferenceDataResponse.checkin_status_types:type_name -> evchargers.CheckinStatusType + 14, // 23: evchargers.DataProvider.data_provider_status_type:type_name -> evchargers.DataProviderStatusType + 0, // 24: evchargers.Evchargers.Search:input_type -> evchargers.SearchRequest + 7, // 25: evchargers.Evchargers.ReferenceData:input_type -> evchargers.ReferenceDataRequest + 3, // 26: evchargers.Evchargers.Search:output_type -> evchargers.SearchResponse + 8, // 27: evchargers.Evchargers.ReferenceData:output_type -> evchargers.ReferenceDataResponse + 26, // [26:28] is the sub-list for method output_type + 24, // [24:26] is the sub-list for method input_type + 24, // [24:24] is the sub-list for extension type_name + 24, // [24:24] is the sub-list for extension extendee + 0, // [0:24] is the sub-list for field type_name +} + +func init() { file_proto_evchargers_proto_init() } +func file_proto_evchargers_proto_init() { + if File_proto_evchargers_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_proto_evchargers_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SearchRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_evchargers_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Coordinates); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_evchargers_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BoundingBox); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_evchargers_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SearchResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_evchargers_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Poi); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_evchargers_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Address); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_evchargers_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Connection); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_evchargers_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ReferenceDataRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_evchargers_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ReferenceDataResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_evchargers_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChargerType); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_evchargers_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ConnectionType); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_evchargers_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CurrentType); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_evchargers_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Country); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_evchargers_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DataProvider); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_evchargers_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DataProviderStatusType); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_evchargers_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Operator); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_evchargers_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StatusType); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_evchargers_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SubmissionStatusType); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_evchargers_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UsageType); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_evchargers_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UserCommentType); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_evchargers_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CheckinStatusType); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_proto_evchargers_proto_rawDesc, + NumEnums: 0, + NumMessages: 21, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_proto_evchargers_proto_goTypes, + DependencyIndexes: file_proto_evchargers_proto_depIdxs, + MessageInfos: file_proto_evchargers_proto_msgTypes, + }.Build() + File_proto_evchargers_proto = out.File + file_proto_evchargers_proto_rawDesc = nil + file_proto_evchargers_proto_goTypes = nil + file_proto_evchargers_proto_depIdxs = nil +} diff --git a/evchargers/proto/evchargers.pb.micro.go b/evchargers/proto/evchargers.pb.micro.go new file mode 100644 index 0000000..d954e2f --- /dev/null +++ b/evchargers/proto/evchargers.pb.micro.go @@ -0,0 +1,110 @@ +// Code generated by protoc-gen-micro. DO NOT EDIT. +// source: proto/evchargers.proto + +package evchargers + +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + math "math" +) + +import ( + context "context" + api "github.com/micro/micro/v3/service/api" + client "github.com/micro/micro/v3/service/client" + server "github.com/micro/micro/v3/service/server" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +// Reference imports to suppress errors if they are not otherwise used. +var _ api.Endpoint +var _ context.Context +var _ client.Option +var _ server.Option + +// Api Endpoints for Evchargers service + +func NewEvchargersEndpoints() []*api.Endpoint { + return []*api.Endpoint{} +} + +// Client API for Evchargers service + +type EvchargersService interface { + Search(ctx context.Context, in *SearchRequest, opts ...client.CallOption) (*SearchResponse, error) + ReferenceData(ctx context.Context, in *ReferenceDataRequest, opts ...client.CallOption) (*ReferenceDataResponse, error) +} + +type evchargersService struct { + c client.Client + name string +} + +func NewEvchargersService(name string, c client.Client) EvchargersService { + return &evchargersService{ + c: c, + name: name, + } +} + +func (c *evchargersService) Search(ctx context.Context, in *SearchRequest, opts ...client.CallOption) (*SearchResponse, error) { + req := c.c.NewRequest(c.name, "Evchargers.Search", in) + out := new(SearchResponse) + err := c.c.Call(ctx, req, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *evchargersService) ReferenceData(ctx context.Context, in *ReferenceDataRequest, opts ...client.CallOption) (*ReferenceDataResponse, error) { + req := c.c.NewRequest(c.name, "Evchargers.ReferenceData", in) + out := new(ReferenceDataResponse) + err := c.c.Call(ctx, req, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for Evchargers service + +type EvchargersHandler interface { + Search(context.Context, *SearchRequest, *SearchResponse) error + ReferenceData(context.Context, *ReferenceDataRequest, *ReferenceDataResponse) error +} + +func RegisterEvchargersHandler(s server.Server, hdlr EvchargersHandler, opts ...server.HandlerOption) error { + type evchargers interface { + Search(ctx context.Context, in *SearchRequest, out *SearchResponse) error + ReferenceData(ctx context.Context, in *ReferenceDataRequest, out *ReferenceDataResponse) error + } + type Evchargers struct { + evchargers + } + h := &evchargersHandler{hdlr} + return s.Handle(s.NewHandler(&Evchargers{h}, opts...)) +} + +type evchargersHandler struct { + EvchargersHandler +} + +func (h *evchargersHandler) Search(ctx context.Context, in *SearchRequest, out *SearchResponse) error { + return h.EvchargersHandler.Search(ctx, in, out) +} + +func (h *evchargersHandler) ReferenceData(ctx context.Context, in *ReferenceDataRequest, out *ReferenceDataResponse) error { + return h.EvchargersHandler.ReferenceData(ctx, in, out) +} diff --git a/evchargers/proto/evchargers.proto b/evchargers/proto/evchargers.proto new file mode 100644 index 0000000..c9a3acd --- /dev/null +++ b/evchargers/proto/evchargers.proto @@ -0,0 +1,228 @@ +syntax = "proto3"; + +package evchargers; + +option go_package = "./proto;evchargers"; + +service Evchargers { + rpc Search(SearchRequest) returns (SearchResponse) {} + rpc ReferenceData(ReferenceDataRequest) returns (ReferenceDataResponse) {} +} + + +// Search by giving a coordinate and a max distance, or bounding box and optional filters +message SearchRequest { + // Coordinates from which to begin search + Coordinates location = 1; + // Search distance from point in metres, defaults to 5000m + int64 distance = 2; + // Bounding box to search within (top left and bottom right coordinates) + BoundingBox box = 3; + // Maximum number of results to return, defaults to 100 + int64 max_results = 4; + // Country ID + string country_id = 5; + // IDs of the the EV charger operator + repeated string operators = 6; + // IDs of the connection type + repeated string connection_types = 7; + // Supported charging levels + repeated string levels = 8; + // Minimum power in KW. Note: data not available for many chargers + int64 min_power = 9; + // Usage of the charge point (is it public, membership required, etc) + repeated string usage_types = 11; + + // TODO https://openchargemap.org/site/develop/api#POI + // verbose / compact to only return IDs for ref data + // polygon + // polyline +} + +message Coordinates { + float latitude = 1; + float longitude = 2; +} + +// Box to search (top left and bottom right coordinates) +message BoundingBox { + Coordinates bottom_left = 1; + Coordinates top_right = 2; +} + +message SearchResponse { + repeated Poi pois = 1; +} + +message Poi { + // The ID of the charger + string id = 1; + // The ID of the data provider + string data_provider_id = 2; + // The ID of the operator of the charger + string operator_id = 3; + // The type of usage for this charger point (is it public, membership required, etc) + string usage_type_id = 4; + // The address + Address address = 5; + // The connections available at this charge point + repeated Connection connections = 6; + // The number of charging points + int64 num_points = 7; + // The cost of charging + string cost = 8; + // The operator + Operator operator = 10; + // The type of usage + UsageType usage_type = 11; + +} + +message Address { + Coordinates location = 1; + string title = 2; + string address_line_1 = 3; + string address_line_2 = 4; + string town = 5; + string state_or_province = 6; + // Any comments about how to access the charger + string access_comments = 7; + string postcode = 8; + string country_id = 9; + Country country = 10; +} + +message Connection { + // The ID of the connection type + string connection_type_id = 1; + string reference = 2; + // The level of charging power available + string level = 4; + // The amps offered + float amps = 5; + // The voltage offered + float voltage = 6; + // The power in KW + float power = 7; + // The current + string current = 8; + ConnectionType connection_type = 9; +} + +// Retrieve reference data as used by this API +message ReferenceDataRequest {} + +message ReferenceDataResponse { + // The types of charger + repeated ChargerType charger_types = 1; + // The types of connection + repeated ConnectionType connection_types = 2; + // The types of current + repeated CurrentType current_types = 3; + // The countries + repeated Country countries = 4; + // The providers of the charger data + repeated DataProvider data_providers = 5; + // The companies operating the chargers + repeated Operator operators = 6; + // The status of the charger + repeated StatusType status_types = 7; + // The status of a submission + repeated SubmissionStatusType submission_status_types = 8; + // The different types of usage + repeated UsageType usage_types = 9; + // The types of user comment + repeated UserCommentType user_comment_types = 10; + // The types of checkin status + repeated CheckinStatusType checkin_status_types = 11; +} + +message ChargerType { + string id = 1; + string title = 2; + string comments = 3; + // Is this 40KW+ + bool is_fast_charge_capable = 4; +} + +message ConnectionType { + string id = 1; + string title = 2; + string formal_name = 3; + bool is_discontinued = 4; + bool is_obsolete = 5; +} + +message CurrentType { + string id = 1; + string title = 2; + string description = 3; +} + +message Country { + string id = 1; + string title = 2; + string iso_code = 3; + string continent_code = 4; +} + +message DataProvider { + string id = 1; + string title = 2; + string website = 3; + string comments = 4; + DataProviderStatusType data_provider_status_type = 5; + // How is this data licensed + string license = 6; +} + +message DataProviderStatusType { + string id = 1; + string title = 2; + bool is_provider_enabled = 3; +} + +message Operator { + string id = 1; + string title = 2; + string website = 3; + string comments = 4; + // Is this operator a private individual vs a company + bool is_private_individual = 5; + string contact_email = 6; + string phone_primary = 7; + string phone_secondary = 8; + string fault_report_email = 9; +} + +message StatusType { + string id = 1; + string title = 2; + bool is_operational = 3; +} + +message SubmissionStatusType { + string id = 1; + string title = 2; + bool is_live = 3; +} + +message UsageType { + string id = 1; + string title = 2; + bool is_pay_at_location = 3; + bool is_membership_required = 4; + bool is_access_key_required = 5; +} + +message UserCommentType { + string id = 1; + string title = 2; +} + +message CheckinStatusType { + string id = 1; + string title = 2; + bool is_positive = 3; + bool is_automated = 4; +} diff --git a/evchargers/publicapi.json b/evchargers/publicapi.json new file mode 100644 index 0000000..ea779fc --- /dev/null +++ b/evchargers/publicapi.json @@ -0,0 +1,5 @@ +{ + "name": "evchargers", + "icon": "🔋", + "category": "travel" +} diff --git a/examples/evchargers/referenceData/curl/getReferenceData.sh b/examples/evchargers/referenceData/curl/getReferenceData.sh new file mode 100755 index 0000000..2e44970 --- /dev/null +++ b/examples/evchargers/referenceData/curl/getReferenceData.sh @@ -0,0 +1,4 @@ +curl "https://api.m3o.com/v1/evchargers/ReferenceData" \ +-H "Content-Type: application/json" \ +-H "Authorization: Bearer $MICRO_API_TOKEN" \ +-d '{}' \ No newline at end of file diff --git a/examples/evchargers/referenceData/go/getReferenceData.go b/examples/evchargers/referenceData/go/getReferenceData.go new file mode 100755 index 0000000..4f80f0f --- /dev/null +++ b/examples/evchargers/referenceData/go/getReferenceData.go @@ -0,0 +1,14 @@ +package example + +import ( + "fmt" + "github.com/micro/services/clients/go/evchargers" + "os" +) + +// Retrieve reference data as used by this API +func GetReferenceData() { + evchargersService := evchargers.NewEvchargersService(os.Getenv("MICRO_API_TOKEN")) + rsp, err := evchargersService.ReferenceData(&evchargers.ReferenceDataRequest{}) + fmt.Println(rsp, err) +} diff --git a/examples/evchargers/referenceData/node/getReferenceData.js b/examples/evchargers/referenceData/node/getReferenceData.js new file mode 100755 index 0000000..0d1942a --- /dev/null +++ b/examples/evchargers/referenceData/node/getReferenceData.js @@ -0,0 +1,12 @@ +import * as evchargers from "m3o/evchargers"; + +// Retrieve reference data as used by this API +async function GetReferenceData() { + let evchargersService = new evchargers.EvchargersService( + process.env.MICRO_API_TOKEN + ); + let rsp = await evchargersService.referenceData({}); + console.log(rsp); +} + +await GetReferenceData(); diff --git a/examples/evchargers/search/curl/searchByBoundingBox.sh b/examples/evchargers/search/curl/searchByBoundingBox.sh new file mode 100755 index 0000000..932fd00 --- /dev/null +++ b/examples/evchargers/search/curl/searchByBoundingBox.sh @@ -0,0 +1,16 @@ +curl "https://api.m3o.com/v1/evchargers/Search" \ +-H "Content-Type: application/json" \ +-H "Authorization: Bearer $MICRO_API_TOKEN" \ +-d '{ + "box": { + "bottom_left": { + "latitude": 51.52627543859447, + "longitude": -0.03635349400295168 + }, + "top_right": { + "latitude": 51.56717121807993, + "longitude": -0.002293530559768285 + } + }, + "max_results": 2 +}' \ No newline at end of file diff --git a/examples/evchargers/search/curl/searchByLocation.sh b/examples/evchargers/search/curl/searchByLocation.sh new file mode 100755 index 0000000..58b8186 --- /dev/null +++ b/examples/evchargers/search/curl/searchByLocation.sh @@ -0,0 +1,11 @@ +curl "https://api.m3o.com/v1/evchargers/Search" \ +-H "Content-Type: application/json" \ +-H "Authorization: Bearer $MICRO_API_TOKEN" \ +-d '{ + "distance": 2000, + "location": { + "latitude": 51.53336351319885, + "longitude": -0.0252 + }, + "max_results": 2 +}' \ No newline at end of file diff --git a/examples/evchargers/search/curl/searchWithFiltersFastChargersOnly.sh b/examples/evchargers/search/curl/searchWithFiltersFastChargersOnly.sh new file mode 100755 index 0000000..604c701 --- /dev/null +++ b/examples/evchargers/search/curl/searchWithFiltersFastChargersOnly.sh @@ -0,0 +1,14 @@ +curl "https://api.m3o.com/v1/evchargers/Search" \ +-H "Content-Type: application/json" \ +-H "Authorization: Bearer $MICRO_API_TOKEN" \ +-d '{ + "distance": 2000, + "levels": [ + "3" + ], + "location": { + "latitude": 51.53336351319885, + "longitude": -0.0252 + }, + "max_results": 2 +}' \ No newline at end of file diff --git a/examples/evchargers/search/go/searchByBoundingBox.go b/examples/evchargers/search/go/searchByBoundingBox.go new file mode 100755 index 0000000..fcb28b8 --- /dev/null +++ b/examples/evchargers/search/go/searchByBoundingBox.go @@ -0,0 +1,16 @@ +package example + +import ( + "fmt" + "github.com/micro/services/clients/go/evchargers" + "os" +) + +// Search by giving a coordinate and a max distance, or bounding box and optional filters +func SearchByBoundingBox() { + evchargersService := evchargers.NewEvchargersService(os.Getenv("MICRO_API_TOKEN")) + rsp, err := evchargersService.Search(&evchargers.SearchRequest{ + Box: &evchargers.BoundingBox{}, + }) + fmt.Println(rsp, err) +} diff --git a/examples/evchargers/search/go/searchByLocation.go b/examples/evchargers/search/go/searchByLocation.go new file mode 100755 index 0000000..73b0f72 --- /dev/null +++ b/examples/evchargers/search/go/searchByLocation.go @@ -0,0 +1,20 @@ +package example + +import ( + "fmt" + "github.com/micro/services/clients/go/evchargers" + "os" +) + +// Search by giving a coordinate and a max distance, or bounding box and optional filters +func SearchByLocation() { + evchargersService := evchargers.NewEvchargersService(os.Getenv("MICRO_API_TOKEN")) + rsp, err := evchargersService.Search(&evchargers.SearchRequest{ + Distance: 2000, + Location: &evchargers.Coordinates{ + Latitude: 51.53336351319885, + Longitude: -0.0252, + }, + }) + fmt.Println(rsp, err) +} diff --git a/examples/evchargers/search/go/searchWithFiltersFastChargersOnly.go b/examples/evchargers/search/go/searchWithFiltersFastChargersOnly.go new file mode 100755 index 0000000..e35574a --- /dev/null +++ b/examples/evchargers/search/go/searchWithFiltersFastChargersOnly.go @@ -0,0 +1,21 @@ +package example + +import ( + "fmt" + "github.com/micro/services/clients/go/evchargers" + "os" +) + +// Search by giving a coordinate and a max distance, or bounding box and optional filters +func SearchWithFiltersFastChargersOnly() { + evchargersService := evchargers.NewEvchargersService(os.Getenv("MICRO_API_TOKEN")) + rsp, err := evchargersService.Search(&evchargers.SearchRequest{ + Distance: 2000, + Levels: []string{"3"}, + Location: &evchargers.Coordinates{ + Latitude: 51.53336351319885, + Longitude: -0.0252, + }, + }) + fmt.Println(rsp, err) +} diff --git a/examples/evchargers/search/node/searchByBoundingBox.js b/examples/evchargers/search/node/searchByBoundingBox.js new file mode 100755 index 0000000..42c9e6b --- /dev/null +++ b/examples/evchargers/search/node/searchByBoundingBox.js @@ -0,0 +1,24 @@ +import * as evchargers from "m3o/evchargers"; + +// Search by giving a coordinate and a max distance, or bounding box and optional filters +async function SearchByBoundingBox() { + let evchargersService = new evchargers.EvchargersService( + process.env.MICRO_API_TOKEN + ); + let rsp = await evchargersService.search({ + box: { + bottom_left: { + latitude: 51.52627543859447, + longitude: -0.03635349400295168, + }, + top_right: { + latitude: 51.56717121807993, + longitude: -0.002293530559768285, + }, + }, + max_results: 2, + }); + console.log(rsp); +} + +await SearchByBoundingBox(); diff --git a/examples/evchargers/search/node/searchByLocation.js b/examples/evchargers/search/node/searchByLocation.js new file mode 100755 index 0000000..976a8a6 --- /dev/null +++ b/examples/evchargers/search/node/searchByLocation.js @@ -0,0 +1,19 @@ +import * as evchargers from "m3o/evchargers"; + +// Search by giving a coordinate and a max distance, or bounding box and optional filters +async function SearchByLocation() { + let evchargersService = new evchargers.EvchargersService( + process.env.MICRO_API_TOKEN + ); + let rsp = await evchargersService.search({ + distance: 2000, + location: { + latitude: 51.53336351319885, + longitude: -0.0252, + }, + max_results: 2, + }); + console.log(rsp); +} + +await SearchByLocation(); diff --git a/examples/evchargers/search/node/searchWithFiltersFastChargersOnly.js b/examples/evchargers/search/node/searchWithFiltersFastChargersOnly.js new file mode 100755 index 0000000..6d87c69 --- /dev/null +++ b/examples/evchargers/search/node/searchWithFiltersFastChargersOnly.js @@ -0,0 +1,20 @@ +import * as evchargers from "m3o/evchargers"; + +// Search by giving a coordinate and a max distance, or bounding box and optional filters +async function SearchWithFiltersFastChargersOnly() { + let evchargersService = new evchargers.EvchargersService( + process.env.MICRO_API_TOKEN + ); + let rsp = await evchargersService.search({ + distance: 2000, + levels: ["3"], + location: { + latitude: 51.53336351319885, + longitude: -0.0252, + }, + max_results: 2, + }); + console.log(rsp); +} + +await SearchWithFiltersFastChargersOnly(); diff --git a/go.mod b/go.mod index bcf1753..4908eb5 100644 --- a/go.mod +++ b/go.mod @@ -39,6 +39,7 @@ require ( github.com/patrickmn/go-cache v2.1.0+incompatible github.com/paulmach/go.geo v0.0.0-20180829195134-22b514266d33 github.com/pquerna/otp v1.3.0 + github.com/robfig/cron/v3 v3.0.1 github.com/sendgrid/rest v2.6.4+incompatible // indirect github.com/sendgrid/sendgrid-go v3.10.0+incompatible github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e @@ -48,6 +49,7 @@ require ( github.com/tkuchiki/go-timezone v0.2.2 github.com/ttacon/builder v0.0.0-20170518171403-c099f663e1c2 // indirect github.com/ttacon/libphonenumber v1.2.1 // indirect + go.mongodb.org/mongo-driver v1.7.2 go.opencensus.io v0.22.4 // indirect golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 golang.org/x/net v0.0.0-20210226172049-e18ecbb05110 diff --git a/go.sum b/go.sum index 1967164..6fc94e4 100644 --- a/go.sum +++ b/go.sum @@ -26,6 +26,7 @@ github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6L github.com/Azure/go-autorest/tracing v0.1.0/go.mod h1:ROEEAFwXycQw7Sn3DXNtEedEvdeRAgDr0izn4z5Ij88= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/HdrHistogram/hdrhistogram-go v1.1.0 h1:6dpdDPTRoo78HxAJ6T1HfMiKSnqhgRRqzCuPshRkQ7I= github.com/HdrHistogram/hdrhistogram-go v1.1.0/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= @@ -56,6 +57,7 @@ github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+Ce github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bitly/go-simplejson v0.5.0 h1:6IH+V8/tVMab511d5bn4M7EwGXZf9Hj6i2xSwkNEM+Y= github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= +github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY= github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc h1:biVzkmvwrH8WK8raXaxBx6fRVTlJILwEwQGL1I/ByEI= github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= @@ -74,6 +76,7 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5P github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/cloudflare/cloudflare-go v0.10.2/go.mod h1:qhVI5MKwBGhdNU89ZRz2plgYutcJ5PCekLxXn56w6SY= github.com/cloudflare/cloudflare-go v0.10.9/go.mod h1:5TrsWH+3f4NV6WjtS5QFp+DifH81rph40gU374Sh0dQ= +github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I= github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= @@ -90,6 +93,7 @@ github.com/crufter/nested v0.0.0-20210903145606-dea42c476b37/go.mod h1:YNI79Hwfl github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/denisenkom/go-mssqldb v0.9.0 h1:RSohk2RsiZqLZ0zCjtfn3S4Gp4exhpBWHyQ7D0yGjAk= github.com/denisenkom/go-mssqldb v0.9.0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= @@ -121,6 +125,7 @@ github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/getkin/kin-openapi v0.26.0 h1:xKIW5Z5wAfutxGBH+rr9qu0Ywfb/E1bPWkYLKRYfEuU= github.com/getkin/kin-openapi v0.26.0/go.mod h1:WGRs2ZMM1Q8LR1QBEwUxC6RJEfaBcD0s+pcEVXFuAjw= @@ -136,8 +141,35 @@ github.com/go-ini/ini v1.44.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3I github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= +github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= +github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg= +github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= +github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= +github.com/gobuffalo/flect v0.1.0/go.mod h1:d2ehjJqGOH/Kjqcoz+F7jHTBbmDb38yXA598Hb50EGs= +github.com/gobuffalo/flect v0.1.1/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= +github.com/gobuffalo/flect v0.1.3/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= +github.com/gobuffalo/genny v0.0.0-20190329151137-27723ad26ef9/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk= +github.com/gobuffalo/genny v0.0.0-20190403191548-3ca520ef0d9e/go.mod h1:80lIj3kVJWwOrXWWMRzzdhW3DsrdjILVil/SFKBzF28= +github.com/gobuffalo/genny v0.1.0/go.mod h1:XidbUqzak3lHdS//TPu2OgiFB+51Ur5f7CSnXZ/JDvo= +github.com/gobuffalo/genny v0.1.1/go.mod h1:5TExbEyY48pfunL4QSXxlDOmdsD44RRq4mVZ0Ex28Xk= +github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E9DmhejeLeNt7UVvlSGv3ziL+djtTr3yyzcOw= +github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360= +github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg= +github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE= +github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8= +github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= +github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= +github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= +github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= +github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ= +github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0= +github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= +github.com/gofrs/uuid v3.2.0+incompatible h1:y12jRkkFxsd7GpqdSZ+/KCs/fJbqpEXSGd4+jfEaewE= github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= @@ -146,10 +178,13 @@ github.com/gojuno/go.osrm v0.1.1-0.20200217151037-435fc3e1d3d4 h1:ZhyiVDRMAdbMPF github.com/gojuno/go.osrm v0.1.1-0.20200217151037-435fc3e1d3d4/go.mod h1:XPCHB/Ir2/vHnqhKlfUxIiUGHFtTzgrRxD89JdkJhrs= github.com/golang-jwt/jwt v0.0.0-20210529014511-0f726ea0e725 h1:fMKUGzqjXWLpddTodG8KO9moexa9bZMFQSkJRDefXpI= github.com/golang-jwt/jwt v0.0.0-20210529014511-0f726ea0e725/go.mod h1:aHjnehRD4y8BHKf+z8wAPIRTd/3cm+FrvC6kQIDhV3o= +github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= @@ -169,6 +204,8 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS github.com/golang/protobuf v1.5.1 h1:jAbXjIeW2ZSW2AwFxlGTDoc2CjI2XujLkV3ArsZFCvc= github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -176,7 +213,9 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= @@ -223,6 +262,7 @@ github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpO github.com/iij/doapi v0.0.0-20190504054126-0bbf12d6d7df/go.mod h1:QMZY7/J/KSQEhKWFeDesPjMj+wCHReeknARU3wqlyN4= github.com/improbable-eng/grpc-web v0.13.0 h1:7XqtaBWaOCH0cVGKHyvhtcuo6fgW32Y10yRKrDHFHOc= github.com/improbable-eng/grpc-web v0.13.0/go.mod h1:6hRR09jOEG81ADP5wCQju1z71g6OL4eEvELdran/3cs= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/jackc/chunkreader v1.0.0 h1:4s39bBR8ByfqH+DKm8rQA3E1LHZWB9XWcrz8fqaZbe0= github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= @@ -238,6 +278,7 @@ github.com/jackc/pgconn v1.8.0 h1:FmjZ0rOyXTr1wfWs45i4a9vjnjWUAGpMuQLD9OSs+lw= github.com/jackc/pgconn v1.8.0/go.mod h1:1C2Pb36bGIP9QHGBYCjnyhqu7Rv3sGshaQUvmfGIB/o= github.com/jackc/pgio v1.0.0 h1:g12B9UwVnzGhueNavwioyEEpAmqMe1E/BN9ES+8ovkE= github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8= +github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2 h1:JVX6jT/XfzNqIjye4717ITLaNwV9mWbJx0dLCpcRzdA= github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE= github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= @@ -281,6 +322,7 @@ github.com/jinzhu/now v1.1.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/ github.com/jinzhu/now v1.1.2 h1:eVKgfIdy9b6zbWBMgFpfDPoAMifwSZagU9HmEU6zgiI= github.com/jinzhu/now v1.1.2/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -288,6 +330,8 @@ github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1 github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= +github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= github.com/kevinburke/go-types v0.0.0-20201208005256-aee49f568a20 h1:Tux1t20gPWp4zkjCCdv2rLAwp+T3jCEROsEuvXp50FI= github.com/kevinburke/go-types v0.0.0-20201208005256-aee49f568a20/go.mod h1:/Pk5i/SqYdYv1cie5wGwoZ4P6TpgMi+Yf58mtJSHdOw= github.com/kevinburke/go.uuid v1.2.0 h1:+1qP8NdkJfgOSTrrrUuA7h0djr1VY77HFXYjR+zUcUo= @@ -297,6 +341,8 @@ github.com/kevinburke/rest v0.0.0-20210506044642-5611499aa33c/go.mod h1:pD+iEcdA github.com/kevinburke/twilio-go v0.0.0-20210327194925-1623146bcf73 h1:PSsFm2SRpq9LnaRHLz4u9ZZ3liWjgXM6OMxXE4/qlgY= github.com/kevinburke/twilio-go v0.0.0-20210327194925-1623146bcf73/go.mod h1:Fm9alkN1/LPVY1eqD/psyMwPWE4VWl4P01/nTYZKzBk= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.9.5 h1:U+CaK85mrNNb4k8BNOfgJtJ/gr6kswUCFj6miSzVC6M= +github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4= github.com/kolo/xmlrpc v0.0.0-20190717152603-07c4ee3fd181/go.mod h1:o03bZfuBwAXHetKXuInt4S7omeXUu62/A845kiycsSQ= @@ -304,10 +350,12 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxv github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/labbsr0x/bindman-dns-webhook v1.0.2/go.mod h1:p6b+VCXIR8NYKpDr8/dg1HKfQoRHCdcsROXKvmoehKA= github.com/labbsr0x/goh v1.0.1/go.mod h1:8K2UhVoaWXcCU7Lxoa2omWnC8gyW8px7/lmO61c027w= @@ -315,6 +363,7 @@ github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.3.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.9.0 h1:L8nSXQQzAYByakOFMTwpjRoHsMJklur4Gi59b6VivR8= github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/linode/linodego v0.10.0/go.mod h1:cziNP7pbvE3mXIPneHj0oRY8L1WtGEIKlZ8LANE4eXA= github.com/liquidweb/liquidweb-go v1.6.0/go.mod h1:UDcVnAMDkZxpw4Y7NOHkqoeiGacVLEIG/i5J9cyixzQ= @@ -323,6 +372,8 @@ github.com/m3o/goduckgo v0.0.0-20210630141545-c760fe67b945/go.mod h1:wQOw7PY6509 github.com/m3o/m3o-go v0.0.0-20210915113633-a4f018a78d79 h1:WJ7AfarocyVqqvXLzjA11U4PEmZ6P2fqMtAXNhtmNU4= github.com/m3o/m3o-go/client v0.0.0-20210421144725-8bfd7992ada3 h1:RVt7rqWl4al36BH9OY9k7IXnnooOP0Feanu1bed6X2s= github.com/m3o/m3o-go/client v0.0.0-20210421144725-8bfd7992ada3/go.mod h1:vmeaYrKYpgVNhny/l7iH8mXS88S7ijUiYni3gZUrCq0= +github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= +github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= github.com/mattheath/base62 v0.0.0-20150408093626-b80cdc656a7a h1:rnrxZue85aKdMU4nJ50GgKA31lCaVbft+7Xl8OXj55U= github.com/mattheath/base62 v0.0.0-20150408093626-b80cdc656a7a/go.mod h1:hJJYoBMTZIONmUEpX3+9v2057zuRM0n3n77U4Ob4wE4= github.com/mattheath/kala v0.0.0-20171219141654-d6276794bf0e h1:cj+w63ez19o7y7vunA8Q3rUIWwKEOUx7foqjnr4qbtI= @@ -342,6 +393,7 @@ github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzp github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-sqlite3 v1.14.5 h1:1IdxlwTNazvbKJQSxoJ5/9ECbEeaTTyeU7sEAZ5KKTQ= github.com/mattn/go-sqlite3 v1.14.5/go.mod h1:WVKg1VTActs4Qso6iwGbiFih2UIHo0ENGwNd0Lj+XmI= github.com/mattn/go-tty v0.0.0-20180219170247-931426f7535a/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= @@ -358,9 +410,12 @@ github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223 h1:F9x/1yl3T2AeKLr2AMdilSD8+f9bvMnNN8VS5iDtovc= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/namedotcom/go v0.0.0-20180403034216-08470befbe04/go.mod h1:5sN+Lt1CaY4wsPvgQH/jsuJi4XO2ssZbdsIizr4CVC8= github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uYLpLIr5fm8diHn0JbqRycJi6w0Ms= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nightlyone/lockfile v1.0.0 h1:RHep2cFKK4PonZJDdEl4GmkabuhbsRMgk/k3uAmxBiA= github.com/nightlyone/lockfile v1.0.0/go.mod h1:rywoIealpdNse2r832aiD9jRk8ErCatROs6LzC841CI= @@ -368,6 +423,7 @@ github.com/nrdcg/auroradns v1.0.0/go.mod h1:6JPXKzIRzZzMqtTDgueIhTi6rFf1QvYE/Hzq github.com/nrdcg/dnspod-go v0.4.0/go.mod h1:vZSoFSFeQVm2gWLMkyX61LZ8HI3BaqtHZWgPTGKr6KQ= github.com/nrdcg/goinwx v0.6.1/go.mod h1:XPiut7enlbEdntAqalBIqcYcTEVhpv/dKWgDCX2SwKQ= github.com/nrdcg/namesilo v0.2.1/go.mod h1:lwMvfQTyYq+BbjJd30ylEG4GPSS6PII0Tia4rRpRiyw= +github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.3/go.mod h1:YZeBtGzYYEsCHp2LST/u/0NDwGkRoBtmn1cIWCJiS6M= @@ -375,10 +431,12 @@ github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FW github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.15.0 h1:1V1NfVQR87RtWAgp1lv9JZJ5Jap+XFGKPi00andXGi4= github.com/onsi/ginkgo v1.15.0/go.mod h1:hF8qUzuuC8DJGygJH3726JnCZX4MYbRB8yFfISqnKUg= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.10.5 h1:7n6FEkpFmfCoo2t+YYqXH0evK+a9ICQz0xcAy9dYcaQ= github.com/onsi/gomega v1.10.5/go.mod h1:gza4q3jKQJijlu05nKWRCW/GavJumGt8aNRxWg7mt48= github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= @@ -397,6 +455,7 @@ github.com/paulmach/go.geo v0.0.0-20180829195134-22b514266d33 h1:doG/0aLlWE6E4nd github.com/paulmach/go.geo v0.0.0-20180829195134-22b514266d33/go.mod h1:btFYk/ltlMU7ZKguHS7zQrwHYCtLoXGTaa44OsPbEVw= github.com/paulmach/go.geojson v1.4.0 h1:5x5moCkCtDo5x8af62P9IOAYGQcYHtxz2QJ3x1DoCgY= github.com/paulmach/go.geojson v1.4.0/go.mod h1:YaKx1hKpWF+T2oj2lFJPsW/t1Q5e1jQI61eoQSTwpIs= +github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -423,7 +482,12 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= github.com/rainycape/memcache v0.0.0-20150622160815-1031fa0ce2f2/go.mod h1:7tZKcyumwBO6qip7RNQ5r77yrssm9bfCowcLEBcU5IA= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/robfig/cron v1.2.0 h1:ZjScXvvxeQ63Dbyxy76Fj3AT3Ut0aKsyd2/tl3DTMuQ= +github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= +github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= @@ -439,12 +503,15 @@ github.com/sendgrid/rest v2.6.4+incompatible/go.mod h1:kXX7q3jZtJXK5c5qK83bSGMdV github.com/sendgrid/sendgrid-go v3.10.0+incompatible h1:aSYyurHxEZSDy7kxhvZ4fH0inNkEEmRssZNbAmETR2c= github.com/sendgrid/sendgrid-go v3.10.0+incompatible/go.mod h1:QRQt+LX/NmgVEvmdRw0VT/QgUn499+iza2FnDca9fg8= github.com/serenize/snaker v0.0.0-20171204205717-a683aaf2d516/go.mod h1:Yow6lPLSAXx2ifx470yD/nUe22Dv5vBvxK/UK9UUTVs= +github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= +github.com/shopspring/decimal v0.0.0-20200227202807-02e2044944cc h1:jUIKcSPO9MoMJBbEoyE/RJoE8vz7Mb8AjvifMMwSyvY= github.com/shopspring/decimal v0.0.0-20200227202807-02e2044944cc/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0= @@ -452,6 +519,8 @@ github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDq github.com/skratchdot/open-golang v0.0.0-20160302144031-75fb7ed4208c/go.mod h1:sUM3LWHvSMaG192sy56D9F7CNvL7jUJVXoqM1QKLnog= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/stoewer/go-strcase v1.2.0 h1:Z2iHWqGXH00XYgqDmNgQbIBxf3wrNq0F3feEy0ainaU= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -467,6 +536,8 @@ github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5Cc github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/teris-io/shortid v0.0.0-20171029131806-771a37caa5cf h1:Z2X3Os7oRzpdJ75iPqWZc0HeJWFYNCvKsfpQwFpRNTA= github.com/teris-io/shortid v0.0.0-20171029131806-771a37caa5cf/go.mod h1:M8agBzgqHIhgj7wEn9/0hJUZcrvt9VY+Ln+S1I5Mha0= +github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= +github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/timewasted/linode v0.0.0-20160829202747-37e84520dcf7/go.mod h1:imsgLplxEC/etjIhdr3dNzV3JeT27LbVu5pYWm0JCBY= github.com/tkuchiki/go-timezone v0.2.2 h1:MdHR65KwgVTwWFQrota4SKzc4L5EfuH5SdZZGtk/P2Q= github.com/tkuchiki/go-timezone v0.2.2/go.mod h1:oFweWxYl35C/s7HMVZXiA19Jr9Y0qJHMaG/J2TES4LY= @@ -487,14 +558,24 @@ github.com/urfave/cli/v2 v2.3.0 h1:qph92Y649prgesehzOrQjdWyxFOp/QVM+6imKHad91M= github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= github.com/vultr/govultr v0.1.4/go.mod h1:9H008Uxr/C4vFNGLqKx232C206GL0PBHzOP0809bGNA= github.com/xanzy/go-gitlab v0.35.1/go.mod h1:sPLojNBn68fMUWSxIJtdVVIP8uSBYqesTfDUseX11Ug= +github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= +github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= +github.com/xdg-go/scram v1.0.2 h1:akYIkZ28e6A96dkWNJQu3nmCzH3YfwMPQExUYDaRv7w= +github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= +github.com/xdg-go/stringprep v1.0.2 h1:6iq84/ryjjeRmMJwxutI51F2GIPlP5BfTvXHeYjyhBc= +github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v1.1.0/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= +github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA= +github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= go.etcd.io/bbolt v1.3.5 h1:XAzx9gjCb0Rxj7EoqcClPD1d5ZBxZJk0jbuoPHenBt0= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= +go.mongodb.org/mongo-driver v1.7.2 h1:pFttQyIiJUHEn50YfZgC9ECjITMT44oiN36uArf/OFg= +go.mongodb.org/mongo-driver v1.7.2/go.mod h1:Q4oFMbo1+MSNqICAdYMlC/zSTrwCogR4R8NzkI+yfU8= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= @@ -519,6 +600,7 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= golang.org/x/crypto v0.0.0-20190418165655-df01cb2cc480/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= +golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -538,6 +620,7 @@ golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587 h1:5Uz0rkjCFu9BC9gCRN7EkwVvhNyQgGWb8KNJrPwBoHY= golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= @@ -550,12 +633,14 @@ golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f h1:J5lckAjkw6qYlOZNj90mLYNTEKDvWeuc1yieZ8qUzUE= golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180611182652-db08ff08e862/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -597,6 +682,7 @@ golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -614,9 +700,11 @@ golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -644,6 +732,8 @@ golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190921001708-c4c64cad1fd0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -658,10 +748,14 @@ golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= @@ -675,6 +769,7 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e h1:4nW4NLDYnU28ojHaHO8OVxFHk/aQ33U01a9cjED+pzE= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -684,7 +779,9 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.8.2 h1:CCXrcPKiGGotvnN6jfUsKk4rRqm7q09/YbKb5xCEvtM= gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0 h1:OE9mWmgKkjJyEmDAAtGMPjXu+YNeGvK9VTSHY6+Qihc= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= @@ -732,6 +829,7 @@ gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLks gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= @@ -752,6 +850,7 @@ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= @@ -759,10 +858,13 @@ gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclp gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gorm.io/datatypes v1.0.1 h1:6npnXbBtjpSb7FFVA2dG/llyTN8tvZfbUqs+WyLrYgQ= gorm.io/datatypes v1.0.1/go.mod h1:HEHoUU3/PO5ZXfAJcVWl11+zWlE16+O0X2DgJEb4Ixs= +gorm.io/driver/mysql v1.0.5 h1:WAAmvLK2rG0tCOqrf5XcLi2QUwugd4rcVJ/W3aoon9o= gorm.io/driver/mysql v1.0.5/go.mod h1:N1OIhHAIhx5SunkMGqWbGFVeh4yTNWKmMo1GOAsohLI= gorm.io/driver/postgres v1.0.8 h1:PAgM+PaHOSAeroTjHkCHCBIHHoBIf9RgPWGo8dF2DA8= gorm.io/driver/postgres v1.0.8/go.mod h1:4eOzrI1MUfm6ObJU/UcmbXyiHSs8jSwH95G5P5dxcAg= +gorm.io/driver/sqlite v1.1.4 h1:PDzwYE+sI6De2+mxAneV9Xs11+ZyKV6oxD3wDGkaNvM= gorm.io/driver/sqlite v1.1.4/go.mod h1:mJCeTFr7+crvS+TRnWc5Z3UvwxUN1BGBLMrf5LA9DYw= +gorm.io/driver/sqlserver v1.0.7 h1:uwUtb0kdFwW5PkRbd2KJ2h4wlsqvLSjox1XVg/RnzRE= gorm.io/driver/sqlserver v1.0.7/go.mod h1:ng66aHI47ZIKz/vvnxzDoonzmTS8HXP+JYlgg67wOog= gorm.io/gorm v1.20.7/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw= gorm.io/gorm v1.20.12/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw=