Source File
encode_duration.go
Belonging Package
google.golang.org/grpc/internal/grpcutil
/*** Copyright 2020 gRPC authors.** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at** http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.**/package grpcutilimport ()const maxTimeoutValue int64 = 100000000 - 1// div does integer division and round-up the result. Note that this is// equivalent to (d+r-1)/r but has less chance to overflow.func (, time.Duration) int64 {if % > 0 {return int64(/ + 1)}return int64( / )}// EncodeDuration encodes the duration to the format grpc-timeout header// accepts.//// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requestsfunc ( time.Duration) string {// TODO: This is simplistic and not bandwidth efficient. Improve it.if <= 0 {return "0n"}if := div(, time.Nanosecond); <= maxTimeoutValue {return strconv.FormatInt(, 10) + "n"}if := div(, time.Microsecond); <= maxTimeoutValue {return strconv.FormatInt(, 10) + "u"}if := div(, time.Millisecond); <= maxTimeoutValue {return strconv.FormatInt(, 10) + "m"}if := div(, time.Second); <= maxTimeoutValue {return strconv.FormatInt(, 10) + "S"}if := div(, time.Minute); <= maxTimeoutValue {return strconv.FormatInt(, 10) + "M"}// Note that maxTimeoutValue * time.Hour > MaxInt64.return strconv.FormatInt(div(, time.Hour), 10) + "H"}
The pages are generated with Golds v0.7.6. (GOOS=linux GOARCH=amd64)