func()

in http.go [350:401]


func (h *httpPeer) Put(context Context, in *pb.PutRequest, out *pb.PutResponse) error {
	u := fmt.Sprintf(
		"%v%v/%v",
		h.baseURL,
		url.QueryEscape(in.GetGroup()),
		url.QueryEscape(in.GetKey()),
	)
	var ttl time.Time
	hasTTL := false
	var err error
	if in.GetTtl() != nil {
		ttl, err = ptypes.Timestamp(in.GetTtl())
		if err != nil {
			return err
		}
		hasTTL = true
	}
	p := putBody{Value: in.GetValue(), HasTTL: hasTTL, TTL: ttl}
	jb, err := json.Marshal(p)
	if err != nil {
		return err
	}
	reader := bytes.NewReader(jb)
	req, err := http.NewRequest("POST", u, reader)
	if err != nil {
		return err
	}
	tr := http.DefaultTransport
	if h.transport != nil {
		tr = h.transport(context)
	}
	res, err := tr.RoundTrip(req)
	if err != nil {
		return err
	}
	defer res.Body.Close()
	if res.StatusCode != http.StatusOK {
		return fmt.Errorf("server returned: %v", res.Status)
	}
	b := bufferPool.Get().(*bytes.Buffer)
	b.Reset()
	defer bufferPool.Put(b)
	_, err = io.Copy(b, res.Body)
	if err != nil {
		return fmt.Errorf("reading response body: %v", err)
	}
	err = proto.Unmarshal(b.Bytes(), out)
	if err != nil {
		return fmt.Errorf("decoding response body: %v", err)
	}
	return nil
}