// Set takes the object and commits it to the database. func (c *Client) Set(obj db.Entity) error { if err := obj.Validate(); err != nil { return err } if obj.Hooks().PreSet != nil { if err := obj.Hooks().PreSet(c, obj); err != nil { return errors.EtcdToErrored(err) } } content, err := jsonio.Write(obj) if err != nil { return err } path, err := obj.Path() if err != nil { return err } if _, err := c.client.Set(context.Background(), c.qualified(path), string(content), nil); err != nil { return errors.EtcdToErrored(err) } if obj.Hooks().PostSet != nil { if err := obj.Hooks().PostSet(c, obj); err != nil { return errors.EtcdToErrored(err) } } return nil }
// Get retrieves the item from etcd's key/value store and then populates obj with its data. func (c *Client) Get(obj db.Entity) error { if obj.Hooks().PreGet != nil { if err := obj.Hooks().PreGet(c, obj); err != nil { return errors.EtcdToErrored(err) } } path, err := obj.Path() if err != nil { return err } resp, err := c.client.Get(context.Background(), c.qualified(path), nil) if err != nil { return errors.EtcdToErrored(err) } if err := jsonio.Read(obj, []byte(resp.Node.Value)); err != nil { return err } if err := obj.SetKey(c.trimPath(resp.Node.Key)); err != nil { return err } if obj.Hooks().PostGet != nil { if err := obj.Hooks().PostGet(c, obj); err != nil { return errors.EtcdToErrored(err) } } return obj.Validate() }