Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions .golangci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# yaml-language-server: $schema=https://golangci-lint.run/jsonschema/golangci.jsonschema.json
version: "2"

issues:
exclude-dirs:
- proto/gen

formatters:
enable:
- gci
- gofumpt
- goimports
- golines
settings:
golines:
max-len: 120
77 changes: 42 additions & 35 deletions cli/command.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,11 @@ import (

"github.com/spf13/cobra"
rfms "github.com/way-platform/rfms-go"
rfmsv5 "github.com/way-platform/rfms-go/proto/gen/go/wayplatform/connect/rfms/v5"
"golang.org/x/oauth2"
"golang.org/x/term"
"google.golang.org/protobuf/encoding/protojson"
"google.golang.org/protobuf/types/known/timestamppb"
)

// NewCommand builds the full CLI command tree for the rFMS SDK.
Expand Down Expand Up @@ -225,20 +227,21 @@ func newVehiclesCommand(cfg *config) *cobra.Command {
if err != nil {
return err
}
moreDataAvailable, lastVIN, count := true, "", 0
for moreDataAvailable && count < *limit {
response, err := client.Vehicles(cmd.Context(), rfms.VehiclesRequest{
LastVIN: lastVIN,
})
request := rfmsv5.VehiclesRequest_builder{}.Build()
count := 0
for count < *limit {
response, err := client.Vehicles(cmd.Context(), request)
if err != nil {
return err
}
for _, vehicle := range response.Vehicles {
for _, vehicle := range response.GetVehicles() {
fmt.Println(protojson.Format(vehicle))
}
count += len(response.Vehicles)
moreDataAvailable = response.MoreDataAvailable
lastVIN = response.Vehicles[len(response.Vehicles)-1].GetVin()
count += len(response.GetVehicles())
if !response.GetMoreDataAvailable() || len(response.GetVehicles()) == 0 {
break
}
request.SetLastVin(response.GetVehicles()[len(response.GetVehicles())-1].GetVin())
}
return nil
}
Expand All @@ -265,27 +268,29 @@ func newVehiclePositionsCommand(cfg *config) *cobra.Command {
if len(args) > 0 {
vin = args[0]
}
moreDataAvailable, lastVIN := true, ""
for moreDataAvailable {
request := rfms.VehiclePositionsRequest{
LastVIN: lastVIN,
VIN: vin,
LatestOnly: startTime.IsZero() && stopTime.IsZero(),
StartTime: *startTime,
StopTime: *stopTime,
}
b := rfmsv5.VehiclePositionsRequest_builder{
Vin: new(vin),
LatestOnly: new(startTime.IsZero() && stopTime.IsZero()),
}
if !startTime.IsZero() {
b.StartTime = timestamppb.New(*startTime)
}
if !stopTime.IsZero() {
b.StopTime = timestamppb.New(*stopTime)
}
request := b.Build()
for {
response, err := client.VehiclePositions(cmd.Context(), request)
if err != nil {
return err
}
for _, vehiclePosition := range response.VehiclePositions {
for _, vehiclePosition := range response.GetVehiclePositions() {
fmt.Println(protojson.Format(vehiclePosition))
}
moreDataAvailable = response.MoreDataAvailable
if !moreDataAvailable {
if !response.GetMoreDataAvailable() || len(response.GetVehiclePositions()) == 0 {
break
}
lastVIN = response.VehiclePositions[len(response.VehiclePositions)-1].GetVin()
request.SetLastVin(response.GetVehiclePositions()[len(response.GetVehiclePositions())-1].GetVin())
}
return nil
}
Expand All @@ -312,27 +317,29 @@ func newVehicleStatusesCommand(cfg *config) *cobra.Command {
if len(args) > 0 {
vin = args[0]
}
moreDataAvailable, lastVIN := true, ""
for moreDataAvailable {
request := rfms.VehicleStatusesRequest{
LastVIN: lastVIN,
VIN: vin,
LatestOnly: startTime.IsZero() && stopTime.IsZero(),
StartTime: *startTime,
StopTime: *stopTime,
}
b := rfmsv5.VehicleStatusesRequest_builder{
Vin: new(vin),
LatestOnly: new(startTime.IsZero() && stopTime.IsZero()),
}
if !startTime.IsZero() {
b.StartTime = timestamppb.New(*startTime)
}
if !stopTime.IsZero() {
b.StopTime = timestamppb.New(*stopTime)
}
request := b.Build()
for {
response, err := client.VehicleStatuses(cmd.Context(), request)
if err != nil {
return err
}
for _, vehicleStatus := range response.VehicleStatuses {
for _, vehicleStatus := range response.GetVehicleStatuses() {
fmt.Println(protojson.Format(vehicleStatus))
}
moreDataAvailable = response.MoreDataAvailable
if !moreDataAvailable {
if !response.GetMoreDataAvailable() || len(response.GetVehicleStatuses()) == 0 {
break
}
lastVIN = response.VehicleStatuses[len(response.VehicleStatuses)-1].GetVin()
request.SetLastVin(response.GetVehicleStatuses()[len(response.GetVehicleStatuses())-1].GetVin())
}
return nil
}
Expand Down
5 changes: 2 additions & 3 deletions cli/go.mod
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
module github.com/way-platform/rfms-go/cli

go 1.25.0

toolchain go1.26.0
go 1.26.0

require (
github.com/spf13/cobra v1.10.2
Expand All @@ -13,6 +11,7 @@ require (
)

require (
connectrpc.com/connect v1.19.1 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/spf13/pflag v1.0.9 // indirect
golang.org/x/sys v0.42.0 // indirect
Expand Down
2 changes: 2 additions & 0 deletions cli/go.sum
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
connectrpc.com/connect v1.19.1 h1:R5M57z05+90EfEvCY1b7hBxDVOUl45PrtXtAV2fOC14=
connectrpc.com/connect v1.19.1/go.mod h1:tN20fjdGlewnSFeZxLKb0xwIZ6ozc3OQs2hTXy4du9w=
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
Expand Down
12 changes: 3 additions & 9 deletions client.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,12 @@ import (
"runtime/debug"
"time"

rfmsv5connect "github.com/way-platform/rfms-go/proto/gen/go/wayplatform/connect/rfms/v5/rfmsv5connect"
"golang.org/x/oauth2"
)

var _ rfmsv5connect.RfmsApiClient = (*Client)(nil)

// Client is an rFMS API client.
type Client struct {
config ClientConfig
Expand All @@ -36,15 +39,6 @@ func newClientConfig() ClientConfig {
}
}

// with returns a new ClientConfig with the given options applied.
// This enables per-request configuration overrides.
func (cc ClientConfig) with(opts ...ClientOption) ClientConfig {
for _, opt := range opts {
opt(&cc)
}
return cc
}

// ClientOption is an option that configures a [Client].
type ClientOption func(*ClientConfig)

Expand Down
35 changes: 16 additions & 19 deletions client_example_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ import (
"fmt"
"os"

"github.com/way-platform/rfms-go"
rfms "github.com/way-platform/rfms-go"
rfmsv5 "github.com/way-platform/rfms-go/proto/gen/go/wayplatform/connect/rfms/v5"
)

func ExampleClient_scania() {
Expand All @@ -15,21 +16,19 @@ func ExampleClient_scania() {
if err != nil {
panic(err)
}
lastVIN, moreDataAvailable := "", true
for moreDataAvailable {
response, err := client.Vehicles(context.Background(), rfms.VehiclesRequest{
LastVIN: lastVIN,
})
request := rfmsv5.VehiclesRequest_builder{}.Build()
for {
response, err := client.Vehicles(context.Background(), request)
if err != nil {
panic(err)
}
for _, vehicle := range response.Vehicles {
for _, vehicle := range response.GetVehicles() {
fmt.Println(vehicle.GetVin())
}
moreDataAvailable = response.MoreDataAvailable
if moreDataAvailable {
lastVIN = response.Vehicles[len(response.Vehicles)-1].GetVin()
if !response.GetMoreDataAvailable() || len(response.GetVehicles()) == 0 {
break
}
request.SetLastVin(response.GetVehicles()[len(response.GetVehicles())-1].GetVin())
}
}

Expand All @@ -43,20 +42,18 @@ func ExampleClient_volvoTrucks() {
if err != nil {
panic(err)
}
lastVIN, moreDataAvailable := "", true
for moreDataAvailable {
response, err := client.Vehicles(context.Background(), rfms.VehiclesRequest{
LastVIN: lastVIN,
})
request := rfmsv5.VehiclesRequest_builder{}.Build()
for {
response, err := client.Vehicles(context.Background(), request)
if err != nil {
panic(err)
}
for _, vehicle := range response.Vehicles {
for _, vehicle := range response.GetVehicles() {
fmt.Println(vehicle.GetVin())
}
moreDataAvailable = response.MoreDataAvailable
if moreDataAvailable {
lastVIN = response.Vehicles[len(response.Vehicles)-1].GetVin()
if !response.GetMoreDataAvailable() || len(response.GetVehicles()) == 0 {
break
}
request.SetLastVin(response.GetVehicles()[len(response.GetVehicles())-1].GetVin())
}
}
Loading
Loading