code: func ObjectToStruct(in interface{}, out interface{}) error {
  	bytes, err := json.Marshal(in)
  	if err != nil {
  		return trace.Wrap(err, fmt.Sprintf("failed to marshal %v, %v", in, err))
  	}
  	if err := json.Unmarshal([]byte(bytes), out); err != nil {
  		return trace.Wrap(err, fmt.Sprintf("failed to unmarshal %v into %T, %v", in, out, err))
  	}
  	return nil
  }
docs: // ObjectToStruct is converts any structure into JSON and then unmarshalls it into
  // another structure.
  //
  // Teleport configuration uses this (strange, at first) trick to convert from one
  // struct type to another, if their fields are loosely compatible via their `json` tags
  //
  // Example: assume you have two structs:
  //
  // type A struct {
  //     Name string `json:"name"`
  //	   Age  int    `json:"age"`
  // }
  //
  // type B struct {
  //	   FullName string `json:"name"`
  // }
  //
  // Now you can convert B to A:
  //
  //		b := &B{ FullName: "Bob Dilan"}
  //		var a *A
  //		utils.ObjectToStruct(b, &a)
  //		fmt.Println(a.Name)
  //
  //  > "Bob Dilan"
  //