Giter VIP home page Giter VIP logo

aws-sdk-go-bindings's Introduction

aws-sdk-go-bindings CircleCI GoDoc Go Report Card Apache V2 License

Helper to easily access some aws-sdk-go's methods and lambda utilities like preparing an sns default message and unmarshal an image coming out from a stream like:

// UnmarshalDynamoEvent unmarshals a events.DynamoDBEventRecord into a given target.
// Out has to be a pointer.
func UnmarshalDynamoEvent(event events.DynamoDBEventRecord, out interface{}) error {

	if reflect.DeepEqual(event, reflect.Zero(reflect.TypeOf(event)).Interface()) {
		return errors.Wrap(bindings.ErrInvalidParameter, "event")
	}
	if reflect.ValueOf(out).Kind() != reflect.Ptr {
		return errors.Wrap(bindings.ErrInvalidParameter, "out")
	}

	img := event.Change.NewImage
	if len(img) == 0 {
		return errors.New("event's image is empty")
	}

	m := make(map[string]*dynamodb.AttributeValue, len(img))

	for k, v := range img {

		b, err := v.MarshalJSON()
		if err != nil {
			return errors.Wrap(err, "unable to marshal current element to json")
		}

		var attr dynamodb.AttributeValue

		err = json.Unmarshal(b, &attr)
		if err != nil {
			return errors.Wrap(err, "unable to unmarshal current element to json")
		}

		m[k] = &attr

	}

	return dynamodbattribute.UnmarshalMap(m, out)

}

Contributors

Special thanks to:

aws-sdk-go-bindings's People

Contributors

andream16 avatar andrewslotin avatar ferruvich avatar iker92 avatar karmakaze avatar werwolv avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

aws-sdk-go-bindings's Issues

Test cases

Use test cases and table testing to fully test cover Exported functions. Stop writing huge tests that can be written in less line thanks to table testing.

Stop using new(T); Start using &T{}

In order to have more idiomatic go, replace all new(T); T.SetFirstname("Bob") with &T{Firstname: "Bob"}. Then, remove unused Set methods.

Remove private functions tests

Remove tests for private functions. We should cover the latters in the different tests of functions that rely on them with suitable test cases (table tests) and proper mocks.

Wrap errors to give them more context

At the moment, errors' context is badly handled. We should wrap errors like:

package user

import (
    "github.com/pkg/errors"
)

var (
    // ErrInvalidParam used when a parameter is invalid
    ErrInvalidParam = errors.New("invalid param")
)
 // User represents a user
type User struct {
    FirstName string
    LastName string
}

func (u *User) validate() error {
    
    if u.FirstName == "" {
        return errors.Wrap(ErrInvalidParam, "param : %s", "FirstName")
    }
    if u.LastName == "" {
        return errors.Wrap(ErrInvalidParam, "param : %s", "LastName")
    }

    return nil

}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.