Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/fedragon/go-mobilityid
https://github.com/fedragon/go-mobilityid
electric-vehicles golang
Last synced: 1 day ago
JSON representation
- Host: GitHub
- URL: https://github.com/fedragon/go-mobilityid
- Owner: fedragon
- Created: 2021-06-02T18:33:41.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2022-09-27T19:31:23.000Z (about 2 years ago)
- Last Synced: 2023-06-28T18:02:57.810Z (over 1 year ago)
- Topics: electric-vehicles, golang
- Language: Go
- Homepage:
- Size: 26.4 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# go-mobilityid
Porting of the Scala [MobilityId](https://github.com/ShellRechargeSolutionsEU/mobilityid/) library to Go.
## Features
- Creates instances of DIN91826, ISO15118-1, or eMI3 contract IDs
- Creates instances of DIN91826 or ISO15118-1 EVSE IDs
- Computes (or validates, if provided) their check digit## Usage
```go
// Contract IDsemi3Id, err := emi3.NewContractIdNoCheckDigit("NL", "TNM", "00122045")
if err != nil {
// ...
}emi3Id, err = emi3.NewContractId("NL", "TNM", "00122045", 'K')
if err != nil {
// ...
}fmt.Println(emi3Id.CountryCode()) // "NL"
fmt.Println(emi3Id.PartyCode()) // "TNM"
fmt.Println(emi3Id.InstanceValue()) // "00122045"
fmt.Println(emi3Id.CheckDigit()) // 'K'fmt.Println(emi3Id.PartyId()) // "NL-TNM"
fmt.Println(emi3Id.CompactPartyId()) // "NLTNM"fmt.Println(emi3Id.String()) // "NL-TNM-C00122045-K"
fmt.Println(emi3Id.CompactString()) // "NLTNMC00122045K"
fmt.Println(emi3Id.CompactStringNoCheckDigit()) // "NLTNMC00122045"dinId, err := convert.Emi3ToDin(id)
if err != nil {
// ...
}fmt.Println(dinId.String()) // "NL-TNM-012204-5"
// EVSE IDs
isoId, err := iso.NewEvseId("NL", "TNM", "030123456*0")
if err != nil {
// ...
}fmt.Println(isoId.CountryCode()) // "NL"
fmt.Println(isoId.OperatorCode()) // "TNM"
fmt.Println(isoId.PowerOutletId()) // "030123456*0"fmt.Println(isoId.String()) // "NL*TNM*E030123456*0"
fmt.Println(isoId.CompactString()) // "NLTNME0301234560"
```## Differences with original library
### EMI3 instance value
Given the EMI3 contract ID `NL-TNM-C12345678-J`, getting the `instanceValue`:
- the Scala library will return (at the moment of writing, `v1.1.0`) `C12345678`
- this library's implementation, will return `12345678`This is because the leading `C` character is considered part of the format, rather than of the _instance value_.
### ContractId conversions
Direct conversions from `ISO` to `DIN` and vice versa, which are deprecated in the original library, have not been
ported.## Caveats
Types are public so that they can be referenced by clients, which means that it _is_ technically possible to initialize
them directly (e.g. `contractid.Emi3ContractId{}`); this will, however, create an empty instance which cannot be modified in any
way because it only provides functions exported by the `contractId.Reader` interface, so it's effectively of no use to a
client.