Skip to content

olegdayo/omniconv

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Sep 25, 2024
e6005aa · Sep 25, 2024

History

15 Commits
Aug 22, 2024
Aug 22, 2024
Aug 22, 2024
Aug 22, 2024
Aug 22, 2024
Aug 22, 2024
Aug 22, 2024
Sep 25, 2024
Sep 24, 2024
Sep 24, 2024
Aug 22, 2024
Sep 24, 2024
Sep 25, 2024
Sep 24, 2024
Sep 24, 2024
Sep 25, 2024

Repository files navigation

OmniConv

CI

A simple, somewhat declarative type conversion library

Examples

Base Types

func ExampleNumber() {
	ints := []int{1, 2, 3, 4}
	floats := omniconv.ConvertSlice(ints, omniconv.NumberConverter[int, float64])
	fmt.Printf("%#v\n", floats)
	// Output: []float64{1, 2, 3, 4}
}

func ExampleString() {
	strings := map[int]string{5: "6", 7: "8", 9: "silly"}
	uints := omniconv.ConvertMap(strings, omniconv.StringToIntConverter[int])
	fmt.Printf("%#v\n", uints)
	// Output:  map[int]int{5:6, 7:8, 9:0}
}

Custom Types

type ModelLogic struct {
	ID   int
	Name string
}

type ModelRepository struct {
	ID   int
	Name sql.NullString
}

func RepositoryToLogicConverter(from ModelRepository) (to ModelLogic) {
	to.ID = from.ID
	if from.Name.Valid {
		to.Name = from.Name.String
	}
	return to
}

func ExampleCustom() {
	repositories := []ModelRepository{
		{
			ID: 123,
			Name: sql.NullString{
				String: "smth",
				Valid:  true,
			},
		},
		{
			ID:   456,
			Name: sql.NullString{},
		},
	}
	logics := omniconv.ConvertSlice(repositories, RepositoryToLogicConverter)
	fmt.Printf("%#v\n", logics)
	// Output: []examples.ModelLogic{examples.ModelLogic{ID:123, Name:"smth"}, examples.ModelLogic{ID:456, Name:""}}
}

About

A simple, somewhat declarative type conversion library

Resources

License

Stars

Watchers

Forks

Packages

No packages published