mapper

package module
v0.0.0-...-8206c58 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 14, 2021 License: MIT Imports: 5 Imported by: 2

README

Go Coverage Status Go Report Card GoDoc GitHub

go-structmapper

Convert any struct into a map and vice versa.

Description

This library can recursively convert a struct to a map of type map[string]interface{} where the keys are the struct field names and the values are the field values. Similarly, the library can set the fields of a struct using a map.

A mapping function can be used to convert keys or values before they are set.

Features
  • Handles composed structs
  • Handles nested structs
  • Handles reference cycles
  • Supports unexported fields
  • Supports field mapping or conversion
Prerequisites

Not all types are tested or supported yet eg. interface, function, channel

go get -u github.com/jschoedt/go-structmapper
Default usage
// convert struct to map
s := &SomeStruct{Name: "John"}
mapper := mapper.New()
m, err := mapper.StructToMap(s) // m["Name"] == "John"

// convert map to struct
s = &SomeStruct{}
err := mapper.MapToStruct(m, s) // s.Name == "John"
Using a conversion mapping

A MapFunc can be used to map a key or value to some other key or value. Returning the MappingType mapper.Ignore will ignore that field. The MapFunc will be called on every field that is encountered in the struct

s := &SomeStruct{Name: "John"}
mapper := mapper.New()
mapper.MapFunc = func(inKey string, inVal interface{}) (mt MappingType, outKey string, outVal interface{}) {
	return mapper.Default, strings.ToLower(inKey), "Deere"
}
m, err := mapper.StructToMap(s) // m["name"] == "Deere"

// convert map to struct
s = &SomeStruct{}
mapper.CaseSensitive = false // now 'name' will match 'Name'
err := mapper.MapToStruct(m, s) // s.Name == "Deere"

More examples

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func IsNil

func IsNil(val interface{}) bool

IsNil returns true if val is nil or a nil pointer

Types

type MapFunc

type MapFunc func(inKey string, inVal interface{}) (mt MappingType, outKey string, outVal interface{})

MapFunc used to map a field name and value to another field name and value

type Mapper

type Mapper struct {
	// MapFunc maps keys and values to some other key or value
	MapFunc MapFunc
	// CaseSensitive if MapToStruct should be case-sensitive
	CaseSensitive bool
}

Mapper used for mapping structs to maps or other structs

func New

func New() *Mapper

New creates a new mapper

func (*Mapper) MapToStruct

func (mapper *Mapper) MapToStruct(fromPtr interface{}, toPtr interface{}) error

MapToStruct takes a map or a struct ptr (as fromPtr) and maps to a struct ptr

func (*Mapper) StructToMap

func (mapper *Mapper) StructToMap(sp interface{}) (map[string]interface{}, error)

StructToMap maps a struct pointer to a map. Including nested structs

type MappingType

type MappingType int

MappingType the type of mapping to perform

const (
	// Default use the default mapping logic provided
	Default MappingType = iota
	// Custom force the key to be a value
	Custom
	// Ignore ignores the field entirely
	Ignore
)

func NilMapFunc

func NilMapFunc(inKey string, inVal interface{}) (mt MappingType, outKey string, outVal interface{})

NilMapFunc default mapper that returns the same field name and value

func (MappingType) String

func (t MappingType) String() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL