Skip to content

Commit

Permalink
Use generics to convert objects to config nodes
Browse files Browse the repository at this point in the history
Signed-off-by: Marc Khouzam <kmarc@vmware.com>
  • Loading branch information
marckhouzam committed Apr 19, 2023
1 parent 9ea858f commit aca8db7
Show file tree
Hide file tree
Showing 8 changed files with 15 additions and 78 deletions.
2 changes: 1 addition & 1 deletion config/cli_repositories.go
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ func deleteCLIRepository(node *yaml.Node, name string) error {
}

func setRepository(repositoriesNode *yaml.Node, repository configtypes.PluginRepository, patchStrategyOpts ...nodeutils.PatchStrategyOpts) (persist bool, err error) {
newNode, err := convertPluginRepositoryToNode(&repository)
newNode, err := convertObjectToNode(&repository)
if err != nil {
return persist, err
}
Expand Down
2 changes: 1 addition & 1 deletion config/clientconfig_factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ func getClientConfigNoLock() (*yaml.Node, error) {
// newClientConfigNode create and return new client config node
func newClientConfigNode() (*yaml.Node, error) {
c := &configtypes.ClientConfig{}
node, err := convertClientConfigToNode(c)
node, err := convertObjectToNode(c)
node.Content[0].Style = 0
if err != nil {
return nil, err
Expand Down
2 changes: 1 addition & 1 deletion config/clientconfignextgen_factory_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ func TestGetClientConfigNextGenNode(t *testing.T) {
//Assertions
assert.NoError(t, err)
c := &configtypes.ClientConfig{}
expectedNode, err := convertClientConfigToNode(c)
expectedNode, err := convertObjectToNode(c)
expectedNode.Content[0].Style = 0
assert.NoError(t, err)
assert.Equal(t, expectedNode, node)
Expand Down
2 changes: 1 addition & 1 deletion config/contexts.go
Original file line number Diff line number Diff line change
Expand Up @@ -294,7 +294,7 @@ func setContext(node *yaml.Node, ctx *configtypes.Context) (persist bool, err er
var persistDiscoverySources bool

// Convert context to node
newContextNode, err := convertContextToNode(ctx)
newContextNode, err := convertObjectToNode(ctx)
if err != nil {
return persist, err
}
Expand Down
79 changes: 8 additions & 71 deletions config/conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -173,78 +173,15 @@ func convertNodeToMetadata(node *yaml.Node) (obj *configtypes.Metadata, err erro
return obj, err
}

// convertClientConfigToNode converts client config type to yaml node
func convertClientConfigToNode(obj *configtypes.ClientConfig) (*yaml.Node, error) {
bytes, err := yaml.Marshal(obj)
if err != nil {
return nil, errors.Wrap(err, "failed to convert obj to node")
}
var node yaml.Node
err = yaml.Unmarshal(bytes, &node)
if err != nil {
return nil, errors.Wrap(err, "failed to unmarshal bytes to node")
}
return &node, nil
}

// convertMetadataToNode converts client config type to yaml node
func convertMetadataToNode(metadata *configtypes.Metadata) (*yaml.Node, error) {
bytes, err := yaml.Marshal(metadata)
if err != nil {
return nil, errors.Wrap(err, "failed to convert metadata obj to node")
}
var node yaml.Node
err = yaml.Unmarshal(bytes, &node)
if err != nil {
return nil, errors.Wrap(err, "failed to unmarshal bytes to node")
}
return &node, nil
}

// convertServerToNode converts server to yaml node
func convertServerToNode(obj *configtypes.Server) (*yaml.Node, error) {
bytes, err := yaml.Marshal(obj)
if err != nil {
return nil, errors.Wrap(err, "failed to convert obj to node")
}
var node yaml.Node
err = yaml.Unmarshal(bytes, &node)
if err != nil {
return nil, errors.Wrap(err, "failed to unmarshal bytes to node")
}
return &node, nil
}

// convertPluginRepositoryToNode converts PluginRepository to yaml node
func convertPluginRepositoryToNode(obj *configtypes.PluginRepository) (*yaml.Node, error) {
bytes, err := yaml.Marshal(obj)
if err != nil {
return nil, errors.Wrap(err, "failed to convert obj to node")
}
var node yaml.Node
err = yaml.Unmarshal(bytes, &node)
if err != nil {
return nil, errors.Wrap(err, "failed to unmarshal bytes to node")
}
return &node, nil
}

// convertContextToNode converts context to yaml node
func convertContextToNode(obj *configtypes.Context) (*yaml.Node, error) {
bytes, err := yaml.Marshal(obj)
if err != nil {
return nil, errors.Wrap(err, "failed to convert obj to node")
}
var node yaml.Node
err = yaml.Unmarshal(bytes, &node)
if err != nil {
return nil, errors.Wrap(err, "failed to unmarshal bytes to node")
}
return &node, nil
}
// convertObjectToNode converts a typed object to yaml node
func convertObjectToNode[
T *configtypes.ClientConfig |
*configtypes.Metadata |
*configtypes.Server |
*configtypes.PluginRepository |
*configtypes.Context |
*configtypes.PluginDiscovery](obj T) (*yaml.Node, error) {

// convertPluginDiscoveryToNode converts PluginDiscovery to yaml node
func convertPluginDiscoveryToNode(obj *configtypes.PluginDiscovery) (*yaml.Node, error) {
bytes, err := yaml.Marshal(obj)
if err != nil {
return nil, errors.Wrap(err, "failed to convert obj to node")
Expand Down
2 changes: 1 addition & 1 deletion config/discovery_sources_node.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ func setDiscoverySources(node *yaml.Node, discoverySources []configtypes.PluginD
//nolint:gocyclo
func setDiscoverySource(discoverySourcesNode *yaml.Node, discoverySource configtypes.PluginDiscovery, patchStrategyOpts ...nodeutils.PatchStrategyOpts) (persist bool, err error) {
// Convert discoverySource change obj to yaml node
newNode, err := convertPluginDiscoveryToNode(&discoverySource)
newNode, err := convertObjectToNode(&discoverySource)
if err != nil {
return persist, err
}
Expand Down
2 changes: 1 addition & 1 deletion config/metadata_factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ func getMetadataNodeNoLock() (*yaml.Node, error) {

func newMetadataNode() (*yaml.Node, error) {
c := &configtypes.Metadata{}
node, err := convertMetadataToNode(c)
node, err := convertObjectToNode(c)
node.Content[0].Style = 0
if err != nil {
return nil, err
Expand Down
2 changes: 1 addition & 1 deletion config/servers.go
Original file line number Diff line number Diff line change
Expand Up @@ -352,7 +352,7 @@ func setServer(node *yaml.Node, s *configtypes.Server) (persist bool, err error)
var persistDiscoverySources bool

// convert server to node
newServerNode, err := convertServerToNode(s)
newServerNode, err := convertObjectToNode(s)
if err != nil {
return persist, err
}
Expand Down

0 comments on commit aca8db7

Please sign in to comment.