The default mapping from Well-Known Types to Scala and Java standard library types.
The raw side of every mapping is protobuf-java's own generated class rather than a hand-written Scala mirror. That is what (nscn.polaris2.protoc.field).wkt_mapping = RAW falls back to, and it means there is no second implementation of Timestamp to keep in step with protobuf's.
The generator emits references to these mappers by name, so they are plain vals and not only givens - nothing here depends on implicit search succeeding.
The two disagree about how to represent a negative duration and the difference is silent. java.time.Duration keeps nano in [0, 1e9) and pushes the borrow into seconds, so -1.5s is (-2, 500000000). protobuf requires both components to carry the same sign, so the same value is (-1, -500000000). Writing getSeconds and getNano straight through produces a duration off by one second, which is why the borrow is undone here.
A field of type Empty therefore reads as Option[Unit], which looks odd but is accurate: the only information such a field carries is whether it is there.
Instant.getNano is always in [0, 1e9), which is exactly what protobuf requires of Timestamp.nanos, so this direction needs no normalization. The mapping is not total in reverse: a Timestamp carrying an out-of-range nanos is normalized by Instant and will not come back byte-identical.