Skip to content

lzambarda/goflat

Repository files navigation

goflat

Coverage

Go Reference Go Report Card

Generic, context-aware flat file marshaller and unmarshaller using the flat field tag in structs.

Overview

type Record struct {
    FirstName string  `flat:"first_name"`
    LastName  *string `flat:"last_name"`
    Age       int     `flat:"age"`
    Height    float32 `flat:"-"` // ignored
}

...

goflat.MarshalIteratorToWriter[Record](ctx, seq, writer *csv.Writer, opts Options)

// or

goflat.MarshalSliceToWriter[Record](ctx, slice, csvWriter, options)

// or

goflat.MarshalChannelToWriter[Record](ctx, inputCh, csvWriter, options)

Will result in:

first_name,last_name,age
John,Doe,30
Jane,Doe,20

Can unmarshal too!

goflat.UnmarshalToChan[Record](ctx, csvReader, options, outputCh)

Options

Both marshal and unmarshal operations support goflat.Options, which allow to introduce automatic safety checks, such as duplicated headers, flat tag coverage and more.

Custom marshal / unmarshal

Both operations can be customised for each field in a struct by having that value implementing goflat.Marshal and/or goflat.Unmarshal.

type Record struct {
    Field MyType `flat:"field"`
}

type MyType struct {
    Value int
}

func (m *MyType) Marshal() (string,error) {
    if m.Value %2 == 0 {
        return "odd", nil
    }

    return "even", nil
}

About

Context-aware generic CSV marshaller/unmarshaller

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

No packages published

Languages