go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/providers/core/resources/uuid.go (about)

     1  // Copyright (c) Mondoo, Inc.
     2  // SPDX-License-Identifier: BUSL-1.1
     3  
     4  package resources
     5  
     6  import (
     7  	"errors"
     8  
     9  	"github.com/google/uuid"
    10  	"go.mondoo.com/cnquery/llx"
    11  	"go.mondoo.com/cnquery/providers-sdk/v1/plugin"
    12  )
    13  
    14  func (u *mqlUuid) id() (string, error) {
    15  	return "uuid:" + u.Value.Data, nil
    16  }
    17  
    18  func initUuid(runtime *plugin.Runtime, args map[string]*llx.RawData) (map[string]*llx.RawData, plugin.Resource, error) {
    19  	if x, ok := args["value"]; ok {
    20  		value, ok := x.Value.(string)
    21  		if !ok {
    22  			return nil, nil, errors.New("wrong type for 'value' in uuid initialization, it must be a string")
    23  		}
    24  
    25  		// ensure the value is a proper uuid
    26  		u, err := uuid.Parse(value)
    27  		if err != nil {
    28  			return nil, nil, errors.New("invalid uuid: " + value)
    29  		}
    30  
    31  		args["value"] = llx.StringData(u.String())
    32  	}
    33  
    34  	return args, nil, nil
    35  }
    36  
    37  func (u *mqlUuid) parse() error {
    38  	x, err := uuid.Parse(u.Value.Data)
    39  	if err != nil {
    40  		u.Urn = plugin.TValue[string]{Error: err, State: plugin.StateIsSet}
    41  		u.Version = plugin.TValue[int64]{Error: err, State: plugin.StateIsSet}
    42  		u.Variant = plugin.TValue[string]{Error: err, State: plugin.StateIsSet}
    43  		return err
    44  	}
    45  
    46  	u.Urn = plugin.TValue[string]{Data: x.URN(), State: plugin.StateIsSet}
    47  	u.Version = plugin.TValue[int64]{Data: int64(x.Version()), State: plugin.StateIsSet}
    48  	u.Variant = plugin.TValue[string]{Data: x.Variant().String(), State: plugin.StateIsSet}
    49  	return nil
    50  }
    51  
    52  func (u *mqlUuid) urn() (string, error) {
    53  	return "", u.parse()
    54  }
    55  
    56  func (u *mqlUuid) version() (int64, error) {
    57  	return 0, u.parse()
    58  }
    59  
    60  func (u *mqlUuid) variant() (string, error) {
    61  	return "", u.parse()
    62  }