Add Mercedes (#12403)

This commit is contained in:
Rene Nulsch 2024-02-28 08:43:32 +01:00 • committed by GitHub
parent ab877571bb
commit 625b91c544
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
21 changed files with 19343 additions and 3 deletions

View file

@ -52,6 +52,8 @@ func runToken(cmd *cobra.Command, args []string) {
var err error
switch strings.ToLower(vehicleConf.Type) {
case "mercedes":
token, err = mercedesToken()
case "tronity":
token, err = tronityToken(conf, vehicleConf)
default:
@ -65,7 +67,7 @@ func runToken(cmd *cobra.Command, args []string) {
fmt.Println()
fmt.Println("Add the following tokens to the vehicle config:")
fmt.Println()
fmt.Println(" tokens:")
fmt.Println(" access:", token.AccessToken)
fmt.Println(" refresh:", token.RefreshToken)
fmt.Println(" tokens:")
fmt.Println(" access:", token.AccessToken)
fmt.Println(" refresh:", token.RefreshToken)
}

71
cmd/token_mercedes.go Normal file
View file

@ -0,0 +1,71 @@
package cmd
import (
"errors"
"strings"
"github.com/AlecAivazis/survey/v2"
"github.com/evcc-io/evcc/vehicle/mercedes"
"golang.org/x/oauth2"
)
func mercedesUsernameAndRegionPrompt() (string, string, error) {
prompt_user := &survey.Input{
Message: "Please enter your Mercedes ME user-account (e-mail or mobile)",
}
var user string
if err := survey.AskOne(prompt_user, &user, survey.WithValidator(survey.Required)); err != nil {
return "", "", err
}
prompt_region := &survey.Select{
Message: "Choose your MB region:",
Options: []string{"APAC", "EMEA", "NORAM"},
}
var region string
if err := survey.AskOne(prompt_region, &region, survey.WithValidator(survey.Required)); err != nil {
return "", "", err
}
return user, region, nil
}
func mercedesPinPrompt() (string, error) {
var code string
prompt_pin := &survey.Input{
Message: "Please enter the Pin that you received via email/sms",
}
if err := survey.AskOne(prompt_pin, &code, survey.WithValidator(survey.Required)); err != nil {
return "", err
}
return strings.TrimSpace(code), nil
}
func mercedesToken() (*oauth2.Token, error) {
// Get username and region from user to initate the email process
username, region, err := mercedesUsernameAndRegionPrompt()
if err != nil {
return nil, err
}
api := mercedes.NewSetupAPI(log, username, region)
result, nonce, err := api.RequestPin()
if err != nil {
return nil, err
}
if result {
pin, err := mercedesPinPrompt()
if err != nil {
return nil, err
}
token, err := api.RequestAccessToken(*nonce, pin)
if err == nil {
return token, nil
}
}
return nil, errors.New("unknown PinResponse - 200, Email empty")
}

View file

@ -0,0 +1,59 @@
template: mercedes
products:
- brand: Mercedes-Benz
requirements:
description:
de: |
Die Konfiguration der Mercedes-Benz Integration nur im yaml Modus möglich.
Ablauf:
1. Hinzufügen der Konfiguration in die evcc.yaml (ohne Token)
```
vehicles:
- name: my_car
type: mercedes
account: # Mercedes Me Nutzer-Id (email)
region: # MB me Region (EMEA, APAC, NORAM)
vin: W... # Erforderlich, wenn mehr als ein Fahrzeug im Account registriert
capacity: 50 # Akkukapazität in kWh (optional)
```
2. Ausführen von "./evcc token mercedes" zur Token Generierung
3. Einfügen der Tokens in die evcc.yaml
```
vehicles:
- name: my_car
type: mercedes
account: # Mercedes Me Nutzer-Id (email)
region: # MB me Region (EMEA, APAC, NORAM)
vin: W... # , wenn mehr als ein Fahrzeug im Account registriert
capacity: 50 # Akkukapazität in kWh (optional)
tokens:
access: token...
refresh: token...
```
en: |
The configuration of the Mercedes-Benz integration is only possible in yaml mode.
Procedure:
1. add the configuration to evcc.yaml (without token)
```
vehicles:
- name: my_car
type: mercedes
account: # Mercedes Me user-Id (email)
region: # MB me region (EMEA, APAC, NORAM)
vin: W... # Required, if more then one car is registered in this account
capacity: 50 # capacity in kWh (optional)
```
2. execute "./evcc token mercedes" for token generation
3. insert the tokens into evcc.yaml
```
vehicles:
- name: my_car
type: mercedes
account: # Mercedes Me user-id (email)
region: # MB me region (EMEA, APAC, NORAM)
vin: W... # Required, if more then one car is registered in this account
capacity: 50 # capacity in kWh (optional)
tokens:
access: token...
refresh: token...
```

61
vehicle/mercedes.go Normal file
View file

@ -0,0 +1,61 @@
package vehicle
import (
"time"
"github.com/evcc-io/evcc/api"
"github.com/evcc-io/evcc/util"
"github.com/evcc-io/evcc/vehicle/mercedes"
)
// Mercedes is an api.Vehicle implementation for Mercedes-Benz cars
type Mercedes struct {
*embed
*mercedes.Provider
}
func init() {
registry.Add("mercedes", NewMercedesFromConfig)
}
// NewMercedesFromConfig creates a new vehicle
func NewMercedesFromConfig(other map[string]interface{}) (api.Vehicle, error) {
cc := struct {
embed `mapstructure:",squash"`
Tokens Tokens
Account string
VIN string
Cache time.Duration
Region string
}{
Cache: interval,
}
if err := util.DecodeOther(other, &cc); err != nil {
return nil, err
}
token, err := cc.Tokens.Token()
if err != nil {
return nil, err
}
log := util.NewLogger("mercedes").Redact(cc.Tokens.Access, cc.Tokens.Refresh)
identity, err := mercedes.NewIdentity(log, token, cc.Account, cc.Region)
if err != nil {
return nil, err
}
v := &Mercedes{
embed: &cc.embed,
}
api := mercedes.NewAPI(log, identity)
cc.VIN, err = ensureVehicle(cc.VIN, api.Vehicles)
if err == nil {
v.Provider = mercedes.NewProvider(api, cc.VIN, cc.Cache)
}
return v, err
}

97
vehicle/mercedes/api.go Normal file
View file

@ -0,0 +1,97 @@
package mercedes
import (
"fmt"
"github.com/evcc-io/evcc/util"
"github.com/evcc-io/evcc/util/request"
"github.com/evcc-io/evcc/util/transport"
protos "github.com/evcc-io/evcc/vehicle/mercedes/pb"
"golang.org/x/oauth2"
"google.golang.org/protobuf/proto"
)
// API is an api.Vehicle implementation for Mercedes-Benz cars
type API struct {
region string
log *util.Logger
*request.Helper
}
func NewAPI(log *util.Logger, identity *Identity) *API {
client := request.NewHelper(log)
client.Transport = &transport.Decorator{
Base: &oauth2.Transport{
Source: identity,
Base: client.Transport,
},
Decorator: transport.DecorateHeaders(mbheaders(false, identity.region)),
}
return &API{
Helper: client,
region: identity.region,
log: log,
}
}
func (v *API) Vehicles() ([]string, error) {
var res VehiclesResponse
url := fmt.Sprintf("%s/v2/vehicles", getBffUri(v.region))
err := v.GetJSON(url, &res)
if err != nil {
return nil, err
}
var vehicles []string
for _, v := range res.AssignedVehicles {
vehicles = append(vehicles, v.Fin)
}
return vehicles, err
}
func (v *API) Status(vin string) (StatusResponse, error) {
var res StatusResponse
uri := fmt.Sprintf("%s/v1/vehicle/%s/vehicleattributes", getWidgetUri(v.region), vin)
data, err := v.GetBody(uri)
if err != nil {
return res, err
}
var message protos.VEPUpdate
if err = proto.Unmarshal(data, &message); err != nil {
return res, err
}
if val, ok := message.Attributes["odo"]; ok {
res.VehicleInfo.Odometer.Value = int(val.GetIntValue())
res.VehicleInfo.Odometer.Unit = val.GetDistanceUnit().String()
}
if val, ok := message.Attributes["soc"]; ok {
res.EvInfo.Battery.StateOfCharge = float64(val.GetIntValue())
}
if val, ok := message.Attributes["rangeelectric"]; ok {
res.EvInfo.Battery.DistanceToEmpty.Value = int(val.GetIntValue())
res.EvInfo.Battery.DistanceToEmpty.Unit = val.GetDistanceUnit().String()
}
if val, ok := message.Attributes["endofchargetime"]; ok {
res.EvInfo.Battery.EndOfChargeTime = int(val.GetIntValue())
}
if val, ok := message.Attributes["chargingstatus"]; ok {
res.EvInfo.Battery.ChargingStatus = int(val.GetIntValue())
} else {
res.EvInfo.Battery.ChargingStatus = 3
}
return res, err
}

119
vehicle/mercedes/helper.go Normal file
View file

@ -0,0 +1,119 @@
package mercedes
import (
"fmt"
"net/http"
"sync"
"github.com/google/uuid"
)
// Helper provides utility primitives
type Helper struct {
*http.Client
}
var (
mu sync.Mutex
identities = make(map[string]*Identity)
)
func getInstance(subject string) *Identity {
v := identities[subject]
return v
}
func addInstance(subject string, identity *Identity) {
identities[subject] = identity
}
const (
BffUriEMEA = "https://bff.emea-prod.mobilesdk.mercedes-benz.com"
WidgetUriEMEA = "https://widget.emea-prod.mobilesdk.mercedes-benz.com"
BffUriAPAC = "https://bff.amap-prod.mobilesdk.mercedes-benz.com"
WidgetUriAPAC = "https://widget.amap-prod.mobilesdk.mercedes-benz.com"
BffUriNORAM = "https://bff.amap-prod.mobilesdk.mercedes-benz.com"
WidgetUriNORAM = "https://widget.amap-prod.mobilesdk.mercedes-benz.com"
IdUri = "https://id.mercedes-benz.com"
ClientId = "01398c1c-dc45-4b42-882b-9f5ba9f175f1"
RisApplicationVersionEMEA = "1.40.0"
RisSdkVersionEMEA = "2.111.1"
RisApplicationVersionAPAC = "1.40.0"
RisSdkVersionAPAC = "2.111.1"
RisApplicationVersionNORAM = "3.40.0"
RisSdkVersionNORAM = "2.111.1"
RisOsVersion = "17.3"
RisOsName = "ios"
XApplicationNameEMEA = "mycar-store-ece"
XApplicationNameAPAC = "mycar-store-ap"
XApplicationNameNORAM = "mycar-store-us"
UserAgent = "MyCar/%s (com.daimler.ris.mercedesme.%s.ios; %s %s) Alamofire/5.4.0"
UserAgentAPAC = "mycar-store-ap v%s, %s %s, SDK %s"
Locale = "en-GB"
CountryCode = "EN"
)
func getBffUri(region string) string {
switch region {
case "EMEA":
return BffUriEMEA
case "APAC":
return BffUriAPAC
case "NORAM":
return BffUriNORAM
}
return BffUriEMEA
}
func getWidgetUri(region string) string {
switch region {
case "EMEA":
return WidgetUriEMEA
case "APAC":
return WidgetUriAPAC
case "NORAM":
return WidgetUriNORAM
}
return WidgetUriEMEA
}
func mbheaders(includeAuthServerHeader bool, region string) map[string]string {
headers := map[string]string{
"Ris-Os-Name": RisOsName,
"Ris-Os-Version": RisOsVersion,
"X-Locale": Locale,
"X-Trackingid": uuid.New().String(),
"X-Sessionid": uuid.New().String(),
"Content-Type": "application/json",
"Accept-Language": "en-GB",
"Accept": "*/*",
"x-dev": "1",
}
switch region {
case "EMEA":
headers["Ris-Sdk-Version"] = RisSdkVersionEMEA
headers["Ris-Application-Version"] = RisApplicationVersionEMEA
headers["X-Applicationname"] = XApplicationNameEMEA
headers["User-Agent"] = fmt.Sprintf(UserAgent, RisApplicationVersionEMEA, "ece", RisOsName, RisOsVersion)
case "APAC":
headers["Ris-Sdk-Version"] = RisSdkVersionAPAC
headers["Ris-Application-Version"] = RisApplicationVersionAPAC
headers["X-Applicationname"] = XApplicationNameAPAC
headers["User-Agent"] = fmt.Sprintf(UserAgentAPAC, RisApplicationVersionAPAC, RisOsName, RisOsVersion, RisSdkVersionAPAC)
case "NORAM":
headers["Ris-Sdk-Version"] = RisSdkVersionNORAM
headers["Ris-Application-Version"] = RisApplicationVersionNORAM
headers["X-Applicationname"] = XApplicationNameNORAM
headers["User-Agent"] = fmt.Sprintf(UserAgent, RisApplicationVersionEMEA, "ece", RisOsName, RisOsVersion)
}
if includeAuthServerHeader {
headers["Stage"] = "prod"
headers["X-Device-Id"] = uuid.New().String()
headers["X-Request-Id"] = uuid.New().String()
headers["Content-Type"] = "application/x-www-form-urlencoded"
}
return headers
}

View file

@ -0,0 +1,127 @@
package mercedes
import (
"errors"
"fmt"
"net/http"
"net/url"
"strings"
"sync"
"time"
"github.com/evcc-io/evcc/server/db/settings"
"github.com/evcc-io/evcc/util"
"github.com/evcc-io/evcc/util/oauth"
"github.com/evcc-io/evcc/util/request"
"github.com/evcc-io/evcc/util/transport"
"github.com/google/uuid"
"golang.org/x/oauth2"
)
type Identity struct {
*request.Helper
oauth2.TokenSource
mu sync.Mutex
log *util.Logger
account string
region string
Sessionid string
}
// OAuth2Config is the OAuth2 configuration for authenticating with the MercedesAPI.
var OAuth2Config = &oauth2.Config{
// RedirectURL: fmt.Sprintf("%s/void/RedirectURL", IdUri),
Endpoint: oauth2.Endpoint{
// AuthURL: fmt.Sprintf("%s/void/AuthURL", IdUri),
TokenURL: fmt.Sprintf("%s/as/token.oauth2", IdUri),
AuthStyle: oauth2.AuthStyleInParams,
},
Scopes: []string{"not_needed", "handled", "elsewhere"},
}
// NewIdentity creates Mercedes identity
func NewIdentity(log *util.Logger, token *oauth2.Token, account string, region string) (*Identity, error) {
// serialise instance handling
mu.Lock()
defer mu.Unlock()
v := &Identity{
Helper: request.NewHelper(log),
log: log,
account: account,
region: region,
}
v.Sessionid = uuid.New().String()
v.Helper.Transport = &transport.Decorator{
Base: v.Helper.Transport, //.NewTripper(log, transport.Insecure()),
Decorator: transport.DecorateHeaders(mbheaders(true, region)),
}
// reuse identity instance
if instance := getInstance(account); instance != nil {
v.log.DEBUG.Println("identity.NewIdentity - token found in instance store")
return instance, nil
}
if !token.Valid() {
v.log.DEBUG.Println("identity.NewIdentity - token not valid - Add expiry")
token.Expiry = time.Now().Add(time.Duration(10) * time.Second)
}
// database token
if !token.Valid() {
v.log.DEBUG.Println("identity.NewIdentity - token not valid - database token check started")
var tok oauth2.Token
if err := settings.Json(v.settingsKey(), &tok); err == nil {
token = &tok
}
}
if !token.Valid() && token.RefreshToken != "" {
v.log.DEBUG.Println("identity.NewIdentity - token not valid - refreshToken started")
if tok, err := v.RefreshToken(token); err == nil {
token = tok
}
}
if !token.Valid() {
return nil, errors.New("token expired")
}
v.TokenSource = oauth.RefreshTokenSource(token, v)
// add instance
addInstance(account, v)
return v, nil
}
func (v *Identity) settingsKey() string {
return fmt.Sprintf("mercedes.%s-%s", v.account, v.region)
}
func (v *Identity) RefreshToken(token *oauth2.Token) (*oauth2.Token, error) {
v.mu.Lock()
defer v.mu.Unlock()
data := url.Values{
"grant_type": []string{"refresh_token"},
"refresh_token": []string{token.RefreshToken},
}
uri := fmt.Sprintf("%s/as/token.oauth2", IdUri)
req, _ := request.New(http.MethodPost, uri, strings.NewReader(data.Encode()), mbheaders(true, v.region))
var res oauth.Token
if err := v.DoJSON(req, &res); err != nil {
return nil, err
}
tok := (*oauth2.Token)(&res)
v.TokenSource = oauth.RefreshTokenSource(tok, v)
err := settings.SetJson(v.settingsKey(), tok)
return tok, err
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,700 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.32.0
// protoc v3.21.12
// source: client.proto
package protos
import (
protos "github.com/evcc-io/evcc/vehicle/mercedes/pb/protos"
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)
)
// message that is sent from the client
// Sending direction: App -> Websocket (-> AppTwin)
type ClientMessage struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
TrackingId string `protobuf:"bytes,5,opt,name=tracking_id,json=trackingId,proto3" json:"tracking_id,omitempty"`
// Types that are assignable to Msg:
//
// *ClientMessage_UnsubscribeRequest
// *ClientMessage_CommandRequest
// *ClientMessage_TrackingEvent
// *ClientMessage_PingInterval
// *ClientMessage_AcknowledgeVepRequest
// *ClientMessage_AcknowledgeServiceStatusUpdatesByVin
// *ClientMessage_AcknowledgeServiceStatusUpdate
// *ClientMessage_AcknowledgeUserDataUpdate
// *ClientMessage_AcknowledgeUserPictureUpdate
// *ClientMessage_AcknowledgeUserPinUpdate
// *ClientMessage_UpdateUserJwtRequest
// *ClientMessage_AcknowledgeUserVehicleAuthChangedUpdate
// *ClientMessage_AcknowledgeAbilityToGetVehicleMasterDataFromRestApi
// *ClientMessage_AcknowledgeVehicleUpdated
// *ClientMessage_AcknowledgePreferredDealerChange
// *ClientMessage_AcknowledgeApptwinCommandStatusUpdateByVin
// *ClientMessage_Logout
// *ClientMessage_ApptwinPendingCommandsResponse
// *ClientMessage_AcknowledgeVepUpdatesByVin
// *ClientMessage_AcknowledgeAssignedVehicles
Msg isClientMessage_Msg `protobuf_oneof:"msg"`
}
func (x *ClientMessage) Reset() {
*x = ClientMessage{}
if protoimpl.UnsafeEnabled {
mi := &file_client_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ClientMessage) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ClientMessage) ProtoMessage() {}
func (x *ClientMessage) ProtoReflect() protoreflect.Message {
mi := &file_client_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 ClientMessage.ProtoReflect.Descriptor instead.
func (*ClientMessage) Descriptor() ([]byte, []int) {
return file_client_proto_rawDescGZIP(), []int{0}
}
func (x *ClientMessage) GetTrackingId() string {
if x != nil {
return x.TrackingId
}
return ""
}
func (m *ClientMessage) GetMsg() isClientMessage_Msg {
if m != nil {
return m.Msg
}
return nil
}
func (x *ClientMessage) GetUnsubscribeRequest() *protos.UnsubscribeRequest {
if x, ok := x.GetMsg().(*ClientMessage_UnsubscribeRequest); ok {
return x.UnsubscribeRequest
}
return nil
}
func (x *ClientMessage) GetCommandRequest() *CommandRequest {
if x, ok := x.GetMsg().(*ClientMessage_CommandRequest); ok {
return x.CommandRequest
}
return nil
}
func (x *ClientMessage) GetTrackingEvent() *TrackingEvent {
if x, ok := x.GetMsg().(*ClientMessage_TrackingEvent); ok {
return x.TrackingEvent
}
return nil
}
func (x *ClientMessage) GetPingInterval() *ConfigurePingInterval {
if x, ok := x.GetMsg().(*ClientMessage_PingInterval); ok {
return x.PingInterval
}
return nil
}
func (x *ClientMessage) GetAcknowledgeVepRequest() *AcknowledgeVEPRequest {
if x, ok := x.GetMsg().(*ClientMessage_AcknowledgeVepRequest); ok {
return x.AcknowledgeVepRequest
}
return nil
}
func (x *ClientMessage) GetAcknowledgeServiceStatusUpdatesByVin() *AcknowledgeServiceStatusUpdatesByVIN {
if x, ok := x.GetMsg().(*ClientMessage_AcknowledgeServiceStatusUpdatesByVin); ok {
return x.AcknowledgeServiceStatusUpdatesByVin
}
return nil
}
func (x *ClientMessage) GetAcknowledgeServiceStatusUpdate() *AcknowledgeServiceStatusUpdate {
if x, ok := x.GetMsg().(*ClientMessage_AcknowledgeServiceStatusUpdate); ok {
return x.AcknowledgeServiceStatusUpdate
}
return nil
}
func (x *ClientMessage) GetAcknowledgeUserDataUpdate() *AcknowledgeUserDataUpdate {
if x, ok := x.GetMsg().(*ClientMessage_AcknowledgeUserDataUpdate); ok {
return x.AcknowledgeUserDataUpdate
}
return nil
}
func (x *ClientMessage) GetAcknowledgeUserPictureUpdate() *AcknowledgeUserPictureUpdate {
if x, ok := x.GetMsg().(*ClientMessage_AcknowledgeUserPictureUpdate); ok {
return x.AcknowledgeUserPictureUpdate
}
return nil
}
func (x *ClientMessage) GetAcknowledgeUserPinUpdate() *AcknowledgeUserPINUpdate {
if x, ok := x.GetMsg().(*ClientMessage_AcknowledgeUserPinUpdate); ok {
return x.AcknowledgeUserPinUpdate
}
return nil
}
func (x *ClientMessage) GetUpdateUserJwtRequest() *UpdateUserJWTRequest {
if x, ok := x.GetMsg().(*ClientMessage_UpdateUserJwtRequest); ok {
return x.UpdateUserJwtRequest
}
return nil
}
func (x *ClientMessage) GetAcknowledgeUserVehicleAuthChangedUpdate() *AcknowledgeUserVehicleAuthChangedUpdate {
if x, ok := x.GetMsg().(*ClientMessage_AcknowledgeUserVehicleAuthChangedUpdate); ok {
return x.AcknowledgeUserVehicleAuthChangedUpdate
}
return nil
}
func (x *ClientMessage) GetAcknowledgeAbilityToGetVehicleMasterDataFromRestApi() *AcknowledgeAbilityToGetVehicleMasterDataFromRestAPI {
if x, ok := x.GetMsg().(*ClientMessage_AcknowledgeAbilityToGetVehicleMasterDataFromRestApi); ok {
return x.AcknowledgeAbilityToGetVehicleMasterDataFromRestApi
}
return nil
}
func (x *ClientMessage) GetAcknowledgeVehicleUpdated() *AcknowledgeVehicleUpdated {
if x, ok := x.GetMsg().(*ClientMessage_AcknowledgeVehicleUpdated); ok {
return x.AcknowledgeVehicleUpdated
}
return nil
}
func (x *ClientMessage) GetAcknowledgePreferredDealerChange() *AcknowledgePreferredDealerChange {
if x, ok := x.GetMsg().(*ClientMessage_AcknowledgePreferredDealerChange); ok {
return x.AcknowledgePreferredDealerChange
}
return nil
}
func (x *ClientMessage) GetAcknowledgeApptwinCommandStatusUpdateByVin() *AcknowledgeAppTwinCommandStatusUpdatesByVIN {
if x, ok := x.GetMsg().(*ClientMessage_AcknowledgeApptwinCommandStatusUpdateByVin); ok {
return x.AcknowledgeApptwinCommandStatusUpdateByVin
}
return nil
}
func (x *ClientMessage) GetLogout() *Logout {
if x, ok := x.GetMsg().(*ClientMessage_Logout); ok {
return x.Logout
}
return nil
}
func (x *ClientMessage) GetApptwinPendingCommandsResponse() *AppTwinPendingCommandsResponse {
if x, ok := x.GetMsg().(*ClientMessage_ApptwinPendingCommandsResponse); ok {
return x.ApptwinPendingCommandsResponse
}
return nil
}
func (x *ClientMessage) GetAcknowledgeVepUpdatesByVin() *AcknowledgeVEPUpdatesByVIN {
if x, ok := x.GetMsg().(*ClientMessage_AcknowledgeVepUpdatesByVin); ok {
return x.AcknowledgeVepUpdatesByVin
}
return nil
}
func (x *ClientMessage) GetAcknowledgeAssignedVehicles() *protos.AcknowledgeAssignedVehicles {
if x, ok := x.GetMsg().(*ClientMessage_AcknowledgeAssignedVehicles); ok {
return x.AcknowledgeAssignedVehicles
}
return nil
}
type isClientMessage_Msg interface {
isClientMessage_Msg()
}
type ClientMessage_UnsubscribeRequest struct {
UnsubscribeRequest *protos.UnsubscribeRequest `protobuf:"bytes,2,opt,name=unsubscribeRequest,proto3,oneof"`
}
type ClientMessage_CommandRequest struct {
CommandRequest *CommandRequest `protobuf:"bytes,3,opt,name=commandRequest,proto3,oneof"`
}
type ClientMessage_TrackingEvent struct {
TrackingEvent *TrackingEvent `protobuf:"bytes,4,opt,name=tracking_event,json=trackingEvent,proto3,oneof"`
}
type ClientMessage_PingInterval struct {
PingInterval *ConfigurePingInterval `protobuf:"bytes,6,opt,name=ping_interval,json=pingInterval,proto3,oneof"`
}
type ClientMessage_AcknowledgeVepRequest struct {
AcknowledgeVepRequest *AcknowledgeVEPRequest `protobuf:"bytes,7,opt,name=acknowledge_vep_request,json=acknowledgeVepRequest,proto3,oneof"`
}
type ClientMessage_AcknowledgeServiceStatusUpdatesByVin struct {
AcknowledgeServiceStatusUpdatesByVin *AcknowledgeServiceStatusUpdatesByVIN `protobuf:"bytes,9,opt,name=acknowledge_service_status_updates_by_vin,json=acknowledgeServiceStatusUpdatesByVin,proto3,oneof"`
}
type ClientMessage_AcknowledgeServiceStatusUpdate struct {
AcknowledgeServiceStatusUpdate *AcknowledgeServiceStatusUpdate `protobuf:"bytes,13,opt,name=acknowledge_service_status_update,json=acknowledgeServiceStatusUpdate,proto3,oneof"`
}
type ClientMessage_AcknowledgeUserDataUpdate struct {
AcknowledgeUserDataUpdate *AcknowledgeUserDataUpdate `protobuf:"bytes,10,opt,name=acknowledge_user_data_update,json=acknowledgeUserDataUpdate,proto3,oneof"`
}
type ClientMessage_AcknowledgeUserPictureUpdate struct {
AcknowledgeUserPictureUpdate *AcknowledgeUserPictureUpdate `protobuf:"bytes,11,opt,name=acknowledge_user_picture_update,json=acknowledgeUserPictureUpdate,proto3,oneof"`
}
type ClientMessage_AcknowledgeUserPinUpdate struct {
AcknowledgeUserPinUpdate *AcknowledgeUserPINUpdate `protobuf:"bytes,12,opt,name=acknowledge_user_pin_update,json=acknowledgeUserPinUpdate,proto3,oneof"`
}
type ClientMessage_UpdateUserJwtRequest struct {
UpdateUserJwtRequest *UpdateUserJWTRequest `protobuf:"bytes,14,opt,name=update_user_jwt_request,json=updateUserJwtRequest,proto3,oneof"`
}
type ClientMessage_AcknowledgeUserVehicleAuthChangedUpdate struct {
AcknowledgeUserVehicleAuthChangedUpdate *AcknowledgeUserVehicleAuthChangedUpdate `protobuf:"bytes,15,opt,name=acknowledge_user_vehicle_auth_changed_update,json=acknowledgeUserVehicleAuthChangedUpdate,proto3,oneof"`
}
type ClientMessage_AcknowledgeAbilityToGetVehicleMasterDataFromRestApi struct {
AcknowledgeAbilityToGetVehicleMasterDataFromRestApi *AcknowledgeAbilityToGetVehicleMasterDataFromRestAPI `protobuf:"bytes,16,opt,name=acknowledge_ability_to_get_vehicle_master_data_from_rest_api,json=acknowledgeAbilityToGetVehicleMasterDataFromRestApi,proto3,oneof"`
}
type ClientMessage_AcknowledgeVehicleUpdated struct {
AcknowledgeVehicleUpdated *AcknowledgeVehicleUpdated `protobuf:"bytes,17,opt,name=acknowledge_vehicle_updated,json=acknowledgeVehicleUpdated,proto3,oneof"`
}
type ClientMessage_AcknowledgePreferredDealerChange struct {
AcknowledgePreferredDealerChange *AcknowledgePreferredDealerChange `protobuf:"bytes,18,opt,name=acknowledge_preferred_dealer_change,json=acknowledgePreferredDealerChange,proto3,oneof"`
}
type ClientMessage_AcknowledgeApptwinCommandStatusUpdateByVin struct {
AcknowledgeApptwinCommandStatusUpdateByVin *AcknowledgeAppTwinCommandStatusUpdatesByVIN `protobuf:"bytes,19,opt,name=acknowledge_apptwin_command_status_update_by_vin,json=acknowledgeApptwinCommandStatusUpdateByVin,proto3,oneof"`
}
type ClientMessage_Logout struct {
Logout *Logout `protobuf:"bytes,20,opt,name=logout,proto3,oneof"`
}
type ClientMessage_ApptwinPendingCommandsResponse struct {
ApptwinPendingCommandsResponse *AppTwinPendingCommandsResponse `protobuf:"bytes,21,opt,name=apptwin_pending_commands_response,json=apptwinPendingCommandsResponse,proto3,oneof"`
}
type ClientMessage_AcknowledgeVepUpdatesByVin struct {
AcknowledgeVepUpdatesByVin *AcknowledgeVEPUpdatesByVIN `protobuf:"bytes,22,opt,name=acknowledge_vep_updates_by_vin,json=acknowledgeVepUpdatesByVin,proto3,oneof"`
}
type ClientMessage_AcknowledgeAssignedVehicles struct {
AcknowledgeAssignedVehicles *protos.AcknowledgeAssignedVehicles `protobuf:"bytes,23,opt,name=acknowledge_assigned_vehicles,json=acknowledgeAssignedVehicles,proto3,oneof"`
}
func (*ClientMessage_UnsubscribeRequest) isClientMessage_Msg() {}
func (*ClientMessage_CommandRequest) isClientMessage_Msg() {}
func (*ClientMessage_TrackingEvent) isClientMessage_Msg() {}
func (*ClientMessage_PingInterval) isClientMessage_Msg() {}
func (*ClientMessage_AcknowledgeVepRequest) isClientMessage_Msg() {}
func (*ClientMessage_AcknowledgeServiceStatusUpdatesByVin) isClientMessage_Msg() {}
func (*ClientMessage_AcknowledgeServiceStatusUpdate) isClientMessage_Msg() {}
func (*ClientMessage_AcknowledgeUserDataUpdate) isClientMessage_Msg() {}
func (*ClientMessage_AcknowledgeUserPictureUpdate) isClientMessage_Msg() {}
func (*ClientMessage_AcknowledgeUserPinUpdate) isClientMessage_Msg() {}
func (*ClientMessage_UpdateUserJwtRequest) isClientMessage_Msg() {}
func (*ClientMessage_AcknowledgeUserVehicleAuthChangedUpdate) isClientMessage_Msg() {}
func (*ClientMessage_AcknowledgeAbilityToGetVehicleMasterDataFromRestApi) isClientMessage_Msg() {}
func (*ClientMessage_AcknowledgeVehicleUpdated) isClientMessage_Msg() {}
func (*ClientMessage_AcknowledgePreferredDealerChange) isClientMessage_Msg() {}
func (*ClientMessage_AcknowledgeApptwinCommandStatusUpdateByVin) isClientMessage_Msg() {}
func (*ClientMessage_Logout) isClientMessage_Msg() {}
func (*ClientMessage_ApptwinPendingCommandsResponse) isClientMessage_Msg() {}
func (*ClientMessage_AcknowledgeVepUpdatesByVin) isClientMessage_Msg() {}
func (*ClientMessage_AcknowledgeAssignedVehicles) isClientMessage_Msg() {}
// Message to send from the app right before logging out of keycloak
// Stops the corresponding AppTwin actor and shuts it down and
// stops the websocket actor (but does not shut it down. This automatically happens, when the websocket connection is terminated)
type Logout struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
}
func (x *Logout) Reset() {
*x = Logout{}
if protoimpl.UnsafeEnabled {
mi := &file_client_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Logout) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Logout) ProtoMessage() {}
func (x *Logout) ProtoReflect() protoreflect.Message {
mi := &file_client_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 Logout.ProtoReflect.Descriptor instead.
func (*Logout) Descriptor() ([]byte, []int) {
return file_client_proto_rawDescGZIP(), []int{1}
}
var File_client_proto protoreflect.FileDescriptor
var file_client_proto_rawDesc = []byte{
0x0a, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0c, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x61, 0x63, 0x74,
0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x11, 0x75,
0x73, 0x65, 0x72, 0x2d, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x1a, 0x16, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e,
0x64, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c,
0x65, 0x2d, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x10,
0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x22, 0xe6, 0x10, 0x0a, 0x0d, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61,
0x67, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x69,
0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x69, 0x6e,
0x67, 0x49, 0x64, 0x12, 0x4b, 0x0a, 0x12, 0x75, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69,
0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72,
0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x12, 0x75, 0x6e,
0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x12, 0x3f, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48,
0x00, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x12, 0x3d, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x76,
0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48,
0x00, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74,
0x12, 0x43, 0x0a, 0x0d, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61,
0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x50, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74,
0x65, 0x72, 0x76, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0c, 0x70, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74,
0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x56, 0x0a, 0x17, 0x61, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c,
0x65, 0x64, 0x67, 0x65, 0x5f, 0x76, 0x65, 0x70, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41,
0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x56, 0x45, 0x50, 0x52, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x15, 0x61, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65,
0x64, 0x67, 0x65, 0x56, 0x65, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x86, 0x01,
0x0a, 0x29, 0x61, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x73, 0x65,
0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x75, 0x70, 0x64,
0x61, 0x74, 0x65, 0x73, 0x5f, 0x62, 0x79, 0x5f, 0x76, 0x69, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x6b, 0x6e, 0x6f, 0x77,
0x6c, 0x65, 0x64, 0x67, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74,
0x75, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x42, 0x79, 0x56, 0x49, 0x4e, 0x48, 0x00,
0x52, 0x24, 0x61, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x53, 0x65, 0x72,
0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
0x73, 0x42, 0x79, 0x56, 0x69, 0x6e, 0x12, 0x72, 0x0a, 0x21, 0x61, 0x63, 0x6b, 0x6e, 0x6f, 0x77,
0x6c, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x73, 0x74,
0x61, 0x74, 0x75, 0x73, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x6b, 0x6e, 0x6f, 0x77,
0x6c, 0x65, 0x64, 0x67, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74,
0x75, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x1e, 0x61, 0x63, 0x6b, 0x6e,
0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74,
0x61, 0x74, 0x75, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x63, 0x0a, 0x1c, 0x61, 0x63,
0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x64,
0x61, 0x74, 0x61, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c,
0x65, 0x64, 0x67, 0x65, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61,
0x74, 0x65, 0x48, 0x00, 0x52, 0x19, 0x61, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67,
0x65, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12,
0x6c, 0x0a, 0x1f, 0x61, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x75,
0x73, 0x65, 0x72, 0x5f, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x75, 0x70, 0x64, 0x61,
0x74, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x2e, 0x41, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x55, 0x73, 0x65, 0x72,
0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52,
0x1c, 0x61, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x55, 0x73, 0x65, 0x72,
0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x60, 0x0a,
0x1b, 0x61, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x75, 0x73, 0x65,
0x72, 0x5f, 0x70, 0x69, 0x6e, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x0c, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x6b, 0x6e, 0x6f,
0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x49, 0x4e, 0x55, 0x70, 0x64,
0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x18, 0x61, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64,
0x67, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x69, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12,
0x54, 0x0a, 0x17, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6a,
0x77, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55,
0x73, 0x65, 0x72, 0x4a, 0x57, 0x54, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52,
0x14, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x77, 0x74, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x8f, 0x01, 0x0a, 0x2c, 0x61, 0x63, 0x6b, 0x6e, 0x6f, 0x77,
0x6c, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x76, 0x65, 0x68, 0x69, 0x63,
0x6c, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x5f,
0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65,
0x55, 0x73, 0x65, 0x72, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x41, 0x75, 0x74, 0x68, 0x43,
0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x27,
0x61, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x55, 0x73, 0x65, 0x72, 0x56,
0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x41, 0x75, 0x74, 0x68, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65,
0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0xb7, 0x01, 0x0a, 0x3c, 0x61, 0x63, 0x6b, 0x6e,
0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f,
0x74, 0x6f, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x5f, 0x6d,
0x61, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f,
0x72, 0x65, 0x73, 0x74, 0x5f, 0x61, 0x70, 0x69, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64,
0x67, 0x65, 0x41, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x6f, 0x47, 0x65, 0x74, 0x56, 0x65,
0x68, 0x69, 0x63, 0x6c, 0x65, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x46,
0x72, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x74, 0x41, 0x50, 0x49, 0x48, 0x00, 0x52, 0x33, 0x61, 0x63,
0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x41, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79,
0x54, 0x6f, 0x47, 0x65, 0x74, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x4d, 0x61, 0x73, 0x74,
0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x46, 0x72, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x74, 0x41, 0x70,
0x69, 0x12, 0x62, 0x0a, 0x1b, 0x61, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65,
0x5f, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64,
0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41,
0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c,
0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x19, 0x61, 0x63, 0x6b, 0x6e,
0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x55, 0x70,
0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x78, 0x0a, 0x23, 0x61, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c,
0x65, 0x64, 0x67, 0x65, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x64,
0x65, 0x61, 0x6c, 0x65, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x12, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x6b, 0x6e, 0x6f,
0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x44,
0x65, 0x61, 0x6c, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x48, 0x00, 0x52, 0x20, 0x61,
0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72,
0x72, 0x65, 0x64, 0x44, 0x65, 0x61, 0x6c, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12,
0x9a, 0x01, 0x0a, 0x30, 0x61, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x5f,
0x61, 0x70, 0x70, 0x74, 0x77, 0x69, 0x6e, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f,
0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x79,
0x5f, 0x76, 0x69, 0x6e, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x2e, 0x41, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x41, 0x70,
0x70, 0x54, 0x77, 0x69, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x74,
0x75, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x42, 0x79, 0x56, 0x49, 0x4e, 0x48, 0x00,
0x52, 0x2a, 0x61, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x41, 0x70, 0x70,
0x74, 0x77, 0x69, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75,
0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x79, 0x56, 0x69, 0x6e, 0x12, 0x27, 0x0a, 0x06,
0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x48, 0x00, 0x52, 0x06, 0x6c,
0x6f, 0x67, 0x6f, 0x75, 0x74, 0x12, 0x72, 0x0a, 0x21, 0x61, 0x70, 0x70, 0x74, 0x77, 0x69, 0x6e,
0x5f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
0x73, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x25, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x70, 0x70, 0x54, 0x77, 0x69, 0x6e,
0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x52,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x1e, 0x61, 0x70, 0x70, 0x74, 0x77,
0x69, 0x6e, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x67, 0x0a, 0x1e, 0x61, 0x63, 0x6b,
0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x76, 0x65, 0x70, 0x5f, 0x75, 0x70, 0x64,
0x61, 0x74, 0x65, 0x73, 0x5f, 0x62, 0x79, 0x5f, 0x76, 0x69, 0x6e, 0x18, 0x16, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x6b, 0x6e, 0x6f, 0x77,
0x6c, 0x65, 0x64, 0x67, 0x65, 0x56, 0x45, 0x50, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x42,
0x79, 0x56, 0x49, 0x4e, 0x48, 0x00, 0x52, 0x1a, 0x61, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65,
0x64, 0x67, 0x65, 0x56, 0x65, 0x70, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x42, 0x79, 0x56,
0x69, 0x6e, 0x12, 0x68, 0x0a, 0x1d, 0x61, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67,
0x65, 0x5f, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x76, 0x65, 0x68, 0x69, 0x63,
0x6c, 0x65, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x2e, 0x41, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x41, 0x73, 0x73,
0x69, 0x67, 0x6e, 0x65, 0x64, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x73, 0x48, 0x00, 0x52,
0x1b, 0x61, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x41, 0x73, 0x73, 0x69,
0x67, 0x6e, 0x65, 0x64, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x73, 0x42, 0x05, 0x0a, 0x03,
0x6d, 0x73, 0x67, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x22, 0x08, 0x0a, 0x06, 0x4c, 0x6f, 0x67,
0x6f, 0x75, 0x74, 0x42, 0x1c, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x64, 0x61, 0x69, 0x6d, 0x6c,
0x65, 0x72, 0x2e, 0x6d, 0x62, 0x63, 0x61, 0x72, 0x6b, 0x69, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
file_client_proto_rawDescOnce sync.Once
file_client_proto_rawDescData = file_client_proto_rawDesc
)
func file_client_proto_rawDescGZIP() []byte {
file_client_proto_rawDescOnce.Do(func() {
file_client_proto_rawDescData = protoimpl.X.CompressGZIP(file_client_proto_rawDescData)
})
return file_client_proto_rawDescData
}
var file_client_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
var file_client_proto_goTypes = []interface{}{
(*ClientMessage)(nil), // 0: proto.ClientMessage
(*Logout)(nil), // 1: proto.Logout
(*protos.UnsubscribeRequest)(nil), // 2: proto.UnsubscribeRequest
(*CommandRequest)(nil), // 3: proto.CommandRequest
(*TrackingEvent)(nil), // 4: proto.TrackingEvent
(*ConfigurePingInterval)(nil), // 5: proto.ConfigurePingInterval
(*AcknowledgeVEPRequest)(nil), // 6: proto.AcknowledgeVEPRequest
(*AcknowledgeServiceStatusUpdatesByVIN)(nil), // 7: proto.AcknowledgeServiceStatusUpdatesByVIN
(*AcknowledgeServiceStatusUpdate)(nil), // 8: proto.AcknowledgeServiceStatusUpdate
(*AcknowledgeUserDataUpdate)(nil), // 9: proto.AcknowledgeUserDataUpdate
(*AcknowledgeUserPictureUpdate)(nil), // 10: proto.AcknowledgeUserPictureUpdate
(*AcknowledgeUserPINUpdate)(nil), // 11: proto.AcknowledgeUserPINUpdate
(*UpdateUserJWTRequest)(nil), // 12: proto.UpdateUserJWTRequest
(*AcknowledgeUserVehicleAuthChangedUpdate)(nil), // 13: proto.AcknowledgeUserVehicleAuthChangedUpdate
(*AcknowledgeAbilityToGetVehicleMasterDataFromRestAPI)(nil), // 14: proto.AcknowledgeAbilityToGetVehicleMasterDataFromRestAPI
(*AcknowledgeVehicleUpdated)(nil), // 15: proto.AcknowledgeVehicleUpdated
(*AcknowledgePreferredDealerChange)(nil), // 16: proto.AcknowledgePreferredDealerChange
(*AcknowledgeAppTwinCommandStatusUpdatesByVIN)(nil), // 17: proto.AcknowledgeAppTwinCommandStatusUpdatesByVIN
(*AppTwinPendingCommandsResponse)(nil), // 18: proto.AppTwinPendingCommandsResponse
(*AcknowledgeVEPUpdatesByVIN)(nil), // 19: proto.AcknowledgeVEPUpdatesByVIN
(*protos.AcknowledgeAssignedVehicles)(nil), // 20: proto.AcknowledgeAssignedVehicles
}
var file_client_proto_depIdxs = []int32{
2, // 0: proto.ClientMessage.unsubscribeRequest:type_name -> proto.UnsubscribeRequest
3, // 1: proto.ClientMessage.commandRequest:type_name -> proto.CommandRequest
4, // 2: proto.ClientMessage.tracking_event:type_name -> proto.TrackingEvent
5, // 3: proto.ClientMessage.ping_interval:type_name -> proto.ConfigurePingInterval
6, // 4: proto.ClientMessage.acknowledge_vep_request:type_name -> proto.AcknowledgeVEPRequest
7, // 5: proto.ClientMessage.acknowledge_service_status_updates_by_vin:type_name -> proto.AcknowledgeServiceStatusUpdatesByVIN
8, // 6: proto.ClientMessage.acknowledge_service_status_update:type_name -> proto.AcknowledgeServiceStatusUpdate
9, // 7: proto.ClientMessage.acknowledge_user_data_update:type_name -> proto.AcknowledgeUserDataUpdate
10, // 8: proto.ClientMessage.acknowledge_user_picture_update:type_name -> proto.AcknowledgeUserPictureUpdate
11, // 9: proto.ClientMessage.acknowledge_user_pin_update:type_name -> proto.AcknowledgeUserPINUpdate
12, // 10: proto.ClientMessage.update_user_jwt_request:type_name -> proto.UpdateUserJWTRequest
13, // 11: proto.ClientMessage.acknowledge_user_vehicle_auth_changed_update:type_name -> proto.AcknowledgeUserVehicleAuthChangedUpdate
14, // 12: proto.ClientMessage.acknowledge_ability_to_get_vehicle_master_data_from_rest_api:type_name -> proto.AcknowledgeAbilityToGetVehicleMasterDataFromRestAPI
15, // 13: proto.ClientMessage.acknowledge_vehicle_updated:type_name -> proto.AcknowledgeVehicleUpdated
16, // 14: proto.ClientMessage.acknowledge_preferred_dealer_change:type_name -> proto.AcknowledgePreferredDealerChange
17, // 15: proto.ClientMessage.acknowledge_apptwin_command_status_update_by_vin:type_name -> proto.AcknowledgeAppTwinCommandStatusUpdatesByVIN
1, // 16: proto.ClientMessage.logout:type_name -> proto.Logout
18, // 17: proto.ClientMessage.apptwin_pending_commands_response:type_name -> proto.AppTwinPendingCommandsResponse
19, // 18: proto.ClientMessage.acknowledge_vep_updates_by_vin:type_name -> proto.AcknowledgeVEPUpdatesByVIN
20, // 19: proto.ClientMessage.acknowledge_assigned_vehicles:type_name -> proto.AcknowledgeAssignedVehicles
20, // [20:20] is the sub-list for method output_type
20, // [20:20] is the sub-list for method input_type
20, // [20:20] is the sub-list for extension type_name
20, // [20:20] is the sub-list for extension extendee
0, // [0:20] is the sub-list for field type_name
}
func init() { file_client_proto_init() }
func file_client_proto_init() {
if File_client_proto != nil {
return
}
file_service_activation_proto_init()
file_user_events_proto_init()
file_vehicle_commands_proto_init()
file_vehicle_events_proto_init()
file_vehicleapi_proto_init()
if !protoimpl.UnsafeEnabled {
file_client_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ClientMessage); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_client_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Logout); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
file_client_proto_msgTypes[0].OneofWrappers = []interface{}{
(*ClientMessage_UnsubscribeRequest)(nil),
(*ClientMessage_CommandRequest)(nil),
(*ClientMessage_TrackingEvent)(nil),
(*ClientMessage_PingInterval)(nil),
(*ClientMessage_AcknowledgeVepRequest)(nil),
(*ClientMessage_AcknowledgeServiceStatusUpdatesByVin)(nil),
(*ClientMessage_AcknowledgeServiceStatusUpdate)(nil),
(*ClientMessage_AcknowledgeUserDataUpdate)(nil),
(*ClientMessage_AcknowledgeUserPictureUpdate)(nil),
(*ClientMessage_AcknowledgeUserPinUpdate)(nil),
(*ClientMessage_UpdateUserJwtRequest)(nil),
(*ClientMessage_AcknowledgeUserVehicleAuthChangedUpdate)(nil),
(*ClientMessage_AcknowledgeAbilityToGetVehicleMasterDataFromRestApi)(nil),
(*ClientMessage_AcknowledgeVehicleUpdated)(nil),
(*ClientMessage_AcknowledgePreferredDealerChange)(nil),
(*ClientMessage_AcknowledgeApptwinCommandStatusUpdateByVin)(nil),
(*ClientMessage_Logout)(nil),
(*ClientMessage_ApptwinPendingCommandsResponse)(nil),
(*ClientMessage_AcknowledgeVepUpdatesByVin)(nil),
(*ClientMessage_AcknowledgeAssignedVehicles)(nil),
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_client_proto_rawDesc,
NumEnums: 0,
NumMessages: 2,
NumExtensions: 0,
NumServices: 0,
},
GoTypes: file_client_proto_goTypes,
DependencyIndexes: file_client_proto_depIdxs,
MessageInfos: file_client_proto_msgTypes,
}.Build()
File_client_proto = out.File
file_client_proto_rawDesc = nil
file_client_proto_goTypes = nil
file_client_proto_depIdxs = nil
}

View file

@ -0,0 +1,214 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.32.0
// protoc v3.21.12
// source: cluster.proto
package protos
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)
)
type MemberStatus int32
const (
MemberStatus_UNKNOWN_MEMBER_STATUS MemberStatus = 0
MemberStatus_STARTING MemberStatus = 1
MemberStatus_READY MemberStatus = 2
MemberStatus_STOPPING MemberStatus = 3
)
// Enum value maps for MemberStatus.
var (
MemberStatus_name = map[int32]string{
0: "UNKNOWN_MEMBER_STATUS",
1: "STARTING",
2: "READY",
3: "STOPPING",
}
MemberStatus_value = map[string]int32{
"UNKNOWN_MEMBER_STATUS": 0,
"STARTING": 1,
"READY": 2,
"STOPPING": 3,
}
)
func (x MemberStatus) Enum() *MemberStatus {
p := new(MemberStatus)
*p = x
return p
}
func (x MemberStatus) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (MemberStatus) Descriptor() protoreflect.EnumDescriptor {
return file_cluster_proto_enumTypes[0].Descriptor()
}
func (MemberStatus) Type() protoreflect.EnumType {
return &file_cluster_proto_enumTypes[0]
}
func (x MemberStatus) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use MemberStatus.Descriptor instead.
func (MemberStatus) EnumDescriptor() ([]byte, []int) {
return file_cluster_proto_rawDescGZIP(), []int{0}
}
type AppTwinMemberStatusValue struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Status MemberStatus `protobuf:"varint,1,opt,name=status,proto3,enum=proto.MemberStatus" json:"status,omitempty"`
ApptwinCount uint32 `protobuf:"varint,2,opt,name=apptwin_count,json=apptwinCount,proto3" json:"apptwin_count,omitempty"`
}
func (x *AppTwinMemberStatusValue) Reset() {
*x = AppTwinMemberStatusValue{}
if protoimpl.UnsafeEnabled {
mi := &file_cluster_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *AppTwinMemberStatusValue) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AppTwinMemberStatusValue) ProtoMessage() {}
func (x *AppTwinMemberStatusValue) ProtoReflect() protoreflect.Message {
mi := &file_cluster_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 AppTwinMemberStatusValue.ProtoReflect.Descriptor instead.
func (*AppTwinMemberStatusValue) Descriptor() ([]byte, []int) {
return file_cluster_proto_rawDescGZIP(), []int{0}
}
func (x *AppTwinMemberStatusValue) GetStatus() MemberStatus {
if x != nil {
return x.Status
}
return MemberStatus_UNKNOWN_MEMBER_STATUS
}
func (x *AppTwinMemberStatusValue) GetApptwinCount() uint32 {
if x != nil {
return x.ApptwinCount
}
return 0
}
var File_cluster_proto protoreflect.FileDescriptor
var file_cluster_proto_rawDesc = []byte{
0x0a, 0x0d, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12,
0x05, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x6c, 0x0a, 0x18, 0x41, 0x70, 0x70, 0x54, 0x77, 0x69,
0x6e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x56, 0x61, 0x6c,
0x75, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01,
0x28, 0x0e, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65,
0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12,
0x23, 0x0a, 0x0d, 0x61, 0x70, 0x70, 0x74, 0x77, 0x69, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74,
0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x61, 0x70, 0x70, 0x74, 0x77, 0x69, 0x6e, 0x43,
0x6f, 0x75, 0x6e, 0x74, 0x2a, 0x50, 0x0a, 0x0c, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x74,
0x61, 0x74, 0x75, 0x73, 0x12, 0x19, 0x0a, 0x15, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f,
0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x10, 0x00, 0x12,
0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x52, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x09, 0x0a,
0x05, 0x52, 0x45, 0x41, 0x44, 0x59, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x4f, 0x50,
0x50, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
file_cluster_proto_rawDescOnce sync.Once
file_cluster_proto_rawDescData = file_cluster_proto_rawDesc
)
func file_cluster_proto_rawDescGZIP() []byte {
file_cluster_proto_rawDescOnce.Do(func() {
file_cluster_proto_rawDescData = protoimpl.X.CompressGZIP(file_cluster_proto_rawDescData)
})
return file_cluster_proto_rawDescData
}
var file_cluster_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
var file_cluster_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
var file_cluster_proto_goTypes = []interface{}{
(MemberStatus)(0), // 0: proto.MemberStatus
(*AppTwinMemberStatusValue)(nil), // 1: proto.AppTwinMemberStatusValue
}
var file_cluster_proto_depIdxs = []int32{
0, // 0: proto.AppTwinMemberStatusValue.status:type_name -> proto.MemberStatus
1, // [1:1] is the sub-list for method output_type
1, // [1:1] is the sub-list for method input_type
1, // [1:1] is the sub-list for extension type_name
1, // [1:1] is the sub-list for extension extendee
0, // [0:1] is the sub-list for field type_name
}
func init() { file_cluster_proto_init() }
func file_cluster_proto_init() {
if File_cluster_proto != nil {
return
}
if !protoimpl.UnsafeEnabled {
file_cluster_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*AppTwinMemberStatusValue); 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_cluster_proto_rawDesc,
NumEnums: 1,
NumMessages: 1,
NumExtensions: 0,
NumServices: 0,
},
GoTypes: file_cluster_proto_goTypes,
DependencyIndexes: file_cluster_proto_depIdxs,
EnumInfos: file_cluster_proto_enumTypes,
MessageInfos: file_cluster_proto_msgTypes,
}.Build()
File_cluster_proto = out.File
file_cluster_proto_rawDesc = nil
file_cluster_proto_goTypes = nil
file_cluster_proto_depIdxs = nil
}

View file

@ -0,0 +1,245 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.32.0
// protoc v3.21.12
// source: eventpush.proto
package protos
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)
)
type EventPushCommand struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Vin string `protobuf:"bytes,1,opt,name=vin,proto3" json:"vin,omitempty"`
State VVA_CommandState `protobuf:"varint,2,opt,name=state,json=acpState,proto3,enum=proto.VVA_CommandState" json:"state,omitempty"`
Condition VVA_CommandCondition `protobuf:"varint,3,opt,name=condition,json=acpCondition,proto3,enum=proto.VVA_CommandCondition" json:"condition,omitempty"`
Type ACP_CommandType `protobuf:"varint,4,opt,name=type,json=acpCommandType,proto3,enum=proto.ACP_CommandType" json:"type,omitempty"`
ProcessId int64 `protobuf:"varint,5,opt,name=process_id,json=pid,proto3" json:"process_id,omitempty"`
TrackingId string `protobuf:"bytes,6,opt,name=tracking_id,json=trackingId,proto3" json:"tracking_id,omitempty"`
CorrelationId string `protobuf:"bytes,7,opt,name=correlation_id,json=correlationId,proto3" json:"correlation_id,omitempty"`
ErrorCodes []int32 `protobuf:"varint,8,rep,packed,name=error_codes,json=errorCodes,proto3" json:"error_codes,omitempty"`
Guid string `protobuf:"bytes,9,opt,name=guid,proto3" json:"guid,omitempty"`
TimestampInS int64 `protobuf:"varint,10,opt,name=timestamp_in_s,json=timestamp,proto3" json:"timestamp_in_s,omitempty"`
}
func (x *EventPushCommand) Reset() {
*x = EventPushCommand{}
if protoimpl.UnsafeEnabled {
mi := &file_eventpush_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *EventPushCommand) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*EventPushCommand) ProtoMessage() {}
func (x *EventPushCommand) ProtoReflect() protoreflect.Message {
mi := &file_eventpush_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 EventPushCommand.ProtoReflect.Descriptor instead.
func (*EventPushCommand) Descriptor() ([]byte, []int) {
return file_eventpush_proto_rawDescGZIP(), []int{0}
}
func (x *EventPushCommand) GetVin() string {
if x != nil {
return x.Vin
}
return ""
}
func (x *EventPushCommand) GetState() VVA_CommandState {
if x != nil {
return x.State
}
return VVA_UNKNOWN_COMMAND_STATE
}
func (x *EventPushCommand) GetCondition() VVA_CommandCondition {
if x != nil {
return x.Condition
}
return VVA_UNKNWON_COMMAND_CONDITION
}
func (x *EventPushCommand) GetType() ACP_CommandType {
if x != nil {
return x.Type
}
return ACP_UNKNOWNCOMMANDTYPE
}
func (x *EventPushCommand) GetProcessId() int64 {
if x != nil {
return x.ProcessId
}
return 0
}
func (x *EventPushCommand) GetTrackingId() string {
if x != nil {
return x.TrackingId
}
return ""
}
func (x *EventPushCommand) GetCorrelationId() string {
if x != nil {
return x.CorrelationId
}
return ""
}
func (x *EventPushCommand) GetErrorCodes() []int32 {
if x != nil {
return x.ErrorCodes
}
return nil
}
func (x *EventPushCommand) GetGuid() string {
if x != nil {
return x.Guid
}
return ""
}
func (x *EventPushCommand) GetTimestampInS() int64 {
if x != nil {
return x.TimestampInS
}
return 0
}
var File_eventpush_proto protoreflect.FileDescriptor
var file_eventpush_proto_rawDesc = []byte{
0x0a, 0x0f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x70, 0x75, 0x73, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x12, 0x05, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x09, 0x61, 0x63, 0x70, 0x2e, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x1a, 0x0a, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22,
0x83, 0x03, 0x0a, 0x10, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x50, 0x75, 0x73, 0x68, 0x43, 0x6f, 0x6d,
0x6d, 0x61, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x76, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28,
0x09, 0x52, 0x03, 0x76, 0x69, 0x6e, 0x12, 0x30, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18,
0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x56, 0x56,
0x41, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x08,
0x61, 0x63, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x64,
0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x2e, 0x56, 0x56, 0x41, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x43,
0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x61, 0x63, 0x70, 0x43, 0x6f, 0x6e,
0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04,
0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x43, 0x50,
0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0e, 0x61, 0x63,
0x70, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x17, 0x0a, 0x0a,
0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03,
0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x69, 0x6e,
0x67, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x72, 0x61, 0x63,
0x6b, 0x69, 0x6e, 0x67, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d,
0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1f, 0x0a,
0x0b, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03,
0x28, 0x05, 0x52, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x12,
0x0a, 0x04, 0x67, 0x75, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x67, 0x75,
0x69, 0x64, 0x12, 0x21, 0x0a, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f,
0x69, 0x6e, 0x5f, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65,
0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x20, 0xd0, 0xe1, 0x1e, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d,
0x2e, 0x64, 0x61, 0x69, 0x6d, 0x6c, 0x65, 0x72, 0x2e, 0x6d, 0x62, 0x63, 0x61, 0x72, 0x6b, 0x69,
0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
file_eventpush_proto_rawDescOnce sync.Once
file_eventpush_proto_rawDescData = file_eventpush_proto_rawDesc
)
func file_eventpush_proto_rawDescGZIP() []byte {
file_eventpush_proto_rawDescOnce.Do(func() {
file_eventpush_proto_rawDescData = protoimpl.X.CompressGZIP(file_eventpush_proto_rawDescData)
})
return file_eventpush_proto_rawDescData
}
var file_eventpush_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
var file_eventpush_proto_goTypes = []interface{}{
(*EventPushCommand)(nil), // 0: proto.EventPushCommand
(VVA_CommandState)(0), // 1: proto.VVA.CommandState
(VVA_CommandCondition)(0), // 2: proto.VVA.CommandCondition
(ACP_CommandType)(0), // 3: proto.ACP.CommandType
}
var file_eventpush_proto_depIdxs = []int32{
1, // 0: proto.EventPushCommand.state:type_name -> proto.VVA.CommandState
2, // 1: proto.EventPushCommand.condition:type_name -> proto.VVA.CommandCondition
3, // 2: proto.EventPushCommand.type:type_name -> proto.ACP.CommandType
3, // [3:3] is the sub-list for method output_type
3, // [3:3] is the sub-list for method input_type
3, // [3:3] is the sub-list for extension type_name
3, // [3:3] is the sub-list for extension extendee
0, // [0:3] is the sub-list for field type_name
}
func init() { file_eventpush_proto_init() }
func file_eventpush_proto_init() {
if File_eventpush_proto != nil {
return
}
file_acp_proto_init()
if !protoimpl.UnsafeEnabled {
file_eventpush_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*EventPushCommand); 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_eventpush_proto_rawDesc,
NumEnums: 0,
NumMessages: 1,
NumExtensions: 0,
NumServices: 0,
},
GoTypes: file_eventpush_proto_goTypes,
DependencyIndexes: file_eventpush_proto_depIdxs,
MessageInfos: file_eventpush_proto_msgTypes,
}.Build()
File_eventpush_proto = out.File
file_eventpush_proto_rawDesc = nil
file_eventpush_proto_goTypes = nil
file_eventpush_proto_depIdxs = nil
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,496 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.32.0
// protoc v3.21.12
// source: service-activation.proto
package protos
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)
)
type ServiceStatus int32
const (
ServiceStatus_SERVICE_STATUS_UNKNOWN ServiceStatus = 0
ServiceStatus_SERVICE_STATUS_ACTIVE ServiceStatus = 1
ServiceStatus_SERVICE_STATUS_INACTIVE ServiceStatus = 2
ServiceStatus_SERVICE_STATUS_ACTIVATION_PENDING ServiceStatus = 3
ServiceStatus_SERVICE_STATUS_DEACTIVATION_PENDING ServiceStatus = 4
)
// Enum value maps for ServiceStatus.
var (
ServiceStatus_name = map[int32]string{
0: "SERVICE_STATUS_UNKNOWN",
1: "SERVICE_STATUS_ACTIVE",
2: "SERVICE_STATUS_INACTIVE",
3: "SERVICE_STATUS_ACTIVATION_PENDING",
4: "SERVICE_STATUS_DEACTIVATION_PENDING",
}
ServiceStatus_value = map[string]int32{
"SERVICE_STATUS_UNKNOWN": 0,
"SERVICE_STATUS_ACTIVE": 1,
"SERVICE_STATUS_INACTIVE": 2,
"SERVICE_STATUS_ACTIVATION_PENDING": 3,
"SERVICE_STATUS_DEACTIVATION_PENDING": 4,
}
)
func (x ServiceStatus) Enum() *ServiceStatus {
p := new(ServiceStatus)
*p = x
return p
}
func (x ServiceStatus) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (ServiceStatus) Descriptor() protoreflect.EnumDescriptor {
return file_service_activation_proto_enumTypes[0].Descriptor()
}
func (ServiceStatus) Type() protoreflect.EnumType {
return &file_service_activation_proto_enumTypes[0]
}
func (x ServiceStatus) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use ServiceStatus.Descriptor instead.
func (ServiceStatus) EnumDescriptor() ([]byte, []int) {
return file_service_activation_proto_rawDescGZIP(), []int{0}
}
type AcknowledgeServiceStatusUpdatesByVIN struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
SequenceNumber int32 `protobuf:"varint,1,opt,name=sequence_number,json=sequenceNumber,proto3" json:"sequence_number,omitempty"`
}
func (x *AcknowledgeServiceStatusUpdatesByVIN) Reset() {
*x = AcknowledgeServiceStatusUpdatesByVIN{}
if protoimpl.UnsafeEnabled {
mi := &file_service_activation_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *AcknowledgeServiceStatusUpdatesByVIN) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AcknowledgeServiceStatusUpdatesByVIN) ProtoMessage() {}
func (x *AcknowledgeServiceStatusUpdatesByVIN) ProtoReflect() protoreflect.Message {
mi := &file_service_activation_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 AcknowledgeServiceStatusUpdatesByVIN.ProtoReflect.Descriptor instead.
func (*AcknowledgeServiceStatusUpdatesByVIN) Descriptor() ([]byte, []int) {
return file_service_activation_proto_rawDescGZIP(), []int{0}
}
func (x *AcknowledgeServiceStatusUpdatesByVIN) GetSequenceNumber() int32 {
if x != nil {
return x.SequenceNumber
}
return 0
}
type AcknowledgeServiceStatusUpdate struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
SequenceNumber int32 `protobuf:"varint,1,opt,name=sequence_number,json=sequenceNumber,proto3" json:"sequence_number,omitempty"`
}
func (x *AcknowledgeServiceStatusUpdate) Reset() {
*x = AcknowledgeServiceStatusUpdate{}
if protoimpl.UnsafeEnabled {
mi := &file_service_activation_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *AcknowledgeServiceStatusUpdate) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AcknowledgeServiceStatusUpdate) ProtoMessage() {}
func (x *AcknowledgeServiceStatusUpdate) ProtoReflect() protoreflect.Message {
mi := &file_service_activation_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 AcknowledgeServiceStatusUpdate.ProtoReflect.Descriptor instead.
func (*AcknowledgeServiceStatusUpdate) Descriptor() ([]byte, []int) {
return file_service_activation_proto_rawDescGZIP(), []int{1}
}
func (x *AcknowledgeServiceStatusUpdate) GetSequenceNumber() int32 {
if x != nil {
return x.SequenceNumber
}
return 0
}
type ServiceStatusUpdatesByVIN struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
SequenceNumber int32 `protobuf:"varint,1,opt,name=sequence_number,json=sequenceNumber,proto3" json:"sequence_number,omitempty"`
// Updates with VinOrFins
Updates map[string]*ServiceStatusUpdate `protobuf:"bytes,2,rep,name=updates,proto3" json:"updates,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
}
func (x *ServiceStatusUpdatesByVIN) Reset() {
*x = ServiceStatusUpdatesByVIN{}
if protoimpl.UnsafeEnabled {
mi := &file_service_activation_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ServiceStatusUpdatesByVIN) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ServiceStatusUpdatesByVIN) ProtoMessage() {}
func (x *ServiceStatusUpdatesByVIN) ProtoReflect() protoreflect.Message {
mi := &file_service_activation_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 ServiceStatusUpdatesByVIN.ProtoReflect.Descriptor instead.
func (*ServiceStatusUpdatesByVIN) Descriptor() ([]byte, []int) {
return file_service_activation_proto_rawDescGZIP(), []int{2}
}
func (x *ServiceStatusUpdatesByVIN) GetSequenceNumber() int32 {
if x != nil {
return x.SequenceNumber
}
return 0
}
func (x *ServiceStatusUpdatesByVIN) GetUpdates() map[string]*ServiceStatusUpdate {
if x != nil {
return x.Updates
}
return nil
}
type ServiceStatusUpdate struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
SequenceNumber int32 `protobuf:"varint,1,opt,name=sequence_number,json=sequenceNumber,proto3" json:"sequence_number,omitempty"`
CiamId string `protobuf:"bytes,7,opt,name=ciam_id,json=ciamId,proto3" json:"ciam_id,omitempty"`
// FinOrVin
Vin string `protobuf:"bytes,5,opt,name=vin,proto3" json:"vin,omitempty"`
// when was the event emitted? This is the time of the update,
// not when the attributes where changed. To compare attribute changes, you need to look into each attribute timestamp
EmitTimestamp int64 `protobuf:"varint,2,opt,name=emit_timestamp,json=emitTimestamp,proto3" json:"emit_timestamp,omitempty"`
// When was the event emitted (milliseconds in Unix time)
EmitTimestampInMs int64 `protobuf:"varint,8,opt,name=emit_timestamp_in_ms,json=emitTimestampInMs,proto3" json:"emit_timestamp_in_ms,omitempty"`
// serviceID -> Status
Updates map[int32]ServiceStatus `protobuf:"bytes,6,rep,name=updates,proto3" json:"updates,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3,enum=proto.ServiceStatus"`
}
func (x *ServiceStatusUpdate) Reset() {
*x = ServiceStatusUpdate{}
if protoimpl.UnsafeEnabled {
mi := &file_service_activation_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ServiceStatusUpdate) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ServiceStatusUpdate) ProtoMessage() {}
func (x *ServiceStatusUpdate) ProtoReflect() protoreflect.Message {
mi := &file_service_activation_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 ServiceStatusUpdate.ProtoReflect.Descriptor instead.
func (*ServiceStatusUpdate) Descriptor() ([]byte, []int) {
return file_service_activation_proto_rawDescGZIP(), []int{3}
}
func (x *ServiceStatusUpdate) GetSequenceNumber() int32 {
if x != nil {
return x.SequenceNumber
}
return 0
}
func (x *ServiceStatusUpdate) GetCiamId() string {
if x != nil {
return x.CiamId
}
return ""
}
func (x *ServiceStatusUpdate) GetVin() string {
if x != nil {
return x.Vin
}
return ""
}
func (x *ServiceStatusUpdate) GetEmitTimestamp() int64 {
if x != nil {
return x.EmitTimestamp
}
return 0
}
func (x *ServiceStatusUpdate) GetEmitTimestampInMs() int64 {
if x != nil {
return x.EmitTimestampInMs
}
return 0
}
func (x *ServiceStatusUpdate) GetUpdates() map[int32]ServiceStatus {
if x != nil {
return x.Updates
}
return nil
}
var File_service_activation_proto protoreflect.FileDescriptor
var file_service_activation_proto_rawDesc = []byte{
0x0a, 0x18, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x22, 0x4f, 0x0a, 0x24, 0x41, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65,
0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x55, 0x70, 0x64,
0x61, 0x74, 0x65, 0x73, 0x42, 0x79, 0x56, 0x49, 0x4e, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x65, 0x71,
0x75, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01,
0x28, 0x05, 0x52, 0x0e, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x62,
0x65, 0x72, 0x22, 0x49, 0x0a, 0x1e, 0x41, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67,
0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x55, 0x70,
0x64, 0x61, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65,
0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x73,
0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0xe5, 0x01,
0x0a, 0x19, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x55,
0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x42, 0x79, 0x56, 0x49, 0x4e, 0x12, 0x27, 0x0a, 0x0f, 0x73,
0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01,
0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75,
0x6d, 0x62, 0x65, 0x72, 0x12, 0x47, 0x0a, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18,
0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x65,
0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74,
0x65, 0x73, 0x42, 0x79, 0x56, 0x49, 0x4e, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x45,
0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x1a, 0x56, 0x0a,
0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74,
0x61, 0x74, 0x75, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd6, 0x02, 0x0a, 0x13, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x27, 0x0a,
0x0f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72,
0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65,
0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x63, 0x69, 0x61, 0x6d, 0x5f, 0x69,
0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x69, 0x61, 0x6d, 0x49, 0x64, 0x12,
0x10, 0x0a, 0x03, 0x76, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x76, 0x69,
0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6d, 0x69, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74,
0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x65, 0x6d, 0x69, 0x74, 0x54,
0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x2f, 0x0a, 0x14, 0x65, 0x6d, 0x69, 0x74,
0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x69, 0x6e, 0x5f, 0x6d, 0x73,
0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x65, 0x6d, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65,
0x73, 0x74, 0x61, 0x6d, 0x70, 0x49, 0x6e, 0x4d, 0x73, 0x12, 0x41, 0x0a, 0x07, 0x75, 0x70, 0x64,
0x61, 0x74, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x45, 0x6e,
0x74, 0x72, 0x79, 0x52, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x1a, 0x50, 0x0a, 0x0c,
0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2a,
0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61,
0x74, 0x75, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x2a, 0xb3,
0x01, 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
0x12, 0x1a, 0x0a, 0x16, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54,
0x55, 0x53, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15,
0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x41,
0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x45, 0x52, 0x56, 0x49,
0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x49, 0x4e, 0x41, 0x43, 0x54, 0x49,
0x56, 0x45, 0x10, 0x02, 0x12, 0x25, 0x0a, 0x21, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f,
0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x41, 0x54, 0x49, 0x4f,
0x4e, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x27, 0x0a, 0x23, 0x53,
0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x45,
0x41, 0x43, 0x54, 0x49, 0x56, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49,
0x4e, 0x47, 0x10, 0x04, 0x42, 0x1c, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x64, 0x61, 0x69, 0x6d,
0x6c, 0x65, 0x72, 0x2e, 0x6d, 0x62, 0x63, 0x61, 0x72, 0x6b, 0x69, 0x74, 0x2e, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
file_service_activation_proto_rawDescOnce sync.Once
file_service_activation_proto_rawDescData = file_service_activation_proto_rawDesc
)
func file_service_activation_proto_rawDescGZIP() []byte {
file_service_activation_proto_rawDescOnce.Do(func() {
file_service_activation_proto_rawDescData = protoimpl.X.CompressGZIP(file_service_activation_proto_rawDescData)
})
return file_service_activation_proto_rawDescData
}
var file_service_activation_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
var file_service_activation_proto_msgTypes = make([]protoimpl.MessageInfo, 6)
var file_service_activation_proto_goTypes = []interface{}{
(ServiceStatus)(0), // 0: proto.ServiceStatus
(*AcknowledgeServiceStatusUpdatesByVIN)(nil), // 1: proto.AcknowledgeServiceStatusUpdatesByVIN
(*AcknowledgeServiceStatusUpdate)(nil), // 2: proto.AcknowledgeServiceStatusUpdate
(*ServiceStatusUpdatesByVIN)(nil), // 3: proto.ServiceStatusUpdatesByVIN
(*ServiceStatusUpdate)(nil), // 4: proto.ServiceStatusUpdate
nil, // 5: proto.ServiceStatusUpdatesByVIN.UpdatesEntry
nil, // 6: proto.ServiceStatusUpdate.UpdatesEntry
}
var file_service_activation_proto_depIdxs = []int32{
5, // 0: proto.ServiceStatusUpdatesByVIN.updates:type_name -> proto.ServiceStatusUpdatesByVIN.UpdatesEntry
6, // 1: proto.ServiceStatusUpdate.updates:type_name -> proto.ServiceStatusUpdate.UpdatesEntry
4, // 2: proto.ServiceStatusUpdatesByVIN.UpdatesEntry.value:type_name -> proto.ServiceStatusUpdate
0, // 3: proto.ServiceStatusUpdate.UpdatesEntry.value:type_name -> proto.ServiceStatus
4, // [4:4] is the sub-list for method output_type
4, // [4:4] is the sub-list for method input_type
4, // [4:4] is the sub-list for extension type_name
4, // [4:4] is the sub-list for extension extendee
0, // [0:4] is the sub-list for field type_name
}
func init() { file_service_activation_proto_init() }
func file_service_activation_proto_init() {
if File_service_activation_proto != nil {
return
}
if !protoimpl.UnsafeEnabled {
file_service_activation_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*AcknowledgeServiceStatusUpdatesByVIN); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_service_activation_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*AcknowledgeServiceStatusUpdate); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_service_activation_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ServiceStatusUpdatesByVIN); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_service_activation_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ServiceStatusUpdate); 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_service_activation_proto_rawDesc,
NumEnums: 1,
NumMessages: 6,
NumExtensions: 0,
NumServices: 0,
},
GoTypes: file_service_activation_proto_goTypes,
DependencyIndexes: file_service_activation_proto_depIdxs,
EnumInfos: file_service_activation_proto_enumTypes,
MessageInfos: file_service_activation_proto_msgTypes,
}.Build()
File_service_activation_proto = out.File
file_service_activation_proto_rawDesc = nil
file_service_activation_proto_goTypes = nil
file_service_activation_proto_depIdxs = nil
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,153 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.32.0
// protoc v3.21.12
// source: vin-events.proto
package protos
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)
)
type VINUpdate struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
AddedVINs []string `protobuf:"bytes,1,rep,name=addedVINs,proto3" json:"addedVINs,omitempty"`
DeletedVINs []string `protobuf:"bytes,2,rep,name=deletedVINs,proto3" json:"deletedVINs,omitempty"`
}
func (x *VINUpdate) Reset() {
*x = VINUpdate{}
if protoimpl.UnsafeEnabled {
mi := &file_vin_events_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *VINUpdate) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*VINUpdate) ProtoMessage() {}
func (x *VINUpdate) ProtoReflect() protoreflect.Message {
mi := &file_vin_events_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 VINUpdate.ProtoReflect.Descriptor instead.
func (*VINUpdate) Descriptor() ([]byte, []int) {
return file_vin_events_proto_rawDescGZIP(), []int{0}
}
func (x *VINUpdate) GetAddedVINs() []string {
if x != nil {
return x.AddedVINs
}
return nil
}
func (x *VINUpdate) GetDeletedVINs() []string {
if x != nil {
return x.DeletedVINs
}
return nil
}
var File_vin_events_proto protoreflect.FileDescriptor
var file_vin_events_proto_rawDesc = []byte{
0x0a, 0x10, 0x76, 0x69, 0x6e, 0x2d, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x12, 0x05, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x4b, 0x0a, 0x09, 0x56, 0x49, 0x4e,
0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x65, 0x64, 0x56,
0x49, 0x4e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x65, 0x64,
0x56, 0x49, 0x4e, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x56,
0x49, 0x4e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x74,
0x65, 0x64, 0x56, 0x49, 0x4e, 0x73, 0x42, 0x1c, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x64, 0x61,
0x69, 0x6d, 0x6c, 0x65, 0x72, 0x2e, 0x6d, 0x62, 0x63, 0x61, 0x72, 0x6b, 0x69, 0x74, 0x2e, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
file_vin_events_proto_rawDescOnce sync.Once
file_vin_events_proto_rawDescData = file_vin_events_proto_rawDesc
)
func file_vin_events_proto_rawDescGZIP() []byte {
file_vin_events_proto_rawDescOnce.Do(func() {
file_vin_events_proto_rawDescData = protoimpl.X.CompressGZIP(file_vin_events_proto_rawDescData)
})
return file_vin_events_proto_rawDescData
}
var file_vin_events_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
var file_vin_events_proto_goTypes = []interface{}{
(*VINUpdate)(nil), // 0: proto.VINUpdate
}
var file_vin_events_proto_depIdxs = []int32{
0, // [0:0] is the sub-list for method output_type
0, // [0:0] is the sub-list for method input_type
0, // [0:0] is the sub-list for extension type_name
0, // [0:0] is the sub-list for extension extendee
0, // [0:0] is the sub-list for field type_name
}
func init() { file_vin_events_proto_init() }
func file_vin_events_proto_init() {
if File_vin_events_proto != nil {
return
}
if !protoimpl.UnsafeEnabled {
file_vin_events_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*VINUpdate); 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_vin_events_proto_rawDesc,
NumEnums: 0,
NumMessages: 1,
NumExtensions: 0,
NumServices: 0,
},
GoTypes: file_vin_events_proto_goTypes,
DependencyIndexes: file_vin_events_proto_depIdxs,
MessageInfos: file_vin_events_proto_msgTypes,
}.Build()
File_vin_events_proto = out.File
file_vin_events_proto_rawDesc = nil
file_vin_events_proto_goTypes = nil
file_vin_events_proto_depIdxs = nil
}

View file

@ -0,0 +1,110 @@
package mercedes
import (
"time"
"github.com/evcc-io/evcc/api"
"github.com/evcc-io/evcc/provider"
)
type Provider struct {
dataG func() (StatusResponse, error)
}
func NewProvider(api *API, vin string, cache time.Duration) *Provider {
impl := &Provider{
dataG: provider.Cached(func() (StatusResponse, error) {
return api.Status(vin)
}, cache),
}
return impl
}
// Soc implements the api.Vehicle interface
func (v *Provider) Soc() (float64, error) {
res, err := v.dataG()
return res.EvInfo.Battery.StateOfCharge, err
}
var _ api.VehicleRange = (*Provider)(nil)
// Range implements the api.VehicleRange interface
func (v *Provider) Range() (int64, error) {
res, err := v.dataG()
return int64(res.EvInfo.Battery.DistanceToEmpty.Value), err
}
var _ api.VehicleOdometer = (*Provider)(nil)
// Odometer implements the api.VehicleOdometer interface
func (v *Provider) Odometer() (float64, error) {
res, err := v.dataG()
return float64(res.VehicleInfo.Odometer.Value), err
}
var _ api.ChargeState = (*Provider)(nil)
// Status implements the api.ChargeState interface
func (v *Provider) Status() (api.ChargeStatus, error) {
status := api.StatusA // disconnected
res, err := v.dataG()
if err == nil {
status = MapChargeStatus(res.EvInfo.Battery.ChargingStatus)
}
return status, err
}
var _ api.VehiclePosition = (*Provider)(nil)
// Position implements the api.VehiclePosition interface
func (v *Provider) Position() (float64, float64, error) {
res, err := v.dataG()
return res.LocationResponse.Latitude, res.LocationResponse.Longitude, err
}
var _ api.VehicleFinishTimer = (*Provider)(nil)
// FinishTime implements the api.VehicleFinishTimer interface
func (v *Provider) FinishTime() (time.Time, error) {
data, err := v.dataG()
if err != nil {
return time.Time{}, err
}
now := time.Now()
res := time.Date(now.Year(), now.Month(), now.Day(), 0, data.EvInfo.Battery.EndOfChargeTime, 0, 0, now.Location())
if res.Before(now) {
res = res.Add(24 * time.Hour)
}
return res, nil
}
// Charging Status
// 0=CHARGING
// 1=CHARGING_ENDS
// 2=CHARGE_BREAK
// 3=UNPLUGGED
// 4=FAILURE
// 5=SLOW
// 6=FAST
// 7=DISCHARGING
// 8=NO_CHARGING
// 9=SLOW_CHARGING_AFTER_REACHING_TRIP_TARGET
// 10=CHARGING_AFTER_REACHING_TRIP_TARGET
// 11=FAST_CHARGING_AFTER_REACHING_TRIP_TARGET
// 12=UNKNOWN
func MapChargeStatus(lookup int) api.ChargeStatus {
switch lookup {
case
0, 5, 6, 9, 10, 11:
return api.StatusC
case
1, 2, 4, 7, 8:
return api.StatusB
}
return api.StatusA
}

View file

@ -0,0 +1,94 @@
package mercedes
import (
"fmt"
"net/http"
"net/url"
"strings"
"github.com/evcc-io/evcc/util"
"github.com/evcc-io/evcc/util/oauth"
"github.com/evcc-io/evcc/util/request"
"github.com/evcc-io/evcc/util/transport"
"github.com/google/uuid"
"golang.org/x/oauth2"
)
type SetupAPI struct {
log *util.Logger
account string
region string
*request.Helper
}
func NewSetupAPI(log *util.Logger, account string, region string) *SetupAPI {
client := request.NewHelper(log)
client.Transport = &transport.Decorator{
Base: client.Transport,
Decorator: transport.DecorateHeaders(mbheaders(true, region)),
}
return &SetupAPI{
Helper: client,
log: log,
region: region,
account: account,
}
}
func (vs *SetupAPI) RequestPin() (bool, *string, error) {
client := request.NewHelper(vs.log)
client.Transport = &transport.Decorator{
Base: client.Transport,
Decorator: transport.DecorateHeaders(mbheaders(false, vs.region)),
}
// Preflight request required to get a pin
uri := fmt.Sprintf("%s/v1/config", getBffUri(vs.region))
if _, err := client.GetBody(uri); err != nil {
return false, nil, err
}
nonce := uuid.New().String()
data := PinRequest{
EmailOrPhoneNumber: vs.account,
CountryCode: "EN",
Nonce: nonce,
}
uri = fmt.Sprintf("%s/v1/login", getBffUri(vs.region))
req, err := request.New(http.MethodPost, uri, request.MarshalJSON(data))
if err != nil {
return false, nil, err
}
var res PinResponse
if err := client.DoJSON(req, &res); err != nil {
return false, nil, err
}
// Only if the response field email is the same like the account an email is send by the servers.
return res.UserName == vs.account, &nonce, nil
}
func (vs *SetupAPI) RequestAccessToken(nonce string, pin string) (*oauth2.Token, error) {
data := url.Values{
"client_id": []string{ClientId},
"grant_type": []string{"password"},
"password": []string{fmt.Sprintf("%s:%s", nonce, pin)},
"scope": []string{"openid email phone profile offline_access ciam-uid"},
"username": []string{vs.account},
}
uri := fmt.Sprintf("%s/as/token.oauth2", IdUri)
req, _ := request.New(http.MethodPost, uri, strings.NewReader(data.Encode()), mbheaders(true, vs.region))
var res oauth.Token
if err := vs.DoJSON(req, &res); err != nil {
return nil, err
}
return (*oauth2.Token)(&res), nil
}

74
vehicle/mercedes/types.go Normal file
View file

@ -0,0 +1,74 @@
package mercedes
import (
"fmt"
"html"
"time"
)
var Regions = map[string]string{
"apac": "Asia-Pacific",
"ece": "ECE",
"noram": "North-America",
}
type ErrorInfo struct {
ErrorCode int
ErrorMessage string
ErrorDetails string
}
func (e ErrorInfo) Error() error {
if e.ErrorCode == 0 {
return nil
}
return fmt.Errorf("%s: %s", e.ErrorMessage, html.UnescapeString(e.ErrorDetails))
}
type PinRequest struct {
EmailOrPhoneNumber string `json:"emailOrPhoneNumber"`
CountryCode string `json:"countryCode"`
Nonce string `json:"nonce"`
}
type PinResponse struct {
IsEmail bool `json:"isEmail"`
UserName string `json:"username"`
}
type VehiclesResponse struct {
AssignedVehicles []Vehicle
}
type Vehicle struct {
Fin string
}
type StatusResponse struct {
VehicleInfo struct {
Odometer struct {
Value int
Unit string
}
Timestamp time.Time
}
EvInfo struct {
Battery struct {
ChargingStatus int
DistanceToEmpty struct {
Value int
Unit string
}
StateOfCharge float64 // 75
EndOfChargeTime int // Minutes after midnight
TotalRange int // 17
}
Timestamp time.Time
}
LocationResponse struct {
TimeStamp time.Time
Longitude float64
Latitude float64
}
Timestamp time.Time
}