      Encode a repeated `float` field.
      This method is distinct from the generic repeated `ProtoEncodable` one because floats can be packed.
      */
-    public func encode(tag: UInt32, value: [Float]?, packed: Bool? = nil) throws {
-        guard let value = value else { return }
+    public func encode(tag: UInt32, value: [Float], packed: Bool? = nil) throws {
+        guard !value.isEmpty else { return }
 
         try encode(tag: tag, wireType: .fixed32, value: value, packed: packed) { item in
             try item.encode(to: self)

        value: [String: V],
        valueEncoding: ProtoIntEncoding = .variable
    ) throws {
        try encode(tag: tag, value: value) { key, item in
            try encode(tag: 1, value: key)
            try encode(tag: 2, value: item, encoding: valueEncoding)

        value: [K: V],
        keyEncoding: ProtoIntEncoding = .variable
    ) throws where V.RawValue == UInt32 {
        guard !value.isEmpty else { return }

        try encode(tag: tag, value: value) { key, item in
            try encode(tag: 1, value: key, encoding: keyEncoding)
            try encode(tag: 2, value: item.rawValue, encoding: .variable)
