summaryrefslogtreecommitdiff
path: root/vendor/github.com/ulule/deepcopier/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/ulule/deepcopier/README.md')
-rw-r--r--vendor/github.com/ulule/deepcopier/README.md129
1 files changed, 129 insertions, 0 deletions
diff --git a/vendor/github.com/ulule/deepcopier/README.md b/vendor/github.com/ulule/deepcopier/README.md
new file mode 100644
index 000000000..25aafae8a
--- /dev/null
+++ b/vendor/github.com/ulule/deepcopier/README.md
@@ -0,0 +1,129 @@
+# Deepcopier
+
+[![Build Status](https://secure.travis-ci.org/ulule/deepcopier.png?branch=master)](http://travis-ci.org/ulule/deepcopier)
+
+This package is meant to make copying of structs to/from others structs a bit easier.
+
+## Installation
+
+```bash
+go get -u github.com/ulule/deepcopier
+```
+
+## Usage
+
+```golang
+// Deep copy instance1 into instance2
+Copy(instance1).To(instance2)
+
+// Deep copy instance1 into instance2 and passes the following context (which
+// is basically a map[string]interface{}) as first argument
+// to methods of instance2 that defined the struct tag "context".
+Copy(instance1).WithContext(map[string]interface{}{"foo": "bar"}).To(instance2)
+
+// Deep copy instance2 into instance1
+Copy(instance1).From(instance2)
+
+// Deep copy instance2 into instance1 and passes the following context (which
+// is basically a map[string]interface{}) as first argument
+// to methods of instance1 that defined the struct tag "context".
+Copy(instance1).WithContext(map[string]interface{}{"foo": "bar"}).From(instance2)
+```
+
+Available options for `deepcopier` struct tag:
+
+| Option | Description |
+| --------- | -------------------------------------------------------------------- |
+| `field` | Field or method name in source instance |
+| `skip` | Ignores the field |
+| `context` | Takes a `map[string]interface{}` as first argument (for methods) |
+| `force` | Set the value of a `sql.Null*` field (instead of copying the struct) |
+
+**Options example:**
+
+```golang
+type Source struct {
+ Name string
+ SkipMe string
+ SQLNullStringToSQLNullString sql.NullString
+ SQLNullStringToString sql.NullString
+
+}
+
+func (Source) MethodThatTakesContext(c map[string]interface{}) string {
+ return "whatever"
+}
+
+type Destination struct {
+ FieldWithAnotherNameInSource string `deepcopier:"field:Name"`
+ SkipMe string `deepcopier:"skip"`
+ MethodThatTakesContext string `deepcopier:"context"`
+ SQLNullStringToSQLNullString sql.NullString
+ SQLNullStringToString string `deepcopier:"force"`
+}
+
+```
+
+Example:
+
+```golang
+package main
+
+import (
+ "fmt"
+
+ "github.com/ulule/deepcopier"
+)
+
+// Model
+type User struct {
+ // Basic string field
+ Name string
+ // Deepcopier supports https://golang.org/pkg/database/sql/driver/#Valuer
+ Email sql.NullString
+}
+
+func (u *User) MethodThatTakesContext(ctx map[string]interface{}) string {
+ // do whatever you want
+ return "hello from this method"
+}
+
+// Resource
+type UserResource struct {
+ DisplayName string `deepcopier:"field:Name"`
+ SkipMe string `deepcopier:"skip"`
+ MethodThatTakesContext string `deepcopier:"context"`
+ Email string `deepcopier:"force"`
+
+}
+
+func main() {
+ user := &User{
+ Name: "gilles",
+ Email: sql.NullString{
+ Valid: true,
+ String: "gilles@example.com",
+ },
+ }
+
+ resource := &UserResource{}
+
+ deepcopier.Copy(user).To(resource)
+
+ fmt.Println(resource.DisplayName)
+ fmt.Println(resource.Email)
+}
+```
+
+Looking for more information about the usage?
+
+We wrote [an introduction article](https://github.com/ulule/deepcopier/blob/master/examples/rest-usage/README.rst).
+Have a look and feel free to give us your feedback.
+
+## Contributing
+
+* Ping us on twitter [@oibafsellig](https://twitter.com/oibafsellig), [@thoas](https://twitter.com/thoas)
+* Fork the [project](https://github.com/ulule/deepcopier)
+* Help us improving and fixing [issues](https://github.com/ulule/deepcopier/issues)
+
+Don't hesitate ;)