/* * * 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 div(, time.Duration) int64 {if % > 0 {returnint64(/ + 1) }returnint64( / )}// 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 {returnstrconv.FormatInt(, 10) + "n" }if := div(, time.Microsecond); <= maxTimeoutValue {returnstrconv.FormatInt(, 10) + "u" }if := div(, time.Millisecond); <= maxTimeoutValue {returnstrconv.FormatInt(, 10) + "m" }if := div(, time.Second); <= maxTimeoutValue {returnstrconv.FormatInt(, 10) + "S" }if := div(, time.Minute); <= maxTimeoutValue {returnstrconv.FormatInt(, 10) + "M" }// Note that maxTimeoutValue * time.Hour > MaxInt64.returnstrconv.FormatInt(div(, time.Hour), 10) + "H"}
The pages are generated with Goldsv0.8.2. (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu.
PR and bug reports are welcome and can be submitted to the issue list.
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds.