code: func Marshal(in interface{}) (out []byte, err error) {
  	defer handleErr(&err)
  	e := &encoder{make([]byte, 0, initialBufferSize)}
  	e.addDoc(reflect.ValueOf(in))
  	return e.out, nil
  }
docs: // Marshal serializes the in value, which may be a map or a struct value.
  // In the case of struct values, only exported fields will be serialized.
  // The lowercased field name is used as the key for each exported field,
  // but this behavior may be changed using the respective field tag.
  // The tag may also contain flags to tweak the marshalling behavior for
  // the field. The tag formats accepted are:
  //
  //     "[<key>][,<flag1>[,<flag2>]]"
  //
  //     `(...) bson:"[<key>][,<flag1>[,<flag2>]]" (...)`
  //
  // The following flags are currently supported:
  //
  //     omitempty  Only include the field if it's not set to the zero
  //                value for the type or to empty slices or maps.
  //
  //     minsize    Marshal an int64 value as an int32, if that's feasible
  //                while preserving the numeric value.
  //
  //     inline     Inline the field, which must be a struct or a map,
  //                causing all of its fields or keys to be processed as if
  //                they were part of the outer struct. For maps, keys must
  //                not conflict with the bson keys of other struct fields.
  //
  // Some examples:
  //
  //     type T struct {
  //         A bool
  //         B int    "myb"
  //         C string "myc,omitempty"
  //         D string `bson:",omitempty" json:"jsonkey"`
  //         E int64  ",minsize"
  //         F int64  "myf,omitempty,minsize"
  //     }
  //