Skip to content

Commit b8ddfe4

Browse files
committed
Factor out the common nanosecond formatting
Formatting nanoseconds to 3, 6, or 9 digits occurs in two different places. Factor that out to reduce duplication.
1 parent 8fb0386 commit b8ddfe4

File tree

3 files changed

+16
-19
lines changed

3 files changed

+16
-19
lines changed

Sources/SwiftProtobuf/Google_Protobuf_Duration+Extensions.swift

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -99,16 +99,8 @@ private func formatDuration(seconds: Int64, nanos: Int32) -> String? {
9999
guard seconds >= minDurationSeconds && seconds <= maxDurationSeconds else {
100100
return nil
101101
}
102-
103-
if nanos == 0 {
104-
return String(seconds) + "s"
105-
} else if nanos % 1000000 == 0 {
106-
return "\(seconds).\(threeDigit(abs(nanos) / 1000000))s"
107-
} else if nanos % 1000 == 0 {
108-
return "\(seconds).\(sixDigit(abs(nanos) / 1000))s"
109-
} else {
110-
return "\(seconds).\(nineDigit(abs(nanos)))s"
111-
}
102+
let nanosString = nanosToString(nanos: nanos) // Includes leading '.' if needed
103+
return "\(seconds)\(nanosString)s"
112104
}
113105

114106
extension Google_Protobuf_Duration {

Sources/SwiftProtobuf/Google_Protobuf_Timestamp+Extensions.swift

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -193,16 +193,9 @@ private func formatTimestamp(seconds: Int64, nanos: Int32) -> String? {
193193

194194
let dateString = "\(fourDigit(YY))-\(twoDigit(MM))-\(twoDigit(DD))"
195195
let timeString = "\(twoDigit(hh)):\(twoDigit(mm)):\(twoDigit(ss))"
196+
let nanosString = nanosToString(nanos: nanos) // Includes leading '.' if needed
196197

197-
if nanos == 0 {
198-
return "\(dateString)T\(timeString)Z"
199-
} else if nanos % 1000000 == 0 {
200-
return "\(dateString)T\(timeString).\(threeDigit(nanos / 1000000))Z"
201-
} else if nanos % 1000 == 0 {
202-
return "\(dateString)T\(timeString).\(sixDigit(nanos / 1000))Z"
203-
} else {
204-
return "\(dateString)T\(timeString).\(nineDigit(nanos))Z"
205-
}
198+
return "\(dateString)T\(timeString)\(nanosString)Z"
206199
}
207200

208201
extension Google_Protobuf_Timestamp {

Sources/SwiftProtobuf/TimeUtils.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,3 +51,15 @@ internal func gregorianDateFromSecondsSince1970(seconds: Int64) -> (YY: Int32, M
5151

5252
return (YY: Int32(YY), MM: Int32(MM), DD: Int32(DD))
5353
}
54+
55+
internal func nanosToString(nanos: Int32) -> String {
56+
if nanos == 0 {
57+
return ""
58+
} else if nanos % 1000000 == 0 {
59+
return ".\(threeDigit(abs(nanos) / 1000000))"
60+
} else if nanos % 1000 == 0 {
61+
return ".\(sixDigit(abs(nanos) / 1000))"
62+
} else {
63+
return ".\(nineDigit(abs(nanos)))"
64+
}
65+
}

0 commit comments

Comments
 (0)