// Write writes the item to the store. It constructs the key using the i.Key() // and prefixes it with the type of struct. When the key is empty, it assigns // a unique universal id(UUID) using the SetKey method of the Item func (s *Store) Write(i store.Item) error { c := s.pool.Get() defer c.Close() value := reflect.ValueOf(i).Elem() ri := &Item{ prefix: s.typeName(value), data: make(map[string]interface{}), } // Use the Items id if set or generate // a new UUID ri.key = i.Key() if len(ri.key) == 0 { ri.key = uuid.New() } i.SetKey(ri.key) // convert the item to redis item if err := marshall(i, value, ri); err != nil { return err } for key, val := range ri.data { if err := c.Send("HSET", ri.Key(), key, val); err != nil { return err } c.Flush() } return nil }