Skip to content

Commit a634614

Browse files
committed
get/update resource: allow to set resource interface
1 parent ac27a7e commit a634614

8 files changed

Lines changed: 66 additions & 20 deletions

File tree

pb/get_resource.pb.go

Lines changed: 18 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pb/get_resource.proto

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,5 @@ option go_package = "github.com/plgd-dev/client-application/pb;pb";
2424

2525
message GetResourceRequest {
2626
resourceaggregate.pb.ResourceId resource_id = 1;
27+
string resource_interface = 2;
2728
}

pb/service.swagger.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -663,6 +663,12 @@
663663
"required": true,
664664
"type": "string",
665665
"pattern": ".+"
666+
},
667+
{
668+
"name": "resourceInterface",
669+
"in": "query",
670+
"required": false,
671+
"type": "string"
666672
}
667673
],
668674
"tags": [
@@ -713,6 +719,12 @@
713719
"schema": {
714720
"$ref": "#/definitions/grpcgatewaypbContent"
715721
}
722+
},
723+
{
724+
"name": "resourceInterface",
725+
"in": "query",
726+
"required": false,
727+
"type": "string"
716728
}
717729
],
718730
"tags": [

pb/update_resource.pb.go

Lines changed: 18 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pb/update_resource.proto

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,5 @@ option go_package = "github.com/plgd-dev/client-application/pb;pb";
2626
message UpdateResourceRequest {
2727
resourceaggregate.pb.ResourceId resource_id = 1;
2828
grpcgateway.pb.Content content = 2;
29+
string resource_interface = 3;
2930
}

service/grpc/getDevice.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ func (s *ClientApplicationServer) GetDevice(ctx context.Context, req *pb.GetDevi
4343
if len(devLinks) == 0 {
4444
return nil, status.Errorf(codes.NotFound, "cannot find device resource %v at device %v", plgdDevice.ResourceType, req.GetDeviceId())
4545
}
46-
_, err = getResourceAndRefreshCache(ctx, dev, devLinks[0])
46+
_, err = getResourceAndRefreshCache(ctx, dev, devLinks[0], "")
4747
if err != nil {
4848
return nil, err
4949
}

service/grpc/getResource.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222

2323
"github.com/plgd-dev/client-application/pb"
2424
"github.com/plgd-dev/client-application/pkg/rawcodec"
25+
pkgCoap "github.com/plgd-dev/device/v2/pkg/net/coap"
2526
"github.com/plgd-dev/device/v2/schema"
2627
plgdDevice "github.com/plgd-dev/device/v2/schema/device"
2728
"github.com/plgd-dev/go-coap/v3/message"
@@ -32,15 +33,19 @@ import (
3233
"google.golang.org/grpc/codes"
3334
)
3435

35-
func getResourceAndRefreshCache(ctx context.Context, dev *device, link schema.ResourceLink) (*commands.Content, error) {
36+
func getResourceAndRefreshCache(ctx context.Context, dev *device, link schema.ResourceLink, resourceInterface string) (*commands.Content, error) {
3637
var response []byte
37-
err := dev.GetResourceWithCodec(ctx, link, rawcodec.GetRawCodec(message.AppOcfCbor), &response)
38+
var options []func(message.Options) message.Options
39+
if resourceInterface != "" {
40+
options = append(options, pkgCoap.WithInterface(resourceInterface))
41+
}
42+
err := dev.GetResourceWithCodec(ctx, link, rawcodec.GetRawCodec(message.AppOcfCbor), &response, options...)
3843
if err != nil {
3944
return nil, convErrToGrpcStatus(codes.Unavailable, fmt.Errorf("cannot get resource %v for device %v: %w", link.Href, dev.ID, err)).Err()
4045
}
4146
content := responseToData(response)
4247
// we update device resource body only for device resource
43-
if strings.Contains(link.ResourceTypes, plgdDevice.ResourceType) {
48+
if strings.Contains(link.ResourceTypes, plgdDevice.ResourceType) && resourceInterface == "" {
4449
dev.updateDeviceResourceBody(content)
4550
}
4651
return content, nil
@@ -70,7 +75,7 @@ func (s *ClientApplicationServer) GetResource(ctx context.Context, req *pb.GetRe
7075
if err != nil {
7176
return nil, err
7277
}
73-
content, err := getResourceAndRefreshCache(ctx, dev, link)
78+
content, err := getResourceAndRefreshCache(ctx, dev, link, req.GetResourceInterface())
7479
if err != nil {
7580
return nil, err
7681
}

service/grpc/updateResource.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222

2323
"github.com/plgd-dev/client-application/pb"
2424
"github.com/plgd-dev/client-application/pkg/rawcodec"
25+
pkgCoap "github.com/plgd-dev/device/v2/pkg/net/coap"
2526
"github.com/plgd-dev/go-coap/v3/message"
2627
grpcgwPb "github.com/plgd-dev/hub/v2/grpc-gateway/pb"
2728
"github.com/plgd-dev/hub/v2/resource-aggregate/commands"
@@ -63,7 +64,11 @@ func (s *ClientApplicationServer) UpdateResource(ctx context.Context, req *pb.Up
6364
return nil, err
6465
}
6566
var response []byte
66-
err = dev.UpdateResourceWithCodec(ctx, link, rawcodec.GetRawCodec(message.AppOcfCbor), updateData, &response)
67+
var options []func(message.Options) message.Options
68+
if req.GetResourceInterface() != "" {
69+
options = append(options, pkgCoap.WithInterface(req.GetResourceInterface()))
70+
}
71+
err = dev.UpdateResourceWithCodec(ctx, link, rawcodec.GetRawCodec(message.AppOcfCbor), updateData, &response, options...)
6772
if err != nil {
6873
return nil, convErrToGrpcStatus(codes.Unavailable, fmt.Errorf("cannot update resource %v for device %v: %w", req.GetResourceId().GetHref(), dev.ID, err)).Err()
6974
}

0 commit comments

Comments
 (0)