@@ -24,6 +24,11 @@ import (
2424 "github.com/iptecharch/data-server/pkg/utils"
2525)
2626
27+ const (
28+ // to be used for candidates created without an owner
29+ DefaultOwner = "__sdcio"
30+ )
31+
2732func (d * Datastore ) Get (ctx context.Context , req * sdcpb.GetDataRequest , nCh chan * sdcpb.GetDataResponse ) error {
2833 defer close (nCh )
2934 switch req .GetDatastore ().GetType () {
@@ -484,6 +489,11 @@ func (d *Datastore) validateUpdate(ctx context.Context, upd *sdcpb.Update) error
484489 if err != nil {
485490 return err
486491 }
492+ // 2. convert value to its YANG type
493+ upd .Value , err = convertTypedValueToYANGType (rsp .GetSchema (), upd .GetValue ())
494+ if err != nil {
495+ return err
496+ }
487497 // 2. validate value
488498 val , err := utils .GetSchemaValue (upd .GetValue ())
489499 if err != nil {
@@ -1280,15 +1290,19 @@ func (d *Datastore) convertTypedValueToProto(ctx context.Context, p *sdcpb.Path,
12801290 if err != nil {
12811291 return nil , err
12821292 }
1293+ return convertTypedValueToYANGType (rsp .GetSchema (), tv )
1294+ }
1295+
1296+ func convertTypedValueToYANGType (schemaElem * sdcpb.SchemaElem , tv * sdcpb.TypedValue ) (* sdcpb.TypedValue , error ) {
12831297 switch {
1284- case rsp . GetSchema () .GetContainer () != nil :
1285- if rsp . GetSchema () .GetContainer ().IsPresence {
1298+ case schemaElem .GetContainer () != nil :
1299+ if schemaElem .GetContainer ().IsPresence {
12861300 return & sdcpb.TypedValue {
12871301 Timestamp : tv .GetTimestamp (),
12881302 Value : & sdcpb.TypedValue_JsonVal {JsonVal : nil },
12891303 }, nil
12901304 }
1291- case rsp . GetSchema () .GetLeaflist () != nil :
1305+ case schemaElem .GetLeaflist () != nil :
12921306 switch tv .Value .(type ) {
12931307 case * sdcpb.TypedValue_LeaflistVal :
12941308 return tv , nil
@@ -1301,8 +1315,8 @@ func (d *Datastore) convertTypedValueToProto(ctx context.Context, p *sdcpb.Path,
13011315 },
13021316 },
13031317 }, nil
1304- case rsp . GetSchema () .GetField () != nil :
1305- switch rsp . GetSchema () .GetField ().GetType ().GetType () {
1318+ case schemaElem .GetField () != nil :
1319+ switch schemaElem .GetField ().GetType ().GetType () {
13061320 default :
13071321 return tv , nil
13081322 case "string" , "identityref" :
0 commit comments